From 4941738d4016b7f6850a923f2681447524e879d2 Mon Sep 17 00:00:00 2001 From: Richard Pringle Date: Wed, 13 Nov 2024 15:49:06 -0500 Subject: [PATCH 01/10] Send validation or delegation rewards to any address --- .../ERC20TokenStakingManager.go | 106 +++++- .../NativeTokenStakingManager.go | 106 +++++- .../validator-manager/PoSValidatorManager.sol | 128 ++++++- .../interfaces/IPoSValidatorManager.sol | 11 + .../tests/PoAValidatorManagerTests.t.sol | 16 + .../tests/PoSValidatorManagerTests.t.sol | 312 ++++++++++++++---- .../tests/ValidatorManagerTests.t.sol | 34 ++ tests/utils/validator_manager.go | 4 +- 8 files changed, 628 insertions(+), 89 deletions(-) diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index 38e16e06f..150e8ce99 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -103,8 +103,8 @@ type ValidatorRegistrationInput 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\":\"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\":[{\"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\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"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\":\"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\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"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\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"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\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"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\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"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\":\"DelegatorAdded\",\"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\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"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\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"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\":\"structPoSValidatorManagerSettings\",\"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\":\"initializeDelegatorRegistration\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"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\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"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\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"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: "0x608060405234801561000f575f80fd5b50604051615af0380380615af083398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6159a38061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106101fd575f3560e01c806380dd672f11610114578063b771b3bc116100a9578063c974d1b611610079578063c974d1b61461046d578063d5f20ff614610475578063df93d8de14610495578063e4a63c401461049f578063fd7ac5e7146104b3575f80fd5b8063b771b3bc1461040d578063ba3a4b9714610433578063bc5fbfec14610446578063bee0a03f1461045a575f80fd5b80639e478eea116100e45780639e478eea146103c0578063a3a65e48146103d3578063a9778a7a146102ac578063afb98096146103e6575f80fd5b806380dd672f1461037f5780638280a25a1461039257806393e245981461039a5780639e1bc4ef146103ad575f80fd5b80633a1cfff61161019557806360ad77841161016557806360ad77841461032c578063620658561461033f57806366435abf14610352578063732214f81461036557806376f786211461036c575f80fd5b80633a1cfff6146102c8578063467ef06f146102db5780634bee0040146102ee57806360305d621461030f575f80fd5b806320d91b7a116101d057806320d91b7a1461025b57806325e1c7761461026e5780632e2194d81461028157806335455ded146102ac575f80fd5b80630118acc4146102015780630322ed9814610216578063151d30d1146102295780631ec4472414610248575b5f80fd5b61021461020f366004614961565b6104c6565b005b61021461022436600461499c565b6104fb565b610231600a81565b60405160ff90911681526020015b60405180910390f35b610214610256366004614961565b610782565b6102146102693660046149b3565b61078d565b61021461027c366004614a01565b610d12565b61029461028f36600461499c565b610d86565b6040516001600160401b03909116815260200161023f565b6102b561271081565b60405161ffff909116815260200161023f565b6102146102d6366004614961565b610dda565b6102146102e9366004614a22565b610de5565b6103016102fc366004614a60565b610e8d565b60405190815260200161023f565b610317601481565b60405163ffffffff909116815260200161023f565b61021461033a366004614a01565b610ec2565b61030161034d366004614ac7565b61118f565b61029461036036600461499c565b6111af565b6103015f81565b61021461037a366004614961565b6111c3565b61021461038d366004614a01565b6111ee565b610231603081565b6102146103a836600461499c565b611428565b6103016103bb366004614ae2565b6114dd565b6102146103ce366004614b16565b611509565b6102146103e1366004614a22565b6115e8565b6103017f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b61041b6005600160991b0181565b6040516001600160a01b03909116815260200161023f565b61021461044136600461499c565b6117dd565b6103015f8051602061590e83398151915281565b61021461046836600461499c565b611a3d565b610231601481565b61048861048336600461499c565b611b7a565b60405161023f9190614bc9565b6102946202a30081565b6103015f805160206158ee83398151915281565b6103016104c1366004614c49565b611cc9565b6104d1838383611d24565b6104f657604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f8051602061594e8339815191526020526040808220815160e0810190925280545f8051602061590e83398151915293929190829060ff16600581111561054857610548614b54565b600581111561055957610559614b54565b815260200160018201805461056d90614cb4565b80601f016020809104026020016040519081016040528092919081815260200182805461059990614cb4565b80156105e45780601f106105bb576101008083540402835291602001916105e4565b820191905f5260205f20905b8154815290600101906020018083116105c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561064f5761064f614b54565b14610682575f8381526007830160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614cec565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156106f9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107209190810190614df5565b6040518263ffffffff1660e01b815260040161073c9190614e26565b6020604051808303815f875af1158015610758573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077c9190614e38565b50505050565b61077c838383611d24565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061590e8339815191529060ff16156107df57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610822573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108469190614e38565b83602001351461086f576040516372b0a7e760e11b8152602084013560048201526024016104ed565b306108806060850160408601614e4f565b6001600160a01b0316146108c35761089e6060840160408501614e4f565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016104ed565b5f6108d16060850185614e6a565b905090505f805b828163ffffffff161015610b38575f6108f46060880188614e6a565b8363ffffffff1681811061090a5761090a614eaf565b905060200281019061091c9190614ec3565b61092590614f2e565b80516040519192505f91600888019161093d91614fa9565b9081526020016040518091039020541461096d57805160405163a41f772f60e01b81526104ed9190600401614e26565b5f6002885f01358460405160200161099c92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526109b691614fa9565b602060405180830381855afa1580156109d1573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906109f49190614e38565b90508086600801835f0151604051610a0c9190614fa9565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610a4c9082614ffe565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610acb90856150cd565b8251604051919550610adc91614fa9565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610b31906150e0565b90506108d8565b50600483018190556001830154606490610b5c90600160401b900460ff1683615102565b1015610b7e57604051635943317f60e01b8152600481018290526024016104ed565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ba287612071565b604001516040518263ffffffff1660e01b8152600401610bc29190614e26565b602060405180830381865af4158015610bdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c019190614e38565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610c3b9190615244565b5f60405180830381865af4158015610c55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c7c9190810190614df5565b90505f600282604051610c8f9190614fa9565b602060405180830381855afa158015610caa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ccd9190614e38565b9050828114610cf95760405163baaea89d60e01b815260048101829052602481018490526044016104ed565b5050506009909201805460ff1916600117905550505050565b610d1b82612187565b610d3b576040516330efa98b60e01b8152600481018390526024016104ed565b5f610d4583611b7a565b5190506002816005811115610d5c57610d5c614b54565b14610d7c578060405163170cc93360e21b81526004016104ed9190614cec565b61077c83836121b0565b5f80610d9061244f565b60030154610d9e90846152cf565b9050801580610db357506001600160401b0381115b15610dd45760405163222d164360e21b8152600481018490526024016104ed565b92915050565b61077c838383612473565b610ded61265c565b5f610df661244f565b90505f80610e0384612693565b91509150610e1082612187565b610e1c57505050610e74565b5f8281526006840160205260409020546001600160a01b0316600482516005811115610e4a57610e4a614b54565b03610e5957610e598184612a46565b610e6f81610e6a846040015161118f565b612a70565b505050505b610e8a60015f8051602061592e83398151915255565b50565b5f610e9661265c565b610ea285858585612aa6565b9050610eba60015f8051602061592e83398151915255565b949350505050565b5f610ecb61244f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f0457610f04614b54565b6003811115610f1557610f15614b54565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f610f8b82611b7a565b9050600183516003811115610fa257610fa2614b54565b14610fc3578251604051633b0d540d60e21b81526104ed91906004016152ee565b600481516005811115610fd857610fd8614b54565b03610fee57610fe686612c0b565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61101389612071565b604001516040518263ffffffff1660e01b81526004016110339190614e26565b606060405180830381865af415801561104e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110729190615308565b509150915081841461109f57846040015160405163089938b360e11b81526004016104ed91815260200190565b806001600160401b031683606001516001600160401b031610806110d85750806001600160401b03168560a001516001600160401b0316115b1561110157604051632e19bc2d60e11b81526001600160401b03821660048201526024016104ed565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61119861244f565b60030154610dd4906001600160401b038416615102565b5f6111b982611b7a565b6080015192915050565b6111ce838383612473565b6104f657604051635bff683f60e11b8152600481018490526024016104ed565b6111f661265c565b5f6111ff61244f565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561123857611238614b54565b600381111561124957611249614b54565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112c2576112c2614b54565b146112e3578051604051633b0d540d60e21b81526104ed91906004016152ee565b60046112f28260400151611b7a565b51600581111561130457611304614b54565b14611403575f61131384612071565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016113529190614e26565b606060405180830381865af415801561136d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113919190615308565b5091509150818460400151146113bd5760405163089938b360e11b8152600481018390526024016104ed565b806001600160401b03168460c001516001600160401b031611156113ff57604051632e19bc2d60e11b81526001600160401b03821660048201526024016104ed565b5050505b61140c84612c0b565b505061142460015f8051602061592e83398151915255565b5050565b5f61143161244f565b90505f61143d83611b7a565b519050600481600581111561145457611454614b54565b14611474578060405163170cc93360e21b81526004016104ed9190614cec565b5f8381526006830160205260409020546001600160a01b031633146114ba57335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016104ed565b5f8381526006830160205260409020546104f6906001600160a01b031684612a46565b5f6114e661265c565b6114f1833384612dd9565b9050610dd460015f8051602061592e83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611552575080546001600160401b03808416911610155b156115705760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561159b848461301c565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f8051602061590e8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61161b86612071565b604001516040518263ffffffff1660e01b815260040161163b9190614e26565b6040805180830381865af4158015611655573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116799190615348565b915091508061169f57604051632d07135360e01b815281151560048201526024016104ed565b5f828152600684016020526040902080546116b990614cb4565b90505f036116dd5760405163089938b360e11b8152600481018390526024016104ed565b60015f83815260078501602052604090205460ff16600581111561170357611703614b54565b14611736575f8281526007840160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614cec565b5f828152600684016020526040812061174e916148b0565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f6117e661244f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561181f5761181f614b54565b600381111561183057611830614b54565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156118a9576118a9614b54565b141580156118ca57506003815160038111156118c7576118c7614b54565b14155b156118eb578051604051633b0d540d60e21b81526104ed91906004016152ee565b5f6118f98260400151611b7a565b905080606001516001600160401b03165f0361192b576040516339b894f960e21b8152600481018590526024016104ed565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f9361199993906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af41580156119b3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119da9190810190614df5565b6040518263ffffffff1660e01b81526004016119f69190614e26565b6020604051808303815f875af1158015611a12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a369190614e38565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061590e8339815191529190611a8490614cb4565b90505f03611aa85760405163089938b360e11b8152600481018390526024016104ed565b60015f83815260078301602052604090205460ff166005811115611ace57611ace614b54565b14611b01575f8281526007820160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614cec565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611b3a919060040161536b565b6020604051808303815f875af1158015611b56573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f69190614e38565b611b826148e7565b5f8281525f8051602061594e833981519152602052604090819020815160e0810190925280545f8051602061590e833981519152929190829060ff166005811115611bcf57611bcf614b54565b6005811115611be057611be0614b54565b8152602001600182018054611bf490614cb4565b80601f0160208091040260200160405190810160405280929190818152602001828054611c2090614cb4565b8015611c6b5780601f10611c4257610100808354040283529160200191611c6b565b820191905f5260205f20905b815481529060010190602001808311611c4e57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f8051602061590e833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611d0c90869086906153f5565b90815260200160405180910390205491505092915050565b5f80611d2e61244f565b5f868152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611d6757611d67614b54565b6003811115611d7857611d78614b54565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611dee82611b7a565b9050600283516003811115611e0557611e05614b54565b14611e26578251604051633b0d540d60e21b81526104ed91906004016152ee565b60208301516001600160a01b03163314611ec2575f8281526006850160205260409020546001600160a01b03163314611e5f5733611495565b5f82815260068501602052604090205460a0820151611e8e91600160b01b90046001600160401b031690615404565b6001600160401b0316421015611ec25760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104ed565b600281516005811115611ed757611ed7614b54565b036120055760028401546080840151611ef9916001600160401b031690615404565b6001600160401b0316421015611f2d5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104ed565b8615611f3f57611f3d82876121b0565b505b5f8881526007850160205260409020805460ff1916600317905560608301516080820151611f78918491611f739190615424565b613036565b505f898152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155611fb98461320d565b5f8a81526008870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a31515945061206a9350505050565b60048151600581111561201a5761201a614b54565b0361204e576120288361320d565b5f89815260088601602052604090205561204188612c0b565b600194505050505061206a565b805160405163170cc93360e21b81526104ed9190600401614cec565b9392505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156120d5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120fc9190810190615444565b915091508061211e57604051636b2f19e960e01b815260040160405180910390fd5b815115612144578151604051636ba589a560e01b815260048101919091526024016104ed565b60208201516001600160a01b031615612180576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104ed565b5092915050565b5f8061219161244f565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156121fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122229190810190615444565b915091508061224457604051636b2f19e960e01b815260040160405180910390fd5b5f61224d61244f565b600581015484519192501461227b578251604051636ba589a560e01b815260048101919091526024016104ed565b60208301516001600160a01b0316156122b7576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016104ed565b60208301516001600160a01b0316156122f3576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016104ed565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016123309190614e26565b6040805180830381865af415801561234a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061236e91906154d4565b915091508188146123955760405163089938b360e11b8152600481018990526024016104ed565b5f8881526006840160205260409020600101546001600160401b039081169082161115612426575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612444565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061247d61244f565b90505f612489866133a4565b905061249486612187565b6124a35760019250505061206a565b5f8681526006830160205260409020546001600160a01b031633146124c85733611495565b5f86815260068301602052604090205460a08201516124f791600160b01b90046001600160401b031690615404565b6001600160401b03168160c001516001600160401b0316101561253e5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016104ed565b5f85156125565761254f87866121b0565b9050612574565b505f8681526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906125999061118f565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612602573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126269190614e38565b905080846009015f8a81526020019081526020015f205f82825461264a91906150cd565b90915550501515979650505050505050565b5f8051602061592e83398151915280546001190161268d57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f61269c6148e7565b5f8051602061590e8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6126cf88612071565b604001516040518263ffffffff1660e01b81526004016126ef9190614e26565b6040805180830381865af4158015612709573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061272d9190615348565b91509150801561275457604051632d07135360e01b815281151560048201526024016104ed565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561278557612785614b54565b600581111561279657612796614b54565b81526020016001820180546127aa90614cb4565b80601f01602080910402602001604051908101604052809291908181526020018280546127d690614cb4565b80156128215780601f106127f857610100808354040283529160200191612821565b820191905f5260205f20905b81548152906001019060200180831161280457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561288c5761288c614b54565b141580156128ad57506001815160058111156128aa576128aa614b54565b14155b156128ce57805160405163170cc93360e21b81526104ed9190600401614cec565b6003815160058111156128e3576128e3614b54565b036128f157600481526128f6565b600581525b83600801816020015160405161290c9190614fa9565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff1916600183600581111561295057612950614b54565b0217905550602082015160018201906129699082614ffe565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612a0f57612a0f614b54565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612a4f61244f565b5f8381526009820160205260408120805491905590915061077c8482613688565b5f805160206158ee83398151915254611424906001600160a01b031683836136fe565b60015f8051602061592e83398151915255565b5f80612ab061244f565b600281015490915061ffff600160401b90910481169086161080612ad9575061271061ffff8616115b15612afd57604051635f12e6c360e11b815261ffff861660048201526024016104ed565b60028101546001600160401b039081169085161015612b39576040516202a06d60e11b81526001600160401b03851660048201526024016104ed565b8054831080612b4b5750806001015483115b15612b6c5760405163222d164360e21b8152600481018490526024016104ed565b5f612b768461375d565b90505f612b8282610d86565b90505f612b8f8983613780565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f612c1461244f565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c4d57612c4d614b54565b6003811115612c5e57612c5e614b54565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612cfb7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612d0a9190615404565b6001600160401b0316421015612d3e5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104ed565b5f8481526007840160209081526040822080546001600160a81b0319168155600181018390556002018290558301519080612d7a838886613ca5565b91509150612d938560200151610e6a876060015161118f565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80612de361244f565b90505f612df261028f8561375d565b90505f612dfe87611b7a565b9050612e0987612187565b612e29576040516330efa98b60e01b8152600481018890526024016104ed565b600281516005811115612e3e57612e3e614b54565b14612e5f57805160405163170cc93360e21b81526104ed9190600401614cec565b5f828260800151612e709190615404565b905083600201600a9054906101000a90046001600160401b03168260400151612e9991906154f7565b6001600160401b0316816001600160401b03161115612ed657604051636d51fe0560e11b81526001600160401b03821660048201526024016104ed565b5f80612ee28a84613036565b915091505f8a83604051602001612f1092919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b613024613d52565b61302d82613d9d565b61142481613e17565b5f8281525f8051602061594e833981519152602052604081206002015481905f8051602061590e83398151915290600160801b90046001600160401b031661307e8582613e7f565b5f613088876140a2565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613131573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526131589190810190614df5565b6040518263ffffffff1660e01b81526004016131749190614e26565b6020604051808303815f875af1158015613190573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131b49190614e38565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061321761244f565b90505f6132278460400151611b7a565b90505f60038251600581111561323f5761323f614b54565b148061325d575060048251600581111561325b5761325b614b54565b145b1561326d575060c08101516132aa565b60028251600581111561328257613282614b54565b0361328e5750426132aa565b815160405163170cc93360e21b81526104ed9190600401614cec565b84608001516001600160401b0316816001600160401b0316116132d157505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906132f69061118f565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613377573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061339b9190614e38565b95945050505050565b6133ac6148e7565b5f8281525f8051602061594e8339815191526020526040808220815160e0810190925280545f8051602061590e83398151915293929190829060ff1660058111156133f9576133f9614b54565b600581111561340a5761340a614b54565b815260200160018201805461341e90614cb4565b80601f016020809104026020016040519081016040528092919081815260200182805461344a90614cb4565b80156134955780601f1061346c57610100808354040283529160200191613495565b820191905f5260205f20905b81548152906001019060200180831161347857829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561350357613503614b54565b14613536575f8481526007830160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614cec565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561357a5761357a614b54565b0217905550602082015160018201906135939082614ffe565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6136318582613036565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b5f5f805160206158ee83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b1580156136e3575f80fd5b505af11580156136f5573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b038381166024830152604482018390526104f691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614117565b5f610dd4825f805160206158ee833981519152546001600160a01b031690614178565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff166137c457604051637fab81e560e01b815260040160405180910390fd5b5f8051602061590e833981519152426137e36060860160408701614ac7565b6001600160401b031611158061381d57506138016202a300426150cd565b6138116060860160408701614ac7565b6001600160401b031610155b15613857576138326060850160408601614ac7565b604051635879da1360e11b81526001600160401b0390911660048201526024016104ed565b61386c6138676060860186615522565b614184565b61387c6138676080860186615522565b603061388b6020860186615536565b9050146138bd5761389f6020850185615536565b6040516326475b2f60e11b81526104ed925060040190815260200190565b6138c78480615536565b90505f036138f4576138d98480615536565b604051633e08a12560e11b81526004016104ed929190615578565b5f600882016139038680615536565b6040516139119291906153f5565b9081526020016040518091039020541461394a5761392f8480615536565b60405163a41f772f60e01b81526004016104ed929190615578565b613954835f613e7f565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce5190602081016139918a80615536565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020908101906139d9908b018b615536565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613a2260608b0160408c01614ac7565b6001600160401b03168152602001613a3d60608b018b615522565b613a469061558b565b8152602001613a5860808b018b615522565b613a619061558b565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613a8f91906156b8565b5f60405180830381865af4158015613aa9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613ad0919081019061576f565b5f82815260068601602052604090209193509150613aee8282614ffe565b508160088401613afe8880615536565b604051613b0c9291906153f5565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613b48908590600401614e26565b6020604051808303815f875af1158015613b64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613b889190614e38565b5f8481526007860160205260409020805460ff191660011790559050613bae8780615536565b5f858152600787016020526040902060010191613bcc9190836157b2565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613c2b8880615536565b604051613c399291906153f5565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613c779190614ac7565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f613cb061244f565b5f86815260088201602052604081208054908290559192509081908015613d44575f87815260068501602052604090205461271090613cfa90600160a01b900461ffff1683615102565b613d0491906152cf565b915081846009015f8981526020019081526020015f205f828254613d2891906150cd565b90915550613d389050828261586b565b9250613d448984613688565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613d9b57604051631afcd79f60e31b815260040160405180910390fd5b565b613da5613d52565b613dae816142ed565b613db6614306565b610e8a60608201356080830135613dd360c0850160a08601614ac7565b613de360e0860160c0870161587e565b613df4610100870160e08801615897565b610100870135613e0c61014089016101208a01614e4f565b886101400135614316565b613e1f613d52565b5f805160206158ee8339815191526001600160a01b038216613e5f57604051637330680360e01b81526001600160a01b03831660048201526024016104ed565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f8051602061590e8339815191525f6001600160401b038084169085161115613eb357613eac8385615424565b9050613ec0565b613ebd8484615424565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580613f22575060018401548151613f1e916001600160401b0316906150cd565b8210155b15613f48576001600160401b038316606082015281815260408101516020820152613f67565b8281606001818151613f5a9190615404565b6001600160401b03169052505b6060810151613f779060646154f7565b602082015160018601546001600160401b039290921691613fa29190600160401b900460ff16615102565b1015613fd257606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016104ed565b856001600160401b031681604001818151613fed91906150cd565b9052506040810180516001600160401b038716919061400d90839061586b565b9052506001840154604082015160649161403291600160401b90910460ff1690615102565b1015614059578060400151604051635943317f60e01b81526004016104ed91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f8051602061594e8339815191526020526040812060020180545f8051602061590e83398151915291906008906140ec90600160401b90046001600160401b03166158b7565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61412b6001600160a01b038416836144fb565b905080515f1415801561414f57508080602001905181019061414d91906158d2565b155b156104f657604051635274afe760e01b81526001600160a01b03841660048201526024016104ed565b5f61206a833384614508565b6141916020820182614a22565b63ffffffff161580156141b157506141ac6020820182614e6a565b151590505b156141f8576141c36020820182614a22565b6141d06020830183614e6a565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016104ed565b6142056020820182614e6a565b90506142146020830183614a22565b63ffffffff16111561422d576141c36020820182614a22565b60015b61423d6020830183614e6a565b9050811015611424576142536020830183614e6a565b61425e60018461586b565b81811061426d5761426d614eaf565b90506020020160208101906142829190614e4f565b6001600160a01b03166142986020840184614e6a565b838181106142a8576142a8614eaf565b90506020020160208101906142bd9190614e4f565b6001600160a01b031610156142e557604051630dbc8d5f60e31b815260040160405180910390fd5b600101614230565b6142f5613d52565b6142fd61466b565b610e8a81614673565b61430e613d52565b613d9b61475b565b61431e613d52565b5f61432761244f565b905061ffff8616158061433f575061271061ffff8716115b1561436357604051635f12e6c360e11b815261ffff871660048201526024016104ed565b878911156143875760405163222d164360e21b8152600481018a90526024016104ed565b60ff8516158061439a5750600a60ff8616115b156143bd5760405163170db35960e31b815260ff861660048201526024016104ed565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614424576040516202a06d60e11b81526001600160401b03881660048201526024016104ed565b835f036144445760405163a733007160e01b815260040160405180910390fd5b8161446557604051632f6bd1db60e01b8152600481018390526024016104ed565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b606061206a83835f614763565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa15801561454e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145729190614e38565b90506145896001600160a01b0386168530866147f2565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156145cd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145f19190614e38565b90508181116146575760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104ed565b614661828261586b565b9695505050505050565b613d9b613d52565b61467b613d52565b80355f8051602061590e83398151915290815560146146a06060840160408501615897565b60ff1611806146bf57506146ba6060830160408401615897565b60ff16155b156146f3576146d46060830160408401615897565b604051634a59bbff60e11b815260ff90911660048201526024016104ed565b6147036060830160408401615897565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556147346040830160208401614ac7565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612a93613d52565b6060814710156147885760405163cd78605960e01b81523060048201526024016104ed565b5f80856001600160a01b031684866040516147a39190614fa9565b5f6040518083038185875af1925050503d805f81146147dd576040519150601f19603f3d011682016040523d82523d5f602084013e6147e2565b606091505b509150915061466186838361482b565b6040516001600160a01b03848116602483015283811660448301526064820183905261077c9186918216906323b872dd9060840161372b565b6060826148405761483b82614887565b61206a565b815115801561485757506001600160a01b0384163b155b1561488057604051639996b31560e01b81526001600160a01b03851660048201526024016104ed565b508061206a565b8051156148975780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5080546148bc90614cb4565b5f825580601f106148cb575050565b601f0160209004905f5260205f2090810190610e8a9190614924565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614938575f8155600101614925565b5090565b8015158114610e8a575f80fd5b803563ffffffff8116811461495c575f80fd5b919050565b5f805f60608486031215614973575f80fd5b8335925060208401356149858161493c565b915061499360408501614949565b90509250925092565b5f602082840312156149ac575f80fd5b5035919050565b5f80604083850312156149c4575f80fd5b82356001600160401b038111156149d9575f80fd5b8301608081860312156149ea575f80fd5b91506149f860208401614949565b90509250929050565b5f8060408385031215614a12575f80fd5b823591506149f860208401614949565b5f60208284031215614a32575f80fd5b61206a82614949565b803561ffff8116811461495c575f80fd5b6001600160401b0381168114610e8a575f80fd5b5f805f8060808587031215614a73575f80fd5b84356001600160401b03811115614a88575f80fd5b850160a08188031215614a99575f80fd5b9350614aa760208601614a3b565b92506040850135614ab781614a4c565b9396929550929360600135925050565b5f60208284031215614ad7575f80fd5b813561206a81614a4c565b5f8060408385031215614af3575f80fd5b50508035926020909101359150565b6001600160a01b0381168114610e8a575f80fd5b5f80828403610180811215614b29575f80fd5b61016080821215614b38575f80fd5b8493508301359050614b4981614b02565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b60068110614b7857614b78614b54565b9052565b5f5b83811015614b96578181015183820152602001614b7e565b50505f910152565b5f8151808452614bb5816020860160208601614b7c565b601f01601f19169290920160200192915050565b60208152614bdb602082018351614b68565b5f602083015160e06040840152614bf6610100840182614b9e565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614c5a575f80fd5b82356001600160401b0380821115614c70575f80fd5b818501915085601f830112614c83575f80fd5b813581811115614c91575f80fd5b866020828501011115614ca2575f80fd5b60209290920196919550909350505050565b600181811c90821680614cc857607f821691505b602082108103614ce657634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610dd48284614b68565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614d3057614d30614cfa565b60405290565b604080519081016001600160401b0381118282101715614d3057614d30614cfa565b604051601f8201601f191681016001600160401b0381118282101715614d8057614d80614cfa565b604052919050565b5f6001600160401b03821115614da057614da0614cfa565b50601f01601f191660200190565b5f82601f830112614dbd575f80fd5b8151614dd0614dcb82614d88565b614d58565b818152846020838601011115614de4575f80fd5b610eba826020830160208701614b7c565b5f60208284031215614e05575f80fd5b81516001600160401b03811115614e1a575f80fd5b610eba84828501614dae565b602081525f61206a6020830184614b9e565b5f60208284031215614e48575f80fd5b5051919050565b5f60208284031215614e5f575f80fd5b813561206a81614b02565b5f808335601e19843603018112614e7f575f80fd5b8301803591506001600160401b03821115614e98575f80fd5b6020019150600581901b3603821315613206575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614ed7575f80fd5b9190910192915050565b5f82601f830112614ef0575f80fd5b8135614efe614dcb82614d88565b818152846020838601011115614f12575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614f3e575f80fd5b614f46614d0e565b82356001600160401b0380821115614f5c575f80fd5b614f6836838701614ee1565b83526020850135915080821115614f7d575f80fd5b50614f8a36828601614ee1565b6020830152506040830135614f9e81614a4c565b604082015292915050565b5f8251614ed7818460208701614b7c565b601f8211156104f657805f5260205f20601f840160051c81016020851015614fdf5750805b601f840160051c820191505b81811015611a36575f8155600101614feb565b81516001600160401b0381111561501757615017614cfa565b61502b816150258454614cb4565b84614fba565b602080601f83116001811461505e575f84156150475750858301515b5f19600386901b1c1916600185901b178555610fe6565b5f85815260208120601f198616915b8281101561508c5788860151825594840194600190910190840161506d565b50858210156150a957878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610dd457610dd46150b9565b5f63ffffffff8083168181036150f8576150f86150b9565b6001019392505050565b8082028115828204841417610dd457610dd46150b9565b5f808335601e1984360301811261512e575f80fd5b83016020810192503590506001600160401b0381111561514c575f80fd5b803603821315613206575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561523757848303601f19018952813536889003605e190181126151be575f80fd5b870160606151cc8280615119565b8287526151dc838801828461515a565b925050506151ec86830183615119565b868303888801526151fe83828461515a565b92505050604080830135925061521383614a4c565b6001600160401b039290921694909101939093529783019790830190600101615199565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561526881614b02565b6001600160a01b031660608381019190915283013536849003601e1901811261528f575f80fd5b83016020810190356001600160401b038111156152aa575f80fd5b8060051b36038213156152bb575f80fd5b60808085015261339b60a085018284615182565b5f826152e957634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061530257615302614b54565b91905290565b5f805f6060848603121561531a575f80fd5b83519250602084015161532c81614a4c565b604085015190925061533d81614a4c565b809150509250925092565b5f8060408385031215615359575f80fd5b825191506020830151614b498161493c565b5f60208083525f845461537d81614cb4565b806020870152604060018084165f811461539e57600181146153ba576153e7565b60ff19851660408a0152604084151560051b8a010195506153e7565b895f5260205f205f5b858110156153de5781548b82018601529083019088016153c3565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b03818116838216019080821115612180576121806150b9565b6001600160401b03828116828216039080821115612180576121806150b9565b5f8060408385031215615455575f80fd5b82516001600160401b038082111561546b575f80fd5b908401906060828703121561547e575f80fd5b615486614d0e565b82518152602083015161549881614b02565b60208201526040830151828111156154ae575f80fd5b6154ba88828601614dae565b6040830152508094505050506020830151614b498161493c565b5f80604083850312156154e5575f80fd5b825191506020830151614b4981614a4c565b6001600160401b0381811683821602808216919082811461551a5761551a6150b9565b505092915050565b5f8235603e19833603018112614ed7575f80fd5b5f808335601e1984360301811261554b575f80fd5b8301803591506001600160401b03821115615564575f80fd5b602001915036819003821315613206575f80fd5b602081525f610eba60208301848661515a565b5f6040823603121561559b575f80fd5b6155a3614d36565b6155ac83614949565b81526020808401356001600160401b03808211156155c8575f80fd5b9085019036601f8301126155da575f80fd5b8135818111156155ec576155ec614cfa565b8060051b91506155fd848301614d58565b8181529183018401918481019036841115615616575f80fd5b938501935b83851015615640578435925061563083614b02565b828252938501939085019061561b565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156156ad5784516001600160a01b03168252938301936001929092019190830190615684565b509695505050505050565b60208152815160208201525f602083015160e060408401526156de610100840182614b9e565b90506040840151601f19808584030160608601526156fc8383614b9e565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261572c8383615652565b925060a08601519150808584030160c08601525061574a8282615652565b91505060c084015161576760e08501826001600160401b03169052565b509392505050565b5f8060408385031215615780575f80fd5b8251915060208301516001600160401b0381111561579c575f80fd5b6157a885828601614dae565b9150509250929050565b6001600160401b038311156157c9576157c9614cfa565b6157dd836157d78354614cb4565b83614fba565b5f601f84116001811461580e575f85156157f75750838201355b5f19600387901b1c1916600186901b178355611a36565b5f83815260208120601f198716915b8281101561583d578685013582556020948501946001909201910161581d565b5086821015615859575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610dd457610dd46150b9565b5f6020828403121561588e575f80fd5b61206a82614a3b565b5f602082840312156158a7575f80fd5b813560ff8116811461206a575f80fd5b5f6001600160401b038083168181036150f8576150f86150b9565b5f602082840312156158e2575f80fd5b815161206a8161493c56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a26469706673582212202acf7d38d59a865804d4e9616ca6265687defde3978e6bf011124fb3684f4f6b64736f6c63430008190033", + 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\":\"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\":[{\"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\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"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\":\"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\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"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\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"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\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"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\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"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\":\"DelegatorAdded\",\"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\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"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\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndValidation\",\"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\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"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\":\"structPoSValidatorManagerSettings\",\"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\":\"initializeDelegatorRegistration\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndValidation\",\"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\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"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\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"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\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"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: "0x608060405234801561000f575f80fd5b50604051615d28380380615d2883398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615bdb8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610229575f3560e01c80637d8d2f771161012a578063afb98096116100b4578063c974d1b611610079578063c974d1b6146104e5578063d5f20ff6146104ed578063df93d8de1461050d578063e4a63c4014610517578063fd7ac5e71461052b575f80fd5b8063afb980961461045e578063b771b3bc14610485578063ba3a4b97146104ab578063bc5fbfec146104be578063bee0a03f146104d2575f80fd5b80639ae06447116100fa5780639ae06447146104125780639e1bc4ef146104255780639e478eea14610438578063a3a65e481461044b578063a9778a7a146102d8575f80fd5b80637d8d2f77146103d157806380dd672f146103e45780638280a25a146103f757806393e24598146103ff575f80fd5b80633a1cfff6116101b657806360ad77841161017b57806360ad77841461037e578063620658561461039157806366435abf146103a4578063732214f8146103b757806376f78621146103be575f80fd5b80633a1cfff614610307578063467ef06f1461031a5780634bee00401461032d5780635dd6a6cb1461034e57806360305d6214610361575f80fd5b806320d91b7a116101fc57806320d91b7a1461028757806325e1c7761461029a5780632e2194d8146102ad57806335455ded146102d857806337b9be8f146102f4575f80fd5b80630118acc41461022d5780630322ed9814610242578063151d30d1146102555780631ec4472414610274575b5f80fd5b61024061023b366004614b4b565b61053e565b005b610240610250366004614b86565b61054f565b61025d600a81565b60405160ff90911681526020015b60405180910390f35b610240610282366004614b4b565b6107df565b610240610295366004614b9d565b6107eb565b6102406102a8366004614beb565b610d70565b6102c06102bb366004614b86565b610de4565b6040516001600160401b03909116815260200161026b565b6102e161271081565b60405161ffff909116815260200161026b565b610240610302366004614c20565b610e38565b610240610315366004614b4b565b610e4b565b610240610328366004614c6e565b610e57565b61034061033b366004614cac565b610f3c565b60405190815260200161026b565b61024061035c366004614c20565b610f71565b610369601481565b60405163ffffffff909116815260200161026b565b61024061038c366004614beb565b610f7d565b61034061039f366004614d13565b61124a565b6102c06103b2366004614b86565b61126a565b6103405f81565b6102406103cc366004614b4b565b61127e565b6102406103df366004614c20565b61128a565b6102406103f2366004614beb565b611296565b61025d603081565b61024061040d366004614b86565b6114d0565b610240610420366004614c20565b611585565b610340610433366004614d2e565b611591565b610240610446366004614d4e565b6115bd565b610240610459366004614c6e565b61169c565b6103407f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104936005600160991b0181565b6040516001600160a01b03909116815260200161026b565b6102406104b9366004614b86565b611891565b6103405f80516020615b4683398151915281565b6102406104e0366004614b86565b611aea565b61025d601481565b6105006104fb366004614b86565b611c27565b60405161026b9190614e01565b6102c06202a30081565b6103405f80516020615b2683398151915281565b610340610539366004614e81565b611d76565b61054a8383835f611dd1565b505050565b5f8181525f80516020615b868339815191526020526040808220815160e0810190925280545f80516020615b4683398151915293929190829060ff16600581111561059c5761059c614d8c565b60058111156105ad576105ad614d8c565b81526020016001820180546105c190614eec565b80601f01602080910402602001604051908101604052809291908181526020018280546105ed90614eec565b80156106385780601f1061060f57610100808354040283529160200191610638565b820191905f5260205f20905b81548152906001019060200180831161061b57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156106a3576106a3614d8c565b146106df575f8381526007830160205260409081902054905163170cc93360e21b81526106d69160ff1690600401614f24565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610756573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261077d919081019061502d565b6040518263ffffffff1660e01b8152600401610799919061505e565b6020604051808303815f875af11580156107b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d99190615070565b50505050565b6107d98383835f611dfd565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615b468339815191529060ff161561083d57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610880573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108a49190615070565b8360200135146108cd576040516372b0a7e760e11b8152602084013560048201526024016106d6565b306108de6060850160408601615087565b6001600160a01b031614610921576108fc6060840160408501615087565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016106d6565b5f61092f60608501856150a2565b905090505f805b828163ffffffff161015610b96575f61095260608801886150a2565b8363ffffffff16818110610968576109686150e7565b905060200281019061097a91906150fb565b61098390615166565b80516040519192505f91600888019161099b916151e1565b908152602001604051809103902054146109cb57805160405163a41f772f60e01b81526106d6919060040161505e565b5f6002885f0135846040516020016109fa92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a14916151e1565b602060405180830381855afa158015610a2f573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a529190615070565b90508086600801835f0151604051610a6a91906151e1565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610aaa9082615236565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610b299085615305565b8251604051919550610b3a916151e1565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610b8f90615318565b9050610936565b50600483018190556001830154606490610bba90600160401b900460ff168361533a565b1015610bdc57604051635943317f60e01b8152600481018290526024016106d6565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c00876121b5565b604001516040518263ffffffff1660e01b8152600401610c20919061505e565b602060405180830381865af4158015610c3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c5f9190615070565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610c99919061547c565b5f60405180830381865af4158015610cb3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610cda919081019061502d565b90505f600282604051610ced91906151e1565b602060405180830381855afa158015610d08573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d2b9190615070565b9050828114610d575760405163baaea89d60e01b815260048101829052602481018490526044016106d6565b5050506009909201805460ff1916600117905550505050565b610d79826122cb565b610d99576040516330efa98b60e01b8152600481018390526024016106d6565b5f610da383611c27565b5190506002816005811115610dba57610dba614d8c565b14610dda578060405163170cc93360e21b81526004016106d69190614f24565b6107d983836122f4565b5f80610dee612593565b60030154610dfc9084615507565b9050801580610e1157506001600160401b0381115b15610e325760405163222d164360e21b8152600481018490526024016106d6565b92915050565b610e4484848484611dfd565b5050505050565b6107d98383835f6125b7565b610e5f6127d9565b5f610e68612593565b90505f80610e7584612810565b91509150610e82826122cb565b610e8e57505050610f23565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b03918216911680610ec5575080610ee3565b5f848152600b86016020526040902080546001600160a01b03191690555b600483516005811115610ef857610ef8614d8c565b03610f0757610f078185612bc3565b610f1d82610f18856040015161124a565b612bed565b50505050505b610f3960015f80516020615b6683398151915255565b50565b5f610f456127d9565b610f5185858585612c23565b9050610f6960015f80516020615b6683398151915255565b949350505050565b6107d984848484612d88565b5f610f86612593565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610fbf57610fbf614d8c565b6003811115610fd057610fd0614d8c565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61104682611c27565b905060018351600381111561105d5761105d614d8c565b1461107e578251604051633b0d540d60e21b81526106d69190600401615526565b60048151600581111561109357611093614d8c565b036110a9576110a186612db4565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f6110ce896121b5565b604001516040518263ffffffff1660e01b81526004016110ee919061505e565b606060405180830381865af4158015611109573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061112d9190615540565b509150915081841461115a57846040015160405163089938b360e11b81526004016106d691815260200190565b806001600160401b031683606001516001600160401b031610806111935750806001600160401b03168560a001516001600160401b0316115b156111bc57604051632e19bc2d60e11b81526001600160401b03821660048201526024016106d6565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f611253612593565b60030154610e32906001600160401b03841661533a565b5f61127482611c27565b6080015192915050565b61054a8383835f612d88565b610e44848484846125b7565b61129e6127d9565b5f6112a7612593565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156112e0576112e0614d8c565b60038111156112f1576112f1614d8c565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561136a5761136a614d8c565b1461138b578051604051633b0d540d60e21b81526106d69190600401615526565b600461139a8260400151611c27565b5160058111156113ac576113ac614d8c565b146114ab575f6113bb846121b5565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016113fa919061505e565b606060405180830381865af4158015611415573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114399190615540565b5091509150818460400151146114655760405163089938b360e11b8152600481018390526024016106d6565b806001600160401b03168460c001516001600160401b031611156114a757604051632e19bc2d60e11b81526001600160401b03821660048201526024016106d6565b5050505b6114b484612db4565b50506114cc60015f80516020615b6683398151915255565b5050565b5f6114d9612593565b90505f6114e583611c27565b51905060048160058111156114fc576114fc614d8c565b1461151c578060405163170cc93360e21b81526004016106d69190614f24565b5f8381526006830160205260409020546001600160a01b0316331461156257335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016106d6565b5f83815260068301602052604090205461054a906001600160a01b031684612bc3565b6107d984848484611dd1565b5f61159a6127d9565b6115a5833384612fc1565b9050610e3260015f80516020615b6683398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611606575080546001600160401b03808416911610155b156116245760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561164f8484613206565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615b468339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116cf866121b5565b604001516040518263ffffffff1660e01b81526004016116ef919061505e565b6040805180830381865af4158015611709573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061172d9190615580565b915091508061175357604051632d07135360e01b815281151560048201526024016106d6565b5f8281526006840160205260409020805461176d90614eec565b90505f036117915760405163089938b360e11b8152600481018390526024016106d6565b60015f83815260078501602052604090205460ff1660058111156117b7576117b7614d8c565b146117ea575f8281526007840160205260409081902054905163170cc93360e21b81526106d69160ff1690600401614f24565b5f828152600684016020526040812061180291614a9a565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f61189a612593565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156118d3576118d3614d8c565b60038111156118e4576118e4614d8c565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529091508151600381111561195d5761195d614d8c565b1415801561197e575060038151600381111561197b5761197b614d8c565b14155b1561199f578051604051633b0d540d60e21b81526106d69190600401615526565b5f6119ad8260400151611c27565b905080606001516001600160401b03165f036119df576040516339b894f960e21b8152600481018590526024016106d6565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611a4d93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611a67573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a8e919081019061502d565b6040518263ffffffff1660e01b8152600401611aaa919061505e565b6020604051808303815f875af1158015611ac6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e449190615070565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615b468339815191529190611b3190614eec565b90505f03611b555760405163089938b360e11b8152600481018390526024016106d6565b60015f83815260078301602052604090205460ff166005811115611b7b57611b7b614d8c565b14611bae575f8281526007820160205260409081902054905163170cc93360e21b81526106d69160ff1690600401614f24565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611be791906004016155a3565b6020604051808303815f875af1158015611c03573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061054a9190615070565b611c2f614ad1565b5f8281525f80516020615b86833981519152602052604090819020815160e0810190925280545f80516020615b46833981519152929190829060ff166005811115611c7c57611c7c614d8c565b6005811115611c8d57611c8d614d8c565b8152602001600182018054611ca190614eec565b80601f0160208091040260200160405190810160405280929190818152602001828054611ccd90614eec565b8015611d185780601f10611cef57610100808354040283529160200191611d18565b820191905f5260205f20905b815481529060010190602001808311611cfb57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f80516020615b46833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611db9908690869061562d565b90815260200160405180910390205491505092915050565b611ddd84848484611dfd565b6107d957604051631036cf9160e11b8152600481018590526024016106d6565b5f80611e07612593565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611e4057611e40614d8c565b6003811115611e5157611e51614d8c565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611ec782611c27565b9050600283516003811115611ede57611ede614d8c565b14611eff578251604051633b0d540d60e21b81526106d69190600401615526565b60208301516001600160a01b03163314611f9b575f8281526006850160205260409020546001600160a01b03163314611f38573361153d565b5f82815260068501602052604090205460a0820151611f6791600160b01b90046001600160401b03169061563c565b6001600160401b0316421015611f9b5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016106d6565b600281516005811115611fb057611fb0614d8c565b036121185760028401546080840151611fd2916001600160401b03169061563c565b6001600160401b03164210156120065760405163fb6ce63f60e01b81526001600160401b03421660048201526024016106d6565b87156120185761201682886122f4565b505b5f8981526007850160205260409020805460ff191660031790556060830151608082015161205191849161204c919061565c565b613220565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155612092846133f7565b5f8b8152600887016020526040902081905590506001600160a01b038716156120de575f8a8152600986016020526040902080546001600160a01b0319166001600160a01b0389161790555b60405183908b907f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57905f90a315159450610f699350505050565b60048151600581111561212d5761212d614d8c565b036121995761213b836133f7565b5f8a81526008860160205260409020556001600160a01b03861615612183575f898152600985016020526040902080546001600160a01b0319166001600160a01b0388161790555b61218c89612db4565b6001945050505050610f69565b805160405163170cc93360e21b81526106d69190600401614f24565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612219573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612240919081019061567c565b915091508061226257604051636b2f19e960e01b815260040160405180910390fd5b815115612288578151604051636ba589a560e01b815260048101919091526024016106d6565b60208201516001600160a01b0316156122c4576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016106d6565b5092915050565b5f806122d5612593565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa15801561233f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612366919081019061567c565b915091508061238857604051636b2f19e960e01b815260040160405180910390fd5b5f612391612593565b60058101548451919250146123bf578251604051636ba589a560e01b815260048101919091526024016106d6565b60208301516001600160a01b0316156123fb576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016106d6565b60208301516001600160a01b031615612437576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016106d6565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401612474919061505e565b6040805180830381865af415801561248e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124b2919061570c565b915091508188146124d95760405163089938b360e11b8152600481018990526024016106d6565b5f8881526006840160205260409020600101546001600160401b03908116908216111561256a575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612588565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806125c1612593565b90505f6125cd8761358e565b90506125d8876122cb565b6125e757600192505050610f69565b5f8781526006830160205260409020546001600160a01b0316331461260c573361153d565b5f87815260068301602052604090205460a082015161263b91600160b01b90046001600160401b03169061563c565b6001600160401b03168160c001516001600160401b031610156126825760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016106d6565b5f861561269a5761269388876122f4565b90506126b8565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906126dd9061124a565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612746573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276a9190615070565b90508084600a015f8b81526020019081526020015f205f82825461278e9190615305565b90915550506001600160a01b038616156127cb575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615b6683398151915280546001190161280a57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612819614ad1565b5f80516020615b468339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61284c886121b5565b604001516040518263ffffffff1660e01b815260040161286c919061505e565b6040805180830381865af4158015612886573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128aa9190615580565b9150915080156128d157604051632d07135360e01b815281151560048201526024016106d6565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561290257612902614d8c565b600581111561291357612913614d8c565b815260200160018201805461292790614eec565b80601f016020809104026020016040519081016040528092919081815260200182805461295390614eec565b801561299e5780601f106129755761010080835404028352916020019161299e565b820191905f5260205f20905b81548152906001019060200180831161298157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612a0957612a09614d8c565b14158015612a2a5750600181516005811115612a2757612a27614d8c565b14155b15612a4b57805160405163170cc93360e21b81526106d69190600401614f24565b600381516005811115612a6057612a60614d8c565b03612a6e5760048152612a73565b600581525b836008018160200151604051612a8991906151e1565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612acd57612acd614d8c565b021790555060208201516001820190612ae69082615236565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612b8c57612b8c614d8c565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612bcc612593565b5f838152600a82016020526040812080549190559091506107d98482613872565b5f80516020615b26833981519152546114cc906001600160a01b031683836138e8565b60015f80516020615b6683398151915255565b5f80612c2d612593565b600281015490915061ffff600160401b90910481169086161080612c56575061271061ffff8616115b15612c7a57604051635f12e6c360e11b815261ffff861660048201526024016106d6565b60028101546001600160401b039081169085161015612cb6576040516202a06d60e11b81526001600160401b03851660048201526024016106d6565b8054831080612cc85750806001015483115b15612ce95760405163222d164360e21b8152600481018490526024016106d6565b5f612cf384613947565b90505f612cff82610de4565b90505f612d0c898361396a565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b612d94848484846125b7565b6107d957604051635bff683f60e11b8152600481018590526024016106d6565b5f612dbd612593565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612df657612df6614d8c565b6003811115612e0757612e07614d8c565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612ea47fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612eb3919061563c565b6001600160401b0316421015612ee75760405163fb6ce63f60e01b81526001600160401b03421660048201526024016106d6565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b031680612f3757506020820151612f55565b5f858152600985016020526040902080546001600160a01b03191690555b5f80612f62838886613e8f565b91509150612f7b8560200151610f18876060015161124a565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80612fcb612593565b90505f612fda6102bb85613947565b90505f612fe687611c27565b9050612ff1876122cb565b613011576040516330efa98b60e01b8152600481018890526024016106d6565b60028151600581111561302657613026614d8c565b1461304757805160405163170cc93360e21b81526106d69190600401614f24565b5f828260800151613058919061563c565b905083600201600a9054906101000a90046001600160401b03168260400151613081919061572f565b6001600160401b0316816001600160401b031611156130be57604051636d51fe0560e11b81526001600160401b03821660048201526024016106d6565b5f806130ca8a84613220565b915091505f8a836040516020016130f892919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b61320e613f3c565b61321782613f87565b6114cc81614001565b5f8281525f80516020615b86833981519152602052604081206002015481905f80516020615b4683398151915290600160801b90046001600160401b03166132688582614069565b5f6132728761428c565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561331b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613342919081019061502d565b6040518263ffffffff1660e01b815260040161335e919061505e565b6020604051808303815f875af115801561337a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061339e9190615070565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f80613401612593565b90505f6134118460400151611c27565b90505f60038251600581111561342957613429614d8c565b1480613447575060048251600581111561344557613445614d8c565b145b15613457575060c0810151613494565b60028251600581111561346c5761346c614d8c565b03613478575042613494565b815160405163170cc93360e21b81526106d69190600401614f24565b84608001516001600160401b0316816001600160401b0316116134bb57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906134e09061124a565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613561573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135859190615070565b95945050505050565b613596614ad1565b5f8281525f80516020615b868339815191526020526040808220815160e0810190925280545f80516020615b4683398151915293929190829060ff1660058111156135e3576135e3614d8c565b60058111156135f4576135f4614d8c565b815260200160018201805461360890614eec565b80601f016020809104026020016040519081016040528092919081815260200182805461363490614eec565b801561367f5780601f106136565761010080835404028352916020019161367f565b820191905f5260205f20905b81548152906001019060200180831161366257829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156136ed576136ed614d8c565b14613720575f8481526007830160205260409081902054905163170cc93360e21b81526106d69160ff1690600401614f24565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561376457613764614d8c565b02179055506020820151600182019061377d9082615236565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f61381b8582613220565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b5f5f80516020615b2683398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b1580156138cd575f80fd5b505af11580156138df573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261054a91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614301565b5f610e32825f80516020615b26833981519152546001600160a01b031690614362565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff166139ae57604051637fab81e560e01b815260040160405180910390fd5b5f80516020615b46833981519152426139cd6060860160408701614d13565b6001600160401b0316111580613a0757506139eb6202a30042615305565b6139fb6060860160408701614d13565b6001600160401b031610155b15613a4157613a1c6060850160408601614d13565b604051635879da1360e11b81526001600160401b0390911660048201526024016106d6565b613a56613a51606086018661575a565b61436e565b613a66613a51608086018661575a565b6030613a75602086018661576e565b905014613aa757613a89602085018561576e565b6040516326475b2f60e11b81526106d6925060040190815260200190565b613ab1848061576e565b90505f03613ade57613ac3848061576e565b604051633e08a12560e11b81526004016106d69291906157b0565b5f60088201613aed868061576e565b604051613afb92919061562d565b90815260200160405180910390205414613b3457613b19848061576e565b60405163a41f772f60e01b81526004016106d69291906157b0565b613b3e835f614069565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613b7b8a8061576e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613bc3908b018b61576e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613c0c60608b0160408c01614d13565b6001600160401b03168152602001613c2760608b018b61575a565b613c30906157c3565b8152602001613c4260808b018b61575a565b613c4b906157c3565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613c7991906158f0565b5f60405180830381865af4158015613c93573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613cba91908101906159a7565b5f82815260068601602052604090209193509150613cd88282615236565b508160088401613ce8888061576e565b604051613cf692919061562d565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613d3290859060040161505e565b6020604051808303815f875af1158015613d4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d729190615070565b5f8481526007860160205260409020805460ff191660011790559050613d98878061576e565b5f858152600787016020526040902060010191613db69190836159ea565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613e15888061576e565b604051613e2392919061562d565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613e619190614d13565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f613e9a612593565b5f86815260088201602052604081208054908290559192509081908015613f2e575f87815260068501602052604090205461271090613ee490600160a01b900461ffff168361533a565b613eee9190615507565b91508184600a015f8981526020019081526020015f205f828254613f129190615305565b90915550613f2290508282615aa3565b9250613f2e8984613872565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613f8557604051631afcd79f60e31b815260040160405180910390fd5b565b613f8f613f3c565b613f98816144d7565b613fa06144f0565b610f3960608201356080830135613fbd60c0850160a08601614d13565b613fcd60e0860160c08701615ab6565b613fde610100870160e08801615acf565b610100870135613ff661014089016101208a01615087565b886101400135614500565b614009613f3c565b5f80516020615b268339815191526001600160a01b03821661404957604051637330680360e01b81526001600160a01b03831660048201526024016106d6565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615b468339815191525f6001600160401b03808416908516111561409d57614096838561565c565b90506140aa565b6140a7848461565c565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061410c575060018401548151614108916001600160401b031690615305565b8210155b15614132576001600160401b038316606082015281815260408101516020820152614151565b8281606001818151614144919061563c565b6001600160401b03169052505b606081015161416190606461572f565b602082015160018601546001600160401b03929092169161418c9190600160401b900460ff1661533a565b10156141bc57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016106d6565b856001600160401b0316816040018181516141d79190615305565b9052506040810180516001600160401b03871691906141f7908390615aa3565b9052506001840154604082015160649161421c91600160401b90910460ff169061533a565b1015614243578060400151604051635943317f60e01b81526004016106d691815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615b868339815191526020526040812060020180545f80516020615b4683398151915291906008906142d690600160401b90046001600160401b0316615aef565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6143156001600160a01b038416836146e5565b905080515f141580156143395750808060200190518101906143379190615b0a565b155b1561054a57604051635274afe760e01b81526001600160a01b03841660048201526024016106d6565b5f6131ff8333846146f2565b61437b6020820182614c6e565b63ffffffff1615801561439b575061439660208201826150a2565b151590505b156143e2576143ad6020820182614c6e565b6143ba60208301836150a2565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016106d6565b6143ef60208201826150a2565b90506143fe6020830183614c6e565b63ffffffff161115614417576143ad6020820182614c6e565b60015b61442760208301836150a2565b90508110156114cc5761443d60208301836150a2565b614448600184615aa3565b818110614457576144576150e7565b905060200201602081019061446c9190615087565b6001600160a01b031661448260208401846150a2565b83818110614492576144926150e7565b90506020020160208101906144a79190615087565b6001600160a01b031610156144cf57604051630dbc8d5f60e31b815260040160405180910390fd5b60010161441a565b6144df613f3c565b6144e7614855565b610f398161485d565b6144f8613f3c565b613f85614945565b614508613f3c565b5f614511612593565b905061ffff86161580614529575061271061ffff8716115b1561454d57604051635f12e6c360e11b815261ffff871660048201526024016106d6565b878911156145715760405163222d164360e21b8152600481018a90526024016106d6565b60ff851615806145845750600a60ff8616115b156145a75760405163170db35960e31b815260ff861660048201526024016106d6565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b0316101561460e576040516202a06d60e11b81526001600160401b03881660048201526024016106d6565b835f0361462e5760405163a733007160e01b815260040160405180910390fd5b8161464f57604051632f6bd1db60e01b8152600481018390526024016106d6565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b60606131ff83835f61494d565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614738573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061475c9190615070565b90506147736001600160a01b0386168530866149dc565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156147b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147db9190615070565b90508181116148415760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016106d6565b61484b8282615aa3565b9695505050505050565b613f85613f3c565b614865613f3c565b80355f80516020615b46833981519152908155601461488a6060840160408501615acf565b60ff1611806148a957506148a46060830160408401615acf565b60ff16155b156148dd576148be6060830160408401615acf565b604051634a59bbff60e11b815260ff90911660048201526024016106d6565b6148ed6060830160408401615acf565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561491e6040830160208401614d13565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c10613f3c565b6060814710156149725760405163cd78605960e01b81523060048201526024016106d6565b5f80856001600160a01b0316848660405161498d91906151e1565b5f6040518083038185875af1925050503d805f81146149c7576040519150601f19603f3d011682016040523d82523d5f602084013e6149cc565b606091505b509150915061484b868383614a15565b6040516001600160a01b0384811660248301528381166044830152606482018390526107d99186918216906323b872dd90608401613915565b606082614a2a57614a2582614a71565b6131ff565b8151158015614a4157506001600160a01b0384163b155b15614a6a57604051639996b31560e01b81526001600160a01b03851660048201526024016106d6565b50806131ff565b805115614a815780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614aa690614eec565b5f825580601f10614ab5575050565b601f0160209004905f5260205f2090810190610f399190614b0e565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614b22575f8155600101614b0f565b5090565b8015158114610f39575f80fd5b803563ffffffff81168114614b46575f80fd5b919050565b5f805f60608486031215614b5d575f80fd5b833592506020840135614b6f81614b26565b9150614b7d60408501614b33565b90509250925092565b5f60208284031215614b96575f80fd5b5035919050565b5f8060408385031215614bae575f80fd5b82356001600160401b03811115614bc3575f80fd5b830160808186031215614bd4575f80fd5b9150614be260208401614b33565b90509250929050565b5f8060408385031215614bfc575f80fd5b82359150614be260208401614b33565b6001600160a01b0381168114610f39575f80fd5b5f805f8060808587031215614c33575f80fd5b843593506020850135614c4581614b26565b9250614c5360408601614b33565b91506060850135614c6381614c0c565b939692955090935050565b5f60208284031215614c7e575f80fd5b6131ff82614b33565b803561ffff81168114614b46575f80fd5b6001600160401b0381168114610f39575f80fd5b5f805f8060808587031215614cbf575f80fd5b84356001600160401b03811115614cd4575f80fd5b850160a08188031215614ce5575f80fd5b9350614cf360208601614c87565b92506040850135614d0381614c98565b9396929550929360600135925050565b5f60208284031215614d23575f80fd5b81356131ff81614c98565b5f8060408385031215614d3f575f80fd5b50508035926020909101359150565b5f80828403610180811215614d61575f80fd5b61016080821215614d70575f80fd5b8493508301359050614d8181614c0c565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b60068110614db057614db0614d8c565b9052565b5f5b83811015614dce578181015183820152602001614db6565b50505f910152565b5f8151808452614ded816020860160208601614db4565b601f01601f19169290920160200192915050565b60208152614e13602082018351614da0565b5f602083015160e06040840152614e2e610100840182614dd6565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614e92575f80fd5b82356001600160401b0380821115614ea8575f80fd5b818501915085601f830112614ebb575f80fd5b813581811115614ec9575f80fd5b866020828501011115614eda575f80fd5b60209290920196919550909350505050565b600181811c90821680614f0057607f821691505b602082108103614f1e57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610e328284614da0565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614f6857614f68614f32565b60405290565b604080519081016001600160401b0381118282101715614f6857614f68614f32565b604051601f8201601f191681016001600160401b0381118282101715614fb857614fb8614f32565b604052919050565b5f6001600160401b03821115614fd857614fd8614f32565b50601f01601f191660200190565b5f82601f830112614ff5575f80fd5b815161500861500382614fc0565b614f90565b81815284602083860101111561501c575f80fd5b610f69826020830160208701614db4565b5f6020828403121561503d575f80fd5b81516001600160401b03811115615052575f80fd5b610f6984828501614fe6565b602081525f6131ff6020830184614dd6565b5f60208284031215615080575f80fd5b5051919050565b5f60208284031215615097575f80fd5b81356131ff81614c0c565b5f808335601e198436030181126150b7575f80fd5b8301803591506001600160401b038211156150d0575f80fd5b6020019150600581901b36038213156133f0575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261510f575f80fd5b9190910192915050565b5f82601f830112615128575f80fd5b813561513661500382614fc0565b81815284602083860101111561514a575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615176575f80fd5b61517e614f46565b82356001600160401b0380821115615194575f80fd5b6151a036838701615119565b835260208501359150808211156151b5575f80fd5b506151c236828601615119565b60208301525060408301356151d681614c98565b604082015292915050565b5f825161510f818460208701614db4565b601f82111561054a57805f5260205f20601f840160051c810160208510156152175750805b601f840160051c820191505b81811015610e44575f8155600101615223565b81516001600160401b0381111561524f5761524f614f32565b6152638161525d8454614eec565b846151f2565b602080601f831160018114615296575f841561527f5750858301515b5f19600386901b1c1916600185901b1785556110a1565b5f85815260208120601f198616915b828110156152c4578886015182559484019460019091019084016152a5565b50858210156152e157878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610e3257610e326152f1565b5f63ffffffff808316818103615330576153306152f1565b6001019392505050565b8082028115828204841417610e3257610e326152f1565b5f808335601e19843603018112615366575f80fd5b83016020810192503590506001600160401b03811115615384575f80fd5b8036038213156133f0575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561546f57848303601f19018952813536889003605e190181126153f6575f80fd5b870160606154048280615351565b8287526154148388018284615392565b9250505061542486830183615351565b86830388880152615436838284615392565b92505050604080830135925061544b83614c98565b6001600160401b0392909216949091019390935297830197908301906001016153d1565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356154a081614c0c565b6001600160a01b031660608381019190915283013536849003601e190181126154c7575f80fd5b83016020810190356001600160401b038111156154e2575f80fd5b8060051b36038213156154f3575f80fd5b60808085015261358560a0850182846153ba565b5f8261552157634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061553a5761553a614d8c565b91905290565b5f805f60608486031215615552575f80fd5b83519250602084015161556481614c98565b604085015190925061557581614c98565b809150509250925092565b5f8060408385031215615591575f80fd5b825191506020830151614d8181614b26565b5f60208083525f84546155b581614eec565b806020870152604060018084165f81146155d657600181146155f25761561f565b60ff19851660408a0152604084151560051b8a0101955061561f565b895f5260205f205f5b858110156156165781548b82018601529083019088016155fb565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156122c4576122c46152f1565b6001600160401b038281168282160390808211156122c4576122c46152f1565b5f806040838503121561568d575f80fd5b82516001600160401b03808211156156a3575f80fd5b90840190606082870312156156b6575f80fd5b6156be614f46565b8251815260208301516156d081614c0c565b60208201526040830151828111156156e6575f80fd5b6156f288828601614fe6565b6040830152508094505050506020830151614d8181614b26565b5f806040838503121561571d575f80fd5b825191506020830151614d8181614c98565b6001600160401b03818116838216028082169190828114615752576157526152f1565b505092915050565b5f8235603e1983360301811261510f575f80fd5b5f808335601e19843603018112615783575f80fd5b8301803591506001600160401b0382111561579c575f80fd5b6020019150368190038213156133f0575f80fd5b602081525f610f69602083018486615392565b5f604082360312156157d3575f80fd5b6157db614f6e565b6157e483614b33565b81526020808401356001600160401b0380821115615800575f80fd5b9085019036601f830112615812575f80fd5b81358181111561582457615824614f32565b8060051b9150615835848301614f90565b818152918301840191848101903684111561584e575f80fd5b938501935b83851015615878578435925061586883614c0c565b8282529385019390850190615853565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158e55784516001600160a01b031682529383019360019290920191908301906158bc565b509695505050505050565b60208152815160208201525f602083015160e06040840152615916610100840182614dd6565b90506040840151601f19808584030160608601526159348383614dd6565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615964838361588a565b925060a08601519150808584030160c086015250615982828261588a565b91505060c084015161599f60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159b8575f80fd5b8251915060208301516001600160401b038111156159d4575f80fd5b6159e085828601614fe6565b9150509250929050565b6001600160401b03831115615a0157615a01614f32565b615a1583615a0f8354614eec565b836151f2565b5f601f841160018114615a46575f8515615a2f5750838201355b5f19600387901b1c1916600186901b178355610e44565b5f83815260208120601f198716915b82811015615a755786850135825560209485019460019092019101615a55565b5086821015615a91575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610e3257610e326152f1565b5f60208284031215615ac6575f80fd5b6131ff82614c87565b5f60208284031215615adf575f80fd5b813560ff811681146131ff575f80fd5b5f6001600160401b03808316818103615330576153306152f1565b5f60208284031215615b1a575f80fd5b81516131ff81614b2656fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220bb56a731282f14905788e0a5232b808f45ad16b3c99f9692810c267bde48cab664736f6c63430008190033", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. @@ -930,6 +930,27 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Forc return _ERC20TokenStakingManager.Contract.ForceInitializeEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } +// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// +// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// +// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitializeEndDelegation0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// +// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitializeEndDelegation0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + // ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. // // Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() @@ -951,6 +972,27 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Forc return _ERC20TokenStakingManager.Contract.ForceInitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } +// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// +// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ForceInitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "forceInitializeEndValidation0", validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// +// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitializeEndValidation0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// +// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ForceInitializeEndValidation0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + // Initialize is a paid mutator transaction binding the contract method 0x9e478eea. // // Solidity: function initialize(((bytes32,uint64,uint8),uint256,uint256,uint64,uint16,uint8,uint256,address,bytes32) settings, address token) returns() @@ -1014,25 +1056,67 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) Init return _ERC20TokenStakingManager.Contract.InitializeEndDelegation(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x76f78621. +// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// +// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// +// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeEndDelegation0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// +// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeEndDelegation0(&_ERC20TokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// +// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndValidation", validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// +// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// +// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. // // Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndValidation", validationID, includeUptimeProof, messageIndex) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) InitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "initializeEndValidation0", validationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x76f78621. +// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. // // Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeEndValidation0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x76f78621. +// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. // // Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _ERC20TokenStakingManager.Contract.InitializeEndValidation(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.InitializeEndValidation0(&_ERC20TokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } // InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0x4bee0040. diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index d56ae5b89..e8eb426bf 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -103,8 +103,8 @@ type ValidatorRegistrationInput 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\":\"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\":[{\"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\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"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\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"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\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"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\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"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\":\"DelegatorAdded\",\"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\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"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\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"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_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"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\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"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\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"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\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"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: "0x608060405234801561000f575f80fd5b5060405161580238038061580283398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6156b58061014d5f395ff3fe6080604052600436106101f1575f3560e01c806376f7862111610108578063b771b3bc1161009d578063c599e24f1161006d578063c599e24f146105a0578063c974d1b6146105b3578063d5f20ff6146105c7578063df93d8de146105f3578063fd7ac5e714610609575f80fd5b8063b771b3bc14610528578063ba3a4b9714610542578063bc5fbfec14610561578063bee0a03f14610581575f80fd5b8063a3a65e48116100d8578063a3a65e48146104c3578063a9778a7a14610345578063af2f5feb146104e2578063afb98096146104f5575f80fd5b806376f786211461045257806380dd672f146104715780638280a25a1461049057806393e24598146104a4575f80fd5b8063329c3e121161018957806360305d621161015957806360305d62146103ab57806360ad7784146103d457806362065856146103f357806366435abf14610420578063732214f81461043f575f80fd5b8063329c3e121461031357806335455ded146103455780633a1cfff61461036d578063467ef06f1461038c575f80fd5b80631ec44724116101c45780631ec447241461027f57806320d91b7a1461029e57806325e1c776146102bd5780632e2194d8146102dc575f80fd5b80630118acc4146101f55780630322ed98146102165780630ba512d114610235578063151d30d114610254575b5f80fd5b348015610200575f80fd5b5061021461020f3660046146f9565b610628565b005b348015610221575f80fd5b50610214610230366004614734565b61065d565b348015610240575f80fd5b5061021461024f36600461474b565b6108e4565b34801561025f575f80fd5b50610268600a81565b60405160ff90911681526020015b60405180910390f35b34801561028a575f80fd5b506102146102993660046146f9565b6109c1565b3480156102a9575f80fd5b506102146102b8366004614762565b6109cc565b3480156102c8575f80fd5b506102146102d73660046147b0565b610f51565b3480156102e7575f80fd5b506102fb6102f6366004614734565b610fc5565b6040516001600160401b039091168152602001610276565b34801561031e575f80fd5b5061032d6001600160991b0181565b6040516001600160a01b039091168152602001610276565b348015610350575f80fd5b5061035a61271081565b60405161ffff9091168152602001610276565b348015610378575f80fd5b506102146103873660046146f9565b611019565b348015610397575f80fd5b506102146103a63660046147d1565b611024565b3480156103b6575f80fd5b506103bf601481565b60405163ffffffff9091168152602001610276565b3480156103df575f80fd5b506102146103ee3660046147b0565b6110cc565b3480156103fe575f80fd5b5061041261040d3660046147fe565b611399565b604051908152602001610276565b34801561042b575f80fd5b506102fb61043a366004614734565b6113b9565b34801561044a575f80fd5b506104125f81565b34801561045d575f80fd5b5061021461046c3660046146f9565b6113cd565b34801561047c575f80fd5b5061021461048b3660046147b0565b6113f8565b34801561049b575f80fd5b50610268603081565b3480156104af575f80fd5b506102146104be366004614734565b611632565b3480156104ce575f80fd5b506102146104dd3660046147d1565b6116e7565b6104126104f036600461482a565b6118dc565b348015610500575f80fd5b506104127f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610533575f80fd5b5061032d6005600160991b0181565b34801561054d575f80fd5b5061021461055c366004614734565b611910565b34801561056c575f80fd5b506104125f8051602061562083398151915281565b34801561058c575f80fd5b5061021461059b366004614734565b611b70565b6104126105ae366004614734565b611cad565b3480156105be575f80fd5b50610268601481565b3480156105d2575f80fd5b506105e66105e1366004614734565b611cde565b6040516102769190614900565b3480156105fe575f80fd5b506102fb6202a30081565b348015610614575f80fd5b50610412610623366004614980565b611e2d565b610633838383611e88565b61065857604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f805160206156608339815191526020526040808220815160e0810190925280545f8051602061562083398151915293929190829060ff1660058111156106aa576106aa61488b565b60058111156106bb576106bb61488b565b81526020016001820180546106cf906149eb565b80601f01602080910402602001604051908101604052809291908181526020018280546106fb906149eb565b80156107465780601f1061071d57610100808354040283529160200191610746565b820191905f5260205f20905b81548152906001019060200180831161072957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156107b1576107b161488b565b146107e4575f8381526007830160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614a1d565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561085b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108829190810190614b2e565b6040518263ffffffff1660e01b815260040161089e9190614b5f565b6020604051808303815f875af11580156108ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108de9190614b71565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff168061092d575080546001600160401b03808416911610155b1561094b5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610975836121ce565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6108de838383611e88565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f805160206156208339815191529060ff1615610a1e57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a61573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a859190614b71565b836020013514610aae576040516372b0a7e760e11b81526020840135600482015260240161064f565b30610abf6060850160408601614b9c565b6001600160a01b031614610b0257610add6060840160408501614b9c565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161064f565b5f610b106060850185614bb7565b905090505f805b828163ffffffff161015610d77575f610b336060880188614bb7565b8363ffffffff16818110610b4957610b49614bfc565b9050602002810190610b5b9190614c10565b610b6490614c7b565b80516040519192505f916008880191610b7c91614cf6565b90815260200160405180910390205414610bac57805160405163a41f772f60e01b815261064f9190600401614b5f565b5f6002885f013584604051602001610bdb92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610bf591614cf6565b602060405180830381855afa158015610c10573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610c339190614b71565b90508086600801835f0151604051610c4b9190614cf6565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610c8b9082614d4b565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610d0a9085614e1a565b8251604051919550610d1b91614cf6565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610d7090614e2d565b9050610b17565b50600483018190556001830154606490610d9b90600160401b900460ff1683614e4f565b1015610dbd57604051635943317f60e01b81526004810182905260240161064f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610de1876121df565b604001516040518263ffffffff1660e01b8152600401610e019190614b5f565b602060405180830381865af4158015610e1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e409190614b71565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610e7a9190614f91565b5f60405180830381865af4158015610e94573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610ebb9190810190614b2e565b90505f600282604051610ece9190614cf6565b602060405180830381855afa158015610ee9573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610f0c9190614b71565b9050828114610f385760405163baaea89d60e01b8152600481018290526024810184905260440161064f565b5050506009909201805460ff1916600117905550505050565b610f5a826122f5565b610f7a576040516330efa98b60e01b81526004810183905260240161064f565b5f610f8483611cde565b5190506002816005811115610f9b57610f9b61488b565b14610fbb578060405163170cc93360e21b815260040161064f9190614a1d565b6108de838361231e565b5f80610fcf6125bd565b60030154610fdd908461501c565b9050801580610ff257506001600160401b0381115b156110135760405163222d164360e21b81526004810184905260240161064f565b92915050565b6108de8383836125e1565b61102c6127ca565b5f6110356125bd565b90505f8061104284612801565b9150915061104f826122f5565b61105b575050506110b3565b5f8281526006840160205260409020546001600160a01b03166004825160058111156110895761108961488b565b03611098576110988184612bb4565b6110ae816110a98460400151611399565b612bde565b505050505b6110c960015f8051602061564083398151915255565b50565b5f6110d56125bd565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561110e5761110e61488b565b600381111561111f5761111f61488b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61119582611cde565b90506001835160038111156111ac576111ac61488b565b146111cd578251604051633b0d540d60e21b815261064f919060040161503b565b6004815160058111156111e2576111e261488b565b036111f8576111f086612c04565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61121d896121df565b604001516040518263ffffffff1660e01b815260040161123d9190614b5f565b606060405180830381865af4158015611258573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061127c9190615055565b50915091508184146112a957846040015160405163089938b360e11b815260040161064f91815260200190565b806001600160401b031683606001516001600160401b031610806112e25750806001600160401b03168560a001516001600160401b0316115b1561130b57604051632e19bc2d60e11b81526001600160401b038216600482015260240161064f565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6113a26125bd565b60030154611013906001600160401b038416614e4f565b5f6113c382611cde565b6080015192915050565b6113d88383836125e1565b61065857604051635bff683f60e11b81526004810184905260240161064f565b6114006127ca565b5f6114096125bd565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156114425761144261488b565b60038111156114535761145361488b565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156114cc576114cc61488b565b146114ed578051604051633b0d540d60e21b815261064f919060040161503b565b60046114fc8260400151611cde565b51600581111561150e5761150e61488b565b1461160d575f61151d846121df565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161155c9190614b5f565b606060405180830381865af4158015611577573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061159b9190615055565b5091509150818460400151146115c75760405163089938b360e11b81526004810183905260240161064f565b806001600160401b03168460c001516001600160401b0316111561160957604051632e19bc2d60e11b81526001600160401b038216600482015260240161064f565b5050505b61161684612c04565b505061162e60015f8051602061564083398151915255565b5050565b5f61163b6125bd565b90505f61164783611cde565b519050600481600581111561165e5761165e61488b565b1461167e578060405163170cc93360e21b815260040161064f9190614a1d565b5f8381526006830160205260409020546001600160a01b031633146116c457335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161064f565b5f838152600683016020526040902054610658906001600160a01b031684612bb4565b5f805160206156208339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61171a866121df565b604001516040518263ffffffff1660e01b815260040161173a9190614b5f565b6040805180830381865af4158015611754573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611778919061508a565b915091508061179e57604051632d07135360e01b8152811515600482015260240161064f565b5f828152600684016020526040902080546117b8906149eb565b90505f036117dc5760405163089938b360e11b81526004810183905260240161064f565b60015f83815260078501602052604090205460ff1660058111156118025761180261488b565b14611835575f8281526007840160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614a1d565b5f828152600684016020526040812061184d9161464d565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f6118e56127ca565b6118f184848434612dd2565b905061190960015f8051602061564083398151915255565b9392505050565b5f6119196125bd565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119525761195261488b565b60038111156119635761196361488b565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156119dc576119dc61488b565b141580156119fd57506003815160038111156119fa576119fa61488b565b14155b15611a1e578051604051633b0d540d60e21b815261064f919060040161503b565b5f611a2c8260400151611cde565b905080606001516001600160401b03165f03611a5e576040516339b894f960e21b81526004810185905260240161064f565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611acc93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611ae6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b0d9190810190614b2e565b6040518263ffffffff1660e01b8152600401611b299190614b5f565b6020604051808303815f875af1158015611b45573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b699190614b71565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f805160206156208339815191529190611bb7906149eb565b90505f03611bdb5760405163089938b360e11b81526004810183905260240161064f565b60015f83815260078301602052604090205460ff166005811115611c0157611c0161488b565b14611c34575f8281526007820160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614a1d565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611c6d91906004016150b8565b6020604051808303815f875af1158015611c89573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106589190614b71565b5f611cb66127ca565b611cc1823334612f2c565b9050611cd960015f8051602061564083398151915255565b919050565b611ce6614684565b5f8281525f80516020615660833981519152602052604090819020815160e0810190925280545f80516020615620833981519152929190829060ff166005811115611d3357611d3361488b565b6005811115611d4457611d4461488b565b8152602001600182018054611d58906149eb565b80601f0160208091040260200160405190810160405280929190818152602001828054611d84906149eb565b8015611dcf5780601f10611da657610100808354040283529160200191611dcf565b820191905f5260205f20905b815481529060010190602001808311611db257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f80516020615620833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611e709086908690615142565b90815260200160405180910390205491505092915050565b5f80611e926125bd565b5f868152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611ecb57611ecb61488b565b6003811115611edc57611edc61488b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611f5282611cde565b9050600283516003811115611f6957611f6961488b565b14611f8a578251604051633b0d540d60e21b815261064f919060040161503b565b60208301516001600160a01b03163314612026575f8281526006850160205260409020546001600160a01b03163314611fc3573361169f565b5f82815260068501602052604090205460a0820151611ff291600160b01b90046001600160401b031690615151565b6001600160401b03164210156120265760405163fb6ce63f60e01b81526001600160401b034216600482015260240161064f565b60028151600581111561203b5761203b61488b565b03612169576002840154608084015161205d916001600160401b031690615151565b6001600160401b03164210156120915760405163fb6ce63f60e01b81526001600160401b034216600482015260240161064f565b86156120a3576120a1828761231e565b505b5f8881526007850160205260409020805460ff19166003179055606083015160808201516120dc9184916120d79190615171565b61316c565b505f898152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561211d84613343565b5f8a81526008870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a3151594506119099350505050565b60048151600581111561217e5761217e61488b565b036121b25761218c83613343565b5f8981526008860160205260409020556121a588612c04565b6001945050505050611909565b805160405163170cc93360e21b815261064f9190600401614a1d565b6121d66134da565b6110c981613525565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612243573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261226a9190810190615191565b915091508061228c57604051636b2f19e960e01b815260040160405180910390fd5b8151156122b2578151604051636ba589a560e01b8152600481019190915260240161064f565b60208201516001600160a01b0316156122ee576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161064f565b5092915050565b5f806122ff6125bd565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612369573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123909190810190615191565b91509150806123b257604051636b2f19e960e01b815260040160405180910390fd5b5f6123bb6125bd565b60058101548451919250146123e9578251604051636ba589a560e01b8152600481019190915260240161064f565b60208301516001600160a01b031615612425576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161064f565b60208301516001600160a01b031615612461576020830151604051624de75d60e31b81526001600160a01b03909116600482015260240161064f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b815260040161249e9190614b5f565b6040805180830381865af41580156124b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124dc9190615221565b915091508188146125035760405163089938b360e11b81526004810189905260240161064f565b5f8881526006840160205260409020600101546001600160401b039081169082161115612594575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26125b2565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806125eb6125bd565b90505f6125f78661359f565b9050612602866122f5565b61261157600192505050611909565b5f8681526006830160205260409020546001600160a01b03163314612636573361169f565b5f86815260068301602052604090205460a082015161266591600160b01b90046001600160401b031690615151565b6001600160401b03168160c001516001600160401b031610156126ac5760c081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161064f565b5f85156126c4576126bd878661231e565b90506126e2565b505f8681526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f9061270790611399565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612770573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127949190614b71565b905080846009015f8a81526020019081526020015f205f8282546127b89190614e1a565b90915550501515979650505050505050565b5f805160206156408339815191528054600119016127fb57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f61280a614684565b5f805160206156208339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61283d886121df565b604001516040518263ffffffff1660e01b815260040161285d9190614b5f565b6040805180830381865af4158015612877573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061289b919061508a565b9150915080156128c257604051632d07135360e01b8152811515600482015260240161064f565b5f828152600784016020526040808220815160e081019092528054829060ff1660058111156128f3576128f361488b565b60058111156129045761290461488b565b8152602001600182018054612918906149eb565b80601f0160208091040260200160405190810160405280929190818152602001828054612944906149eb565b801561298f5780601f106129665761010080835404028352916020019161298f565b820191905f5260205f20905b81548152906001019060200180831161297257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156129fa576129fa61488b565b14158015612a1b5750600181516005811115612a1857612a1861488b565b14155b15612a3c57805160405163170cc93360e21b815261064f9190600401614a1d565b600381516005811115612a5157612a5161488b565b03612a5f5760048152612a64565b600581525b836008018160200151604051612a7a9190614cf6565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612abe57612abe61488b565b021790555060208201516001820190612ad79082614d4b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612b7d57612b7d61488b565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612bbd6125bd565b5f838152600982016020526040812080549190559091506108de8482613883565b61162e6001600160a01b038316826138e1565b60015f8051602061564083398151915255565b5f612c0d6125bd565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c4657612c4661488b565b6003811115612c5757612c5761488b565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612cf47fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612d039190615151565b6001600160401b0316421015612d375760405163fb6ce63f60e01b81526001600160401b034216600482015260240161064f565b5f8481526007840160209081526040822080546001600160a81b0319168155600181018390556002018290558301519080612d73838886613974565b91509150612d8c85602001516110a98760600151611399565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80612ddc6125bd565b600281015490915061ffff600160401b90910481169086161080612e05575061271061ffff8616115b15612e2957604051635f12e6c360e11b815261ffff8616600482015260240161064f565b60028101546001600160401b039081169085161015612e65576040516202a06d60e11b81526001600160401b038516600482015260240161064f565b8054831080612e775750806001015483115b15612e985760405163222d164360e21b81526004810184905260240161064f565b825f612ea382610fc5565b90505f612eb08983613a21565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f80612f366125bd565b90505f612f4284610fc5565b90505f612f4e87611cde565b9050612f59876122f5565b612f79576040516330efa98b60e01b81526004810188905260240161064f565b600281516005811115612f8e57612f8e61488b565b14612faf57805160405163170cc93360e21b815261064f9190600401614a1d565b5f828260800151612fc09190615151565b905083600201600a9054906101000a90046001600160401b03168260400151612fe99190615244565b6001600160401b0316816001600160401b0316111561302657604051636d51fe0560e11b81526001600160401b038216600482015260240161064f565b5f806130328a8461316c565b915091505f8a8360405160200161306092919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b5f8281525f80516020615660833981519152602052604081206002015481905f8051602061562083398151915290600160801b90046001600160401b03166131b48582613f46565b5f6131be87614169565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613267573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261328e9190810190614b2e565b6040518263ffffffff1660e01b81526004016132aa9190614b5f565b6020604051808303815f875af11580156132c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906132ea9190614b71565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061334d6125bd565b90505f61335d8460400151611cde565b90505f6003825160058111156133755761337561488b565b148061339357506004825160058111156133915761339161488b565b145b156133a3575060c08101516133e0565b6002825160058111156133b8576133b861488b565b036133c45750426133e0565b815160405163170cc93360e21b815261064f9190600401614a1d565b84608001516001600160401b0316816001600160401b03161161340757505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f9061342c90611399565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa1580156134ad573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134d19190614b71565b95945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661352357604051631afcd79f60e31b815260040160405180910390fd5b565b61352d6134da565b613536816141de565b61353e6141f7565b6110c96060820135608083013561355b60c0850160a086016147fe565b61356b60e0860160c0870161526f565b61357c610100870160e08801615288565b61010087013561359461014089016101208a01614b9c565b886101400135614207565b6135a7614684565b5f8281525f805160206156608339815191526020526040808220815160e0810190925280545f8051602061562083398151915293929190829060ff1660058111156135f4576135f461488b565b60058111156136055761360561488b565b8152602001600182018054613619906149eb565b80601f0160208091040260200160405190810160405280929190818152602001828054613645906149eb565b80156136905780601f1061366757610100808354040283529160200191613690565b820191905f5260205f20905b81548152906001019060200180831161367357829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156136fe576136fe61488b565b14613731575f8481526007830160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614a1d565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff191660018360058111156137755761377561488b565b02179055506020820151600182019061378e9082614d4b565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f61382c858261316c565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b1580156138cf575f80fd5b505af11580156111f0573d5f803e3d5ffd5b804710156139045760405163cd78605960e01b815230600482015260240161064f565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f811461394d576040519150601f19603f3d011682016040523d82523d5f602084013e613952565b606091505b505090508061065857604051630a12f52160e11b815260040160405180910390fd5b5f805f61397f6125bd565b5f86815260088201602052604081208054908290559192509081908015613a13575f878152600685016020526040902054612710906139c990600160a01b900461ffff1683614e4f565b6139d3919061501c565b915081846009015f8981526020019081526020015f205f8282546139f79190614e1a565b90915550613a07905082826152a8565b9250613a138984613883565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613a6557604051637fab81e560e01b815260040160405180910390fd5b5f8051602061562083398151915242613a8460608601604087016147fe565b6001600160401b0316111580613abe5750613aa26202a30042614e1a565b613ab260608601604087016147fe565b6001600160401b031610155b15613af857613ad360608501604086016147fe565b604051635879da1360e11b81526001600160401b03909116600482015260240161064f565b613b0d613b0860608601866152bb565b6143ec565b613b1d613b0860808601866152bb565b6030613b2c60208601866152cf565b905014613b5e57613b4060208501856152cf565b6040516326475b2f60e11b815261064f925060040190815260200190565b613b6884806152cf565b90505f03613b9557613b7a84806152cf565b604051633e08a12560e11b815260040161064f929190615311565b5f60088201613ba486806152cf565b604051613bb2929190615142565b90815260200160405180910390205414613beb57613bd084806152cf565b60405163a41f772f60e01b815260040161064f929190615311565b613bf5835f613f46565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613c328a806152cf565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613c7a908b018b6152cf565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613cc360608b0160408c016147fe565b6001600160401b03168152602001613cde60608b018b6152bb565b613ce790615324565b8152602001613cf960808b018b6152bb565b613d0290615324565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613d309190615451565b5f60405180830381865af4158015613d4a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613d719190810190615508565b5f82815260068601602052604090209193509150613d8f8282614d4b565b508160088401613d9f88806152cf565b604051613dad929190615142565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613de9908590600401614b5f565b6020604051808303815f875af1158015613e05573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613e299190614b71565b5f8481526007860160205260409020805460ff191660011790559050613e4f87806152cf565b5f858152600787016020526040902060010191613e6d91908361554b565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613ecc88806152cf565b604051613eda929190615142565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613f1891906147fe565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805160206156208339815191525f6001600160401b038084169085161115613f7a57613f738385615171565b9050613f87565b613f848484615171565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580613fe9575060018401548151613fe5916001600160401b031690614e1a565b8210155b1561400f576001600160401b03831660608201528181526040810151602082015261402e565b82816060018181516140219190615151565b6001600160401b03169052505b606081015161403e906064615244565b602082015160018601546001600160401b0392909216916140699190600160401b900460ff16614e4f565b101561409957606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161064f565b856001600160401b0316816040018181516140b49190614e1a565b9052506040810180516001600160401b03871691906140d49083906152a8565b905250600184015460408201516064916140f991600160401b90910460ff1690614e4f565b1015614120578060400151604051635943317f60e01b815260040161064f91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f805160206156608339815191526020526040812060020180545f8051602061562083398151915291906008906141b390600160401b90046001600160401b0316615604565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6141e66134da565b6141ee614555565b6110c98161455d565b6141ff6134da565b613523614645565b61420f6134da565b5f6142186125bd565b905061ffff86161580614230575061271061ffff8716115b1561425457604051635f12e6c360e11b815261ffff8716600482015260240161064f565b878911156142785760405163222d164360e21b8152600481018a905260240161064f565b60ff8516158061428b5750600a60ff8616115b156142ae5760405163170db35960e31b815260ff8616600482015260240161064f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614315576040516202a06d60e11b81526001600160401b038816600482015260240161064f565b835f036143355760405163a733007160e01b815260040160405180910390fd5b8161435657604051632f6bd1db60e01b81526004810183905260240161064f565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b6143f960208201826147d1565b63ffffffff1615801561441957506144146020820182614bb7565b151590505b156144605761442b60208201826147d1565b6144386020830183614bb7565b60405163c08a0f1d60e01b815263ffffffff909316600484015260248301525060440161064f565b61446d6020820182614bb7565b905061447c60208301836147d1565b63ffffffff1611156144955761442b60208201826147d1565b60015b6144a56020830183614bb7565b905081101561162e576144bb6020830183614bb7565b6144c66001846152a8565b8181106144d5576144d5614bfc565b90506020020160208101906144ea9190614b9c565b6001600160a01b03166145006020840184614bb7565b8381811061451057614510614bfc565b90506020020160208101906145259190614b9c565b6001600160a01b0316101561454d57604051630dbc8d5f60e31b815260040160405180910390fd5b600101614498565b6135236134da565b6145656134da565b80355f80516020615620833981519152908155601461458a6060840160408501615288565b60ff1611806145a957506145a46060830160408401615288565b60ff16155b156145dd576145be6060830160408401615288565b604051634a59bbff60e11b815260ff909116600482015260240161064f565b6145ed6060830160408401615288565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561461e60408301602084016147fe565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612bf16134da565b508054614659906149eb565b5f825580601f10614668575050565b601f0160209004905f5260205f20908101906110c991906146c1565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b808211156146d5575f81556001016146c2565b5090565b80151581146110c9575f80fd5b803563ffffffff81168114611cd9575f80fd5b5f805f6060848603121561470b575f80fd5b83359250602084013561471d816146d9565b915061472b604085016146e6565b90509250925092565b5f60208284031215614744575f80fd5b5035919050565b5f610160828403121561475c575f80fd5b50919050565b5f8060408385031215614773575f80fd5b82356001600160401b03811115614788575f80fd5b830160808186031215614799575f80fd5b91506147a7602084016146e6565b90509250929050565b5f80604083850312156147c1575f80fd5b823591506147a7602084016146e6565b5f602082840312156147e1575f80fd5b611909826146e6565b6001600160401b03811681146110c9575f80fd5b5f6020828403121561480e575f80fd5b8135611909816147ea565b803561ffff81168114611cd9575f80fd5b5f805f6060848603121561483c575f80fd5b83356001600160401b03811115614851575f80fd5b840160a08187031215614862575f80fd5b925061487060208501614819565b91506040840135614880816147ea565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b600681106148af576148af61488b565b9052565b5f5b838110156148cd5781810151838201526020016148b5565b50505f910152565b5f81518084526148ec8160208601602086016148b3565b601f01601f19169290920160200192915050565b6020815261491260208201835161489f565b5f602083015160e0604084015261492d6101008401826148d5565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614991575f80fd5b82356001600160401b03808211156149a7575f80fd5b818501915085601f8301126149ba575f80fd5b8135818111156149c8575f80fd5b8660208285010111156149d9575f80fd5b60209290920196919550909350505050565b600181811c908216806149ff57607f821691505b60208210810361475c57634e487b7160e01b5f52602260045260245ffd5b60208101611013828461489f565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614a6157614a61614a2b565b60405290565b604080519081016001600160401b0381118282101715614a6157614a61614a2b565b604051601f8201601f191681016001600160401b0381118282101715614ab157614ab1614a2b565b604052919050565b5f6001600160401b03821115614ad157614ad1614a2b565b50601f01601f191660200190565b5f82601f830112614aee575f80fd5b8151614b01614afc82614ab9565b614a89565b818152846020838601011115614b15575f80fd5b614b268260208301602087016148b3565b949350505050565b5f60208284031215614b3e575f80fd5b81516001600160401b03811115614b53575f80fd5b614b2684828501614adf565b602081525f61190960208301846148d5565b5f60208284031215614b81575f80fd5b5051919050565b6001600160a01b03811681146110c9575f80fd5b5f60208284031215614bac575f80fd5b813561190981614b88565b5f808335601e19843603018112614bcc575f80fd5b8301803591506001600160401b03821115614be5575f80fd5b6020019150600581901b360382131561333c575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614c24575f80fd5b9190910192915050565b5f82601f830112614c3d575f80fd5b8135614c4b614afc82614ab9565b818152846020838601011115614c5f575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614c8b575f80fd5b614c93614a3f565b82356001600160401b0380821115614ca9575f80fd5b614cb536838701614c2e565b83526020850135915080821115614cca575f80fd5b50614cd736828601614c2e565b6020830152506040830135614ceb816147ea565b604082015292915050565b5f8251614c248184602087016148b3565b601f82111561065857805f5260205f20601f840160051c81016020851015614d2c5750805b601f840160051c820191505b81811015611b69575f8155600101614d38565b81516001600160401b03811115614d6457614d64614a2b565b614d7881614d7284546149eb565b84614d07565b602080601f831160018114614dab575f8415614d945750858301515b5f19600386901b1c1916600185901b1785556111f0565b5f85815260208120601f198616915b82811015614dd957888601518255948401946001909101908401614dba565b5085821015614df657878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561101357611013614e06565b5f63ffffffff808316818103614e4557614e45614e06565b6001019392505050565b808202811582820484141761101357611013614e06565b5f808335601e19843603018112614e7b575f80fd5b83016020810192503590506001600160401b03811115614e99575f80fd5b80360382131561333c575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b87811015614f8457848303601f19018952813536889003605e19018112614f0b575f80fd5b87016060614f198280614e66565b828752614f298388018284614ea7565b92505050614f3986830183614e66565b86830388880152614f4b838284614ea7565b925050506040808301359250614f60836147ea565b6001600160401b039290921694909101939093529783019790830190600101614ee6565b5090979650505050505050565b6020815281356020820152602082013560408201525f6040830135614fb581614b88565b6001600160a01b031660608381019190915283013536849003601e19018112614fdc575f80fd5b83016020810190356001600160401b03811115614ff7575f80fd5b8060051b3603821315615008575f80fd5b6080808501526134d160a085018284614ecf565b5f8261503657634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061504f5761504f61488b565b91905290565b5f805f60608486031215615067575f80fd5b835192506020840151615079816147ea565b6040850151909250614880816147ea565b5f806040838503121561509b575f80fd5b8251915060208301516150ad816146d9565b809150509250929050565b5f60208083525f84546150ca816149eb565b806020870152604060018084165f81146150eb576001811461510757615134565b60ff19851660408a0152604084151560051b8a01019550615134565b895f5260205f205f5b8581101561512b5781548b8201860152908301908801615110565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156122ee576122ee614e06565b6001600160401b038281168282160390808211156122ee576122ee614e06565b5f80604083850312156151a2575f80fd5b82516001600160401b03808211156151b8575f80fd5b90840190606082870312156151cb575f80fd5b6151d3614a3f565b8251815260208301516151e581614b88565b60208201526040830151828111156151fb575f80fd5b61520788828601614adf565b60408301525080945050505060208301516150ad816146d9565b5f8060408385031215615232575f80fd5b8251915060208301516150ad816147ea565b6001600160401b0381811683821602808216919082811461526757615267614e06565b505092915050565b5f6020828403121561527f575f80fd5b61190982614819565b5f60208284031215615298575f80fd5b813560ff81168114611909575f80fd5b8181038181111561101357611013614e06565b5f8235603e19833603018112614c24575f80fd5b5f808335601e198436030181126152e4575f80fd5b8301803591506001600160401b038211156152fd575f80fd5b60200191503681900382131561333c575f80fd5b602081525f614b26602083018486614ea7565b5f60408236031215615334575f80fd5b61533c614a67565b615345836146e6565b81526020808401356001600160401b0380821115615361575f80fd5b9085019036601f830112615373575f80fd5b81358181111561538557615385614a2b565b8060051b9150615396848301614a89565b81815291830184019184810190368411156153af575f80fd5b938501935b838510156153d957843592506153c983614b88565b82825293850193908501906153b4565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156154465784516001600160a01b0316825293830193600192909201919083019061541d565b509695505050505050565b60208152815160208201525f602083015160e060408401526154776101008401826148d5565b90506040840151601f198085840301606086015261549583836148d5565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526154c583836153eb565b925060a08601519150808584030160c0860152506154e382826153eb565b91505060c084015161550060e08501826001600160401b03169052565b509392505050565b5f8060408385031215615519575f80fd5b8251915060208301516001600160401b03811115615535575f80fd5b61554185828601614adf565b9150509250929050565b6001600160401b0383111561556257615562614a2b565b6155768361557083546149eb565b83614d07565b5f601f8411600181146155a7575f85156155905750838201355b5f19600387901b1c1916600186901b178355611b69565b5f83815260208120601f198716915b828110156155d657868501358255602094850194600190920191016155b6565b50868210156155f2575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b03808316818103614e4557614e45614e0656fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220ca7a219203247de3da8c8457e9f3aecf66bceb9c866f937ea1853c7c1ab69e2964736f6c63430008190033", + 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\":\"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\":[{\"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\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"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\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"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\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"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\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"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\":\"DelegatorAdded\",\"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\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"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\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"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_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndValidation\",\"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\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"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\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndValidation\",\"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\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"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\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"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\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"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: "0x608060405234801561000f575f80fd5b50604051615a6f380380615a6f83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6159228061014d5f395ff3fe60806040526004361061021d575f3560e01c806376f786211161011e578063afb98096116100a8578063c599e24f1161006d578063c599e24f14610648578063c974d1b61461065b578063d5f20ff61461066f578063df93d8de1461069b578063fd7ac5e7146106b1575f80fd5b8063afb980961461059d578063b771b3bc146105d0578063ba3a4b97146105ea578063bc5fbfec14610609578063bee0a03f14610629575f80fd5b806393e24598116100ee57806393e245981461052d5780639ae064471461054c578063a3a65e481461056b578063a9778a7a14610371578063af2f5feb1461058a575f80fd5b806376f78621146104bc5780637d8d2f77146104db57806380dd672f146104fa5780638280a25a14610519575f80fd5b806335455ded116101aa57806360305d621161016f57806360305d621461041557806360ad77841461043e578063620658561461045d57806366435abf1461048a578063732214f8146104a9575f80fd5b806335455ded1461037157806337b9be8f146103995780633a1cfff6146103b8578063467ef06f146103d75780635dd6a6cb146103f6575f80fd5b80631ec44724116101f05780631ec44724146102ab57806320d91b7a146102ca57806325e1c776146102e95780632e2194d814610308578063329c3e121461033f575f80fd5b80630118acc4146102215780630322ed98146102425780630ba512d114610261578063151d30d114610280575b5f80fd5b34801561022c575f80fd5b5061024061023b366004614920565b6106d0565b005b34801561024d575f80fd5b5061024061025c36600461495b565b6106e1565b34801561026c575f80fd5b5061024061027b366004614972565b610971565b34801561028b575f80fd5b50610294600a81565b60405160ff90911681526020015b60405180910390f35b3480156102b6575f80fd5b506102406102c5366004614920565b610a4e565b3480156102d5575f80fd5b506102406102e4366004614989565b610a5a565b3480156102f4575f80fd5b506102406103033660046149d7565b610fdf565b348015610313575f80fd5b5061032761032236600461495b565b611053565b6040516001600160401b0390911681526020016102a2565b34801561034a575f80fd5b506103596001600160991b0181565b6040516001600160a01b0390911681526020016102a2565b34801561037c575f80fd5b5061038661271081565b60405161ffff90911681526020016102a2565b3480156103a4575f80fd5b506102406103b3366004614a0c565b6110a7565b3480156103c3575f80fd5b506102406103d2366004614920565b6110ba565b3480156103e2575f80fd5b506102406103f1366004614a5a565b6110c6565b348015610401575f80fd5b50610240610410366004614a0c565b6111ab565b348015610420575f80fd5b50610429601481565b60405163ffffffff90911681526020016102a2565b348015610449575f80fd5b506102406104583660046149d7565b6111b7565b348015610468575f80fd5b5061047c610477366004614a87565b611484565b6040519081526020016102a2565b348015610495575f80fd5b506103276104a436600461495b565b6114a4565b3480156104b4575f80fd5b5061047c5f81565b3480156104c7575f80fd5b506102406104d6366004614920565b6114b8565b3480156104e6575f80fd5b506102406104f5366004614a0c565b6114c4565b348015610505575f80fd5b506102406105143660046149d7565b6114d0565b348015610524575f80fd5b50610294603081565b348015610538575f80fd5b5061024061054736600461495b565b61170a565b348015610557575f80fd5b50610240610566366004614a0c565b6117bf565b348015610576575f80fd5b50610240610585366004614a5a565b6117cb565b61047c610598366004614ab3565b6119c0565b3480156105a8575f80fd5b5061047c7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b3480156105db575f80fd5b506103596005600160991b0181565b3480156105f5575f80fd5b5061024061060436600461495b565b6119f4565b348015610614575f80fd5b5061047c5f8051602061588d83398151915281565b348015610634575f80fd5b5061024061064336600461495b565b611c4d565b61047c61065636600461495b565b611d8a565b348015610666575f80fd5b50610294601481565b34801561067a575f80fd5b5061068e61068936600461495b565b611dbb565b6040516102a29190614b89565b3480156106a6575f80fd5b506103276202a30081565b3480156106bc575f80fd5b5061047c6106cb366004614c09565b611f0a565b6106dc8383835f611f65565b505050565b5f8181525f805160206158cd8339815191526020526040808220815160e0810190925280545f8051602061588d83398151915293929190829060ff16600581111561072e5761072e614b14565b600581111561073f5761073f614b14565b815260200160018201805461075390614c74565b80601f016020809104026020016040519081016040528092919081815260200182805461077f90614c74565b80156107ca5780601f106107a1576101008083540402835291602001916107ca565b820191905f5260205f20905b8154815290600101906020018083116107ad57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561083557610835614b14565b14610871575f8381526007830160205260409081902054905163170cc93360e21b81526108689160ff1690600401614ca6565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156108e8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261090f9190810190614daf565b6040518263ffffffff1660e01b815260040161092b9190614de0565b6020604051808303815f875af1158015610947573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061096b9190614df2565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806109ba575080546001600160401b03808416911610155b156109d85760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a0283611f91565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b61096b8383835f611fa2565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061588d8339815191529060ff1615610aac57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b139190614df2565b836020013514610b3c576040516372b0a7e760e11b815260208401356004820152602401610868565b30610b4d6060850160408601614e09565b6001600160a01b031614610b9057610b6b6060840160408501614e09565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610868565b5f610b9e6060850185614e24565b905090505f805b828163ffffffff161015610e05575f610bc16060880188614e24565b8363ffffffff16818110610bd757610bd7614e69565b9050602002810190610be99190614e7d565b610bf290614ee8565b80516040519192505f916008880191610c0a91614f63565b90815260200160405180910390205414610c3a57805160405163a41f772f60e01b81526108689190600401614de0565b5f6002885f013584604051602001610c6992919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610c8391614f63565b602060405180830381855afa158015610c9e573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610cc19190614df2565b90508086600801835f0151604051610cd99190614f63565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610d199082614fb8565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610d989085615087565b8251604051919550610da991614f63565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610dfe9061509a565b9050610ba5565b50600483018190556001830154606490610e2990600160401b900460ff16836150bc565b1015610e4b57604051635943317f60e01b815260048101829052602401610868565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610e6f87612362565b604001516040518263ffffffff1660e01b8152600401610e8f9190614de0565b602060405180830381865af4158015610eaa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ece9190614df2565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f0891906151fe565b5f60405180830381865af4158015610f22573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f499190810190614daf565b90505f600282604051610f5c9190614f63565b602060405180830381855afa158015610f77573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610f9a9190614df2565b9050828114610fc65760405163baaea89d60e01b81526004810182905260248101849052604401610868565b5050506009909201805460ff1916600117905550505050565b610fe882612478565b611008576040516330efa98b60e01b815260048101839052602401610868565b5f61101283611dbb565b519050600281600581111561102957611029614b14565b14611049578060405163170cc93360e21b81526004016108689190614ca6565b61096b83836124a1565b5f8061105d612740565b6003015461106b9084615289565b905080158061108057506001600160401b0381115b156110a15760405163222d164360e21b815260048101849052602401610868565b92915050565b6110b384848484611fa2565b5050505050565b61096b8383835f612764565b6110ce612986565b5f6110d7612740565b90505f806110e4846129bd565b915091506110f182612478565b6110fd57505050611192565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b03918216911680611134575080611152565b5f848152600b86016020526040902080546001600160a01b03191690555b60048351600581111561116757611167614b14565b03611176576111768185612d70565b61118c826111878560400151611484565b612d9a565b50505050505b6111a860015f805160206158ad83398151915255565b50565b61096b84848484612dc0565b5f6111c0612740565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156111f9576111f9614b14565b600381111561120a5761120a614b14565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61128082611dbb565b905060018351600381111561129757611297614b14565b146112b8578251604051633b0d540d60e21b815261086891906004016152a8565b6004815160058111156112cd576112cd614b14565b036112e3576112db86612dec565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61130889612362565b604001516040518263ffffffff1660e01b81526004016113289190614de0565b606060405180830381865af4158015611343573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136791906152c2565b509150915081841461139457846040015160405163089938b360e11b815260040161086891815260200190565b806001600160401b031683606001516001600160401b031610806113cd5750806001600160401b03168560a001516001600160401b0316115b156113f657604051632e19bc2d60e11b81526001600160401b0382166004820152602401610868565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61148d612740565b600301546110a1906001600160401b0384166150bc565b5f6114ae82611dbb565b6080015192915050565b6106dc8383835f612dc0565b6110b384848484612764565b6114d8612986565b5f6114e1612740565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561151a5761151a614b14565b600381111561152b5761152b614b14565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156115a4576115a4614b14565b146115c5578051604051633b0d540d60e21b815261086891906004016152a8565b60046115d48260400151611dbb565b5160058111156115e6576115e6614b14565b146116e5575f6115f584612362565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116349190614de0565b606060405180830381865af415801561164f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061167391906152c2565b50915091508184604001511461169f5760405163089938b360e11b815260048101839052602401610868565b806001600160401b03168460c001516001600160401b031611156116e157604051632e19bc2d60e11b81526001600160401b0382166004820152602401610868565b5050505b6116ee84612dec565b505061170660015f805160206158ad83398151915255565b5050565b5f611713612740565b90505f61171f83611dbb565b519050600481600581111561173657611736614b14565b14611756578060405163170cc93360e21b81526004016108689190614ca6565b5f8381526006830160205260409020546001600160a01b0316331461179c57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610868565b5f8381526006830160205260409020546106dc906001600160a01b031684612d70565b61096b84848484611f65565b5f8051602061588d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117fe86612362565b604001516040518263ffffffff1660e01b815260040161181e9190614de0565b6040805180830381865af4158015611838573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185c91906152f7565b915091508061188257604051632d07135360e01b81528115156004820152602401610868565b5f8281526006840160205260409020805461189c90614c74565b90505f036118c05760405163089938b360e11b815260048101839052602401610868565b60015f83815260078501602052604090205460ff1660058111156118e6576118e6614b14565b14611919575f8281526007840160205260409081902054905163170cc93360e21b81526108689160ff1690600401614ca6565b5f828152600684016020526040812061193191614874565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f6119c9612986565b6119d584848434612ff9565b90506119ed60015f805160206158ad83398151915255565b9392505050565b5f6119fd612740565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611a3657611a36614b14565b6003811115611a4757611a47614b14565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611ac057611ac0614b14565b14158015611ae15750600381516003811115611ade57611ade614b14565b14155b15611b02578051604051633b0d540d60e21b815261086891906004016152a8565b5f611b108260400151611dbb565b905080606001516001600160401b03165f03611b42576040516339b894f960e21b815260048101859052602401610868565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611bb093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611bca573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611bf19190810190614daf565b6040518263ffffffff1660e01b8152600401611c0d9190614de0565b6020604051808303815f875af1158015611c29573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110b39190614df2565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061588d8339815191529190611c9490614c74565b90505f03611cb85760405163089938b360e11b815260048101839052602401610868565b60015f83815260078301602052604090205460ff166005811115611cde57611cde614b14565b14611d11575f8281526007820160205260409081902054905163170cc93360e21b81526108689160ff1690600401614ca6565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611d4a9190600401615325565b6020604051808303815f875af1158015611d66573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106dc9190614df2565b5f611d93612986565b611d9e823334613153565b9050611db660015f805160206158ad83398151915255565b919050565b611dc36148ab565b5f8281525f805160206158cd833981519152602052604090819020815160e0810190925280545f8051602061588d833981519152929190829060ff166005811115611e1057611e10614b14565b6005811115611e2157611e21614b14565b8152602001600182018054611e3590614c74565b80601f0160208091040260200160405190810160405280929190818152602001828054611e6190614c74565b8015611eac5780601f10611e8357610100808354040283529160200191611eac565b820191905f5260205f20905b815481529060010190602001808311611e8f57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f8051602061588d833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611f4d90869086906153af565b90815260200160405180910390205491505092915050565b611f7184848484611fa2565b61096b57604051631036cf9160e11b815260048101859052602401610868565b611f99613393565b6111a8816133de565b5f80611fac612740565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611fe557611fe5614b14565b6003811115611ff657611ff6614b14565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61206c82611dbb565b905060028351600381111561208357612083614b14565b146120a4578251604051633b0d540d60e21b815261086891906004016152a8565b60208301516001600160a01b03163314612140575f8281526006850160205260409020546001600160a01b031633146120dd5733611777565b5f82815260068501602052604090205460a082015161210c91600160b01b90046001600160401b0316906153be565b6001600160401b03164210156121405760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610868565b60028151600581111561215557612155614b14565b036122bd5760028401546080840151612177916001600160401b0316906153be565b6001600160401b03164210156121ab5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610868565b87156121bd576121bb82886124a1565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516121f69184916121f191906153de565b613458565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556122378461362f565b5f8b8152600887016020526040902081905590506001600160a01b03871615612283575f8a8152600986016020526040902080546001600160a01b0319166001600160a01b0389161790555b60405183908b907f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57905f90a31515945061235a9350505050565b6004815160058111156122d2576122d2614b14565b0361233e576122e08361362f565b5f8a81526008860160205260409020556001600160a01b03861615612328575f898152600985016020526040902080546001600160a01b0319166001600160a01b0388161790555b61233189612dec565b600194505050505061235a565b805160405163170cc93360e21b81526108689190600401614ca6565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156123c6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123ed91908101906153fe565b915091508061240f57604051636b2f19e960e01b815260040160405180910390fd5b815115612435578151604051636ba589a560e01b81526004810191909152602401610868565b60208201516001600160a01b031615612471576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610868565b5092915050565b5f80612482612740565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156124ec573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261251391908101906153fe565b915091508061253557604051636b2f19e960e01b815260040160405180910390fd5b5f61253e612740565b600581015484519192501461256c578251604051636ba589a560e01b81526004810191909152602401610868565b60208301516001600160a01b0316156125a8576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610868565b60208301516001600160a01b0316156125e4576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610868565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016126219190614de0565b6040805180830381865af415801561263b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061265f919061548e565b915091508188146126865760405163089938b360e11b815260048101899052602401610868565b5f8881526006840160205260409020600101546001600160401b039081169082161115612717575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612735565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061276e612740565b90505f61277a876137c6565b905061278587612478565b6127945760019250505061235a565b5f8781526006830160205260409020546001600160a01b031633146127b95733611777565b5f87815260068301602052604090205460a08201516127e891600160b01b90046001600160401b0316906153be565b6001600160401b03168160c001516001600160401b0316101561282f5760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610868565b5f86156128475761284088876124a1565b9050612865565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f9061288a90611484565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa1580156128f3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129179190614df2565b90508084600a015f8b81526020019081526020015f205f82825461293b9190615087565b90915550506001600160a01b03861615612978575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f805160206158ad8339815191528054600119016129b757604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f6129c66148ab565b5f8051602061588d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6129f988612362565b604001516040518263ffffffff1660e01b8152600401612a199190614de0565b6040805180830381865af4158015612a33573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a5791906152f7565b915091508015612a7e57604051632d07135360e01b81528115156004820152602401610868565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612aaf57612aaf614b14565b6005811115612ac057612ac0614b14565b8152602001600182018054612ad490614c74565b80601f0160208091040260200160405190810160405280929190818152602001828054612b0090614c74565b8015612b4b5780601f10612b2257610100808354040283529160200191612b4b565b820191905f5260205f20905b815481529060010190602001808311612b2e57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612bb657612bb6614b14565b14158015612bd75750600181516005811115612bd457612bd4614b14565b14155b15612bf857805160405163170cc93360e21b81526108689190600401614ca6565b600381516005811115612c0d57612c0d614b14565b03612c1b5760048152612c20565b600581525b836008018160200151604051612c369190614f63565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612c7a57612c7a614b14565b021790555060208201516001820190612c939082614fb8565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612d3957612d39614b14565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d79612740565b5f838152600a820160205260408120805491905590915061096b8482613aaa565b6117066001600160a01b03831682613b08565b60015f805160206158ad83398151915255565b612dcc84848484612764565b61096b57604051635bff683f60e11b815260048101859052602401610868565b5f612df5612740565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612e2e57612e2e614b14565b6003811115612e3f57612e3f614b14565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612edc7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612eeb91906153be565b6001600160401b0316421015612f1f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610868565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b031680612f6f57506020820151612f8d565b5f858152600985016020526040902080546001600160a01b03191690555b5f80612f9a838886613b9b565b91509150612fb385602001516111878760600151611484565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80613003612740565b600281015490915061ffff600160401b9091048116908616108061302c575061271061ffff8616115b1561305057604051635f12e6c360e11b815261ffff86166004820152602401610868565b60028101546001600160401b03908116908516101561308c576040516202a06d60e11b81526001600160401b0385166004820152602401610868565b805483108061309e5750806001015483115b156130bf5760405163222d164360e21b815260048101849052602401610868565b825f6130ca82611053565b90505f6130d78983613c48565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f8061315d612740565b90505f61316984611053565b90505f61317587611dbb565b905061318087612478565b6131a0576040516330efa98b60e01b815260048101889052602401610868565b6002815160058111156131b5576131b5614b14565b146131d657805160405163170cc93360e21b81526108689190600401614ca6565b5f8282608001516131e791906153be565b905083600201600a9054906101000a90046001600160401b0316826040015161321091906154b1565b6001600160401b0316816001600160401b0316111561324d57604051636d51fe0560e11b81526001600160401b0382166004820152602401610868565b5f806132598a84613458565b915091505f8a8360405160200161328792919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166133dc57604051631afcd79f60e31b815260040160405180910390fd5b565b6133e6613393565b6133ef8161416d565b6133f7614186565b6111a86060820135608083013561341460c0850160a08601614a87565b61342460e0860160c087016154dc565b613435610100870160e088016154f5565b61010087013561344d61014089016101208a01614e09565b886101400135614196565b5f8281525f805160206158cd833981519152602052604081206002015481905f8051602061588d83398151915290600160801b90046001600160401b03166134a0858261437b565b5f6134aa8761459e565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613553573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261357a9190810190614daf565b6040518263ffffffff1660e01b81526004016135969190614de0565b6020604051808303815f875af11580156135b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135d69190614df2565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f80613639612740565b90505f6136498460400151611dbb565b90505f60038251600581111561366157613661614b14565b148061367f575060048251600581111561367d5761367d614b14565b145b1561368f575060c08101516136cc565b6002825160058111156136a4576136a4614b14565b036136b05750426136cc565b815160405163170cc93360e21b81526108689190600401614ca6565b84608001516001600160401b0316816001600160401b0316116136f357505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f9061371890611484565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613799573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137bd9190614df2565b95945050505050565b6137ce6148ab565b5f8281525f805160206158cd8339815191526020526040808220815160e0810190925280545f8051602061588d83398151915293929190829060ff16600581111561381b5761381b614b14565b600581111561382c5761382c614b14565b815260200160018201805461384090614c74565b80601f016020809104026020016040519081016040528092919081815260200182805461386c90614c74565b80156138b75780601f1061388e576101008083540402835291602001916138b7565b820191905f5260205f20905b81548152906001019060200180831161389a57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561392557613925614b14565b14613958575f8481526007830160205260409081902054905163170cc93360e21b81526108689160ff1690600401614ca6565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561399c5761399c614b14565b0217905550602082015160018201906139b59082614fb8565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613a538582613458565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613af6575f80fd5b505af11580156112db573d5f803e3d5ffd5b80471015613b2b5760405163cd78605960e01b8152306004820152602401610868565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613b74576040519150601f19603f3d011682016040523d82523d5f602084013e613b79565b606091505b50509050806106dc57604051630a12f52160e11b815260040160405180910390fd5b5f805f613ba6612740565b5f86815260088201602052604081208054908290559192509081908015613c3a575f87815260068501602052604090205461271090613bf090600160a01b900461ffff16836150bc565b613bfa9190615289565b91508184600a015f8981526020019081526020015f205f828254613c1e9190615087565b90915550613c2e90508282615515565b9250613c3a8984613aaa565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613c8c57604051637fab81e560e01b815260040160405180910390fd5b5f8051602061588d83398151915242613cab6060860160408701614a87565b6001600160401b0316111580613ce55750613cc96202a30042615087565b613cd96060860160408701614a87565b6001600160401b031610155b15613d1f57613cfa6060850160408601614a87565b604051635879da1360e11b81526001600160401b039091166004820152602401610868565b613d34613d2f6060860186615528565b614613565b613d44613d2f6080860186615528565b6030613d53602086018661553c565b905014613d8557613d67602085018561553c565b6040516326475b2f60e11b8152610868925060040190815260200190565b613d8f848061553c565b90505f03613dbc57613da1848061553c565b604051633e08a12560e11b815260040161086892919061557e565b5f60088201613dcb868061553c565b604051613dd99291906153af565b90815260200160405180910390205414613e1257613df7848061553c565b60405163a41f772f60e01b815260040161086892919061557e565b613e1c835f61437b565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613e598a8061553c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613ea1908b018b61553c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613eea60608b0160408c01614a87565b6001600160401b03168152602001613f0560608b018b615528565b613f0e90615591565b8152602001613f2060808b018b615528565b613f2990615591565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613f5791906156be565b5f60405180830381865af4158015613f71573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613f989190810190615775565b5f82815260068601602052604090209193509150613fb68282614fb8565b508160088401613fc6888061553c565b604051613fd49291906153af565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614010908590600401614de0565b6020604051808303815f875af115801561402c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140509190614df2565b5f8481526007860160205260409020805460ff191660011790559050614076878061553c565b5f8581526007870160205260409020600101916140949190836157b8565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806140f3888061553c565b6040516141019291906153af565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b604001602081019061413f9190614a87565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b614175613393565b61417d61477c565b6111a881614784565b61418e613393565b6133dc61486c565b61419e613393565b5f6141a7612740565b905061ffff861615806141bf575061271061ffff8716115b156141e357604051635f12e6c360e11b815261ffff87166004820152602401610868565b878911156142075760405163222d164360e21b8152600481018a9052602401610868565b60ff8516158061421a5750600a60ff8616115b1561423d5760405163170db35960e31b815260ff86166004820152602401610868565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b031610156142a4576040516202a06d60e11b81526001600160401b0388166004820152602401610868565b835f036142c45760405163a733007160e01b815260040160405180910390fd5b816142e557604051632f6bd1db60e01b815260048101839052602401610868565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f8051602061588d8339815191525f6001600160401b0380841690851611156143af576143a883856153de565b90506143bc565b6143b984846153de565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061441e57506001840154815161441a916001600160401b031690615087565b8210155b15614444576001600160401b038316606082015281815260408101516020820152614463565b828160600181815161445691906153be565b6001600160401b03169052505b60608101516144739060646154b1565b602082015160018601546001600160401b03929092169161449e9190600160401b900460ff166150bc565b10156144ce57606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610868565b856001600160401b0316816040018181516144e99190615087565b9052506040810180516001600160401b0387169190614509908390615515565b9052506001840154604082015160649161452e91600160401b90910460ff16906150bc565b1015614555578060400151604051635943317f60e01b815260040161086891815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f805160206158cd8339815191526020526040812060020180545f8051602061588d83398151915291906008906145e890600160401b90046001600160401b0316615871565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6146206020820182614a5a565b63ffffffff16158015614640575061463b6020820182614e24565b151590505b15614687576146526020820182614a5a565b61465f6020830183614e24565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610868565b6146946020820182614e24565b90506146a36020830183614a5a565b63ffffffff1611156146bc576146526020820182614a5a565b60015b6146cc6020830183614e24565b9050811015611706576146e26020830183614e24565b6146ed600184615515565b8181106146fc576146fc614e69565b90506020020160208101906147119190614e09565b6001600160a01b03166147276020840184614e24565b8381811061473757614737614e69565b905060200201602081019061474c9190614e09565b6001600160a01b0316101561477457604051630dbc8d5f60e31b815260040160405180910390fd5b6001016146bf565b6133dc613393565b61478c613393565b80355f8051602061588d83398151915290815560146147b160608401604085016154f5565b60ff1611806147d057506147cb60608301604084016154f5565b60ff16155b15614804576147e560608301604084016154f5565b604051634a59bbff60e11b815260ff9091166004820152602401610868565b61481460608301604084016154f5565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556148456040830160208401614a87565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dad613393565b50805461488090614c74565b5f825580601f1061488f575050565b601f0160209004905f5260205f20908101906111a891906148e8565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b808211156148fc575f81556001016148e9565b5090565b80151581146111a8575f80fd5b803563ffffffff81168114611db6575f80fd5b5f805f60608486031215614932575f80fd5b83359250602084013561494481614900565b91506149526040850161490d565b90509250925092565b5f6020828403121561496b575f80fd5b5035919050565b5f6101608284031215614983575f80fd5b50919050565b5f806040838503121561499a575f80fd5b82356001600160401b038111156149af575f80fd5b8301608081860312156149c0575f80fd5b91506149ce6020840161490d565b90509250929050565b5f80604083850312156149e8575f80fd5b823591506149ce6020840161490d565b6001600160a01b03811681146111a8575f80fd5b5f805f8060808587031215614a1f575f80fd5b843593506020850135614a3181614900565b9250614a3f6040860161490d565b91506060850135614a4f816149f8565b939692955090935050565b5f60208284031215614a6a575f80fd5b6119ed8261490d565b6001600160401b03811681146111a8575f80fd5b5f60208284031215614a97575f80fd5b81356119ed81614a73565b803561ffff81168114611db6575f80fd5b5f805f60608486031215614ac5575f80fd5b83356001600160401b03811115614ada575f80fd5b840160a08187031215614aeb575f80fd5b9250614af960208501614aa2565b91506040840135614b0981614a73565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614b3857614b38614b14565b9052565b5f5b83811015614b56578181015183820152602001614b3e565b50505f910152565b5f8151808452614b75816020860160208601614b3c565b601f01601f19169290920160200192915050565b60208152614b9b602082018351614b28565b5f602083015160e06040840152614bb6610100840182614b5e565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614c1a575f80fd5b82356001600160401b0380821115614c30575f80fd5b818501915085601f830112614c43575f80fd5b813581811115614c51575f80fd5b866020828501011115614c62575f80fd5b60209290920196919550909350505050565b600181811c90821680614c8857607f821691505b60208210810361498357634e487b7160e01b5f52602260045260245ffd5b602081016110a18284614b28565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614cea57614cea614cb4565b60405290565b604080519081016001600160401b0381118282101715614cea57614cea614cb4565b604051601f8201601f191681016001600160401b0381118282101715614d3a57614d3a614cb4565b604052919050565b5f6001600160401b03821115614d5a57614d5a614cb4565b50601f01601f191660200190565b5f82601f830112614d77575f80fd5b8151614d8a614d8582614d42565b614d12565b818152846020838601011115614d9e575f80fd5b61235a826020830160208701614b3c565b5f60208284031215614dbf575f80fd5b81516001600160401b03811115614dd4575f80fd5b61235a84828501614d68565b602081525f6119ed6020830184614b5e565b5f60208284031215614e02575f80fd5b5051919050565b5f60208284031215614e19575f80fd5b81356119ed816149f8565b5f808335601e19843603018112614e39575f80fd5b8301803591506001600160401b03821115614e52575f80fd5b6020019150600581901b3603821315613628575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614e91575f80fd5b9190910192915050565b5f82601f830112614eaa575f80fd5b8135614eb8614d8582614d42565b818152846020838601011115614ecc575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614ef8575f80fd5b614f00614cc8565b82356001600160401b0380821115614f16575f80fd5b614f2236838701614e9b565b83526020850135915080821115614f37575f80fd5b50614f4436828601614e9b565b6020830152506040830135614f5881614a73565b604082015292915050565b5f8251614e91818460208701614b3c565b601f8211156106dc57805f5260205f20601f840160051c81016020851015614f995750805b601f840160051c820191505b818110156110b3575f8155600101614fa5565b81516001600160401b03811115614fd157614fd1614cb4565b614fe581614fdf8454614c74565b84614f74565b602080601f831160018114615018575f84156150015750858301515b5f19600386901b1c1916600185901b1785556112db565b5f85815260208120601f198616915b8281101561504657888601518255948401946001909101908401615027565b508582101561506357878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808201808211156110a1576110a1615073565b5f63ffffffff8083168181036150b2576150b2615073565b6001019392505050565b80820281158282048414176110a1576110a1615073565b5f808335601e198436030181126150e8575f80fd5b83016020810192503590506001600160401b03811115615106575f80fd5b803603821315613628575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156151f157848303601f19018952813536889003605e19018112615178575f80fd5b8701606061518682806150d3565b8287526151968388018284615114565b925050506151a6868301836150d3565b868303888801526151b8838284615114565b9250505060408083013592506151cd83614a73565b6001600160401b039290921694909101939093529783019790830190600101615153565b5090979650505050505050565b6020815281356020820152602082013560408201525f6040830135615222816149f8565b6001600160a01b031660608381019190915283013536849003601e19018112615249575f80fd5b83016020810190356001600160401b03811115615264575f80fd5b8060051b3603821315615275575f80fd5b6080808501526137bd60a08501828461513c565b5f826152a357634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106152bc576152bc614b14565b91905290565b5f805f606084860312156152d4575f80fd5b8351925060208401516152e681614a73565b6040850151909250614b0981614a73565b5f8060408385031215615308575f80fd5b82519150602083015161531a81614900565b809150509250929050565b5f60208083525f845461533781614c74565b806020870152604060018084165f81146153585760018114615374576153a1565b60ff19851660408a0152604084151560051b8a010195506153a1565b895f5260205f205f5b858110156153985781548b820186015290830190880161537d565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0381811683821601908082111561247157612471615073565b6001600160401b0382811682821603908082111561247157612471615073565b5f806040838503121561540f575f80fd5b82516001600160401b0380821115615425575f80fd5b9084019060608287031215615438575f80fd5b615440614cc8565b825181526020830151615452816149f8565b6020820152604083015182811115615468575f80fd5b61547488828601614d68565b604083015250809450505050602083015161531a81614900565b5f806040838503121561549f575f80fd5b82519150602083015161531a81614a73565b6001600160401b038181168382160280821691908281146154d4576154d4615073565b505092915050565b5f602082840312156154ec575f80fd5b6119ed82614aa2565b5f60208284031215615505575f80fd5b813560ff811681146119ed575f80fd5b818103818111156110a1576110a1615073565b5f8235603e19833603018112614e91575f80fd5b5f808335601e19843603018112615551575f80fd5b8301803591506001600160401b0382111561556a575f80fd5b602001915036819003821315613628575f80fd5b602081525f61235a602083018486615114565b5f604082360312156155a1575f80fd5b6155a9614cf0565b6155b28361490d565b81526020808401356001600160401b03808211156155ce575f80fd5b9085019036601f8301126155e0575f80fd5b8135818111156155f2576155f2614cb4565b8060051b9150615603848301614d12565b818152918301840191848101903684111561561c575f80fd5b938501935b838510156156465784359250615636836149f8565b8282529385019390850190615621565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156156b35784516001600160a01b0316825293830193600192909201919083019061568a565b509695505050505050565b60208152815160208201525f602083015160e060408401526156e4610100840182614b5e565b90506040840151601f19808584030160608601526157028383614b5e565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526157328383615658565b925060a08601519150808584030160c0860152506157508282615658565b91505060c084015161576d60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615786575f80fd5b8251915060208301516001600160401b038111156157a2575f80fd5b6157ae85828601614d68565b9150509250929050565b6001600160401b038311156157cf576157cf614cb4565b6157e3836157dd8354614c74565b83614f74565b5f601f841160018114615814575f85156157fd5750838201355b5f19600387901b1c1916600186901b1783556110b3565b5f83815260208120601f198716915b828110156158435786850135825560209485019460019092019101615823565b508682101561585f575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b038083168181036150b2576150b261507356fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a264697066735822122068592a51cd248b2c98772648849a6b8b15ff04656f5778088ac873e795ad631e64736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. @@ -930,6 +930,27 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) Fo return _NativeTokenStakingManager.Contract.ForceInitializeEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } +// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// +// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "forceInitializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// +// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitializeEndDelegation0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x37b9be8f. +// +// Solidity: function forceInitializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitializeEndDelegation0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + // ForceInitializeEndValidation is a paid mutator transaction binding the contract method 0x3a1cfff6. // // Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() @@ -951,6 +972,27 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) Fo return _NativeTokenStakingManager.Contract.ForceInitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } +// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// +// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ForceInitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "forceInitializeEndValidation0", validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// +// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitializeEndValidation0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// ForceInitializeEndValidation0 is a paid mutator transaction binding the contract method 0x7d8d2f77. +// +// Solidity: function forceInitializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ForceInitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ForceInitializeEndValidation0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + // Initialize is a paid mutator transaction binding the contract method 0x0ba512d1. // // Solidity: function initialize(((bytes32,uint64,uint8),uint256,uint256,uint64,uint16,uint8,uint256,address,bytes32) settings) returns() @@ -1014,25 +1056,67 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) In return _NativeTokenStakingManager.Contract.InitializeEndDelegation(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x76f78621. +// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// +// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndDelegation0(opts *bind.TransactOpts, delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndDelegation0", delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// +// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeEndDelegation0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndDelegation0 is a paid mutator transaction binding the contract method 0x9ae06447. +// +// Solidity: function initializeEndDelegation(bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndDelegation0(delegationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeEndDelegation0(&_NativeTokenStakingManager.TransactOpts, delegationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// +// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndValidation", validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// +// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation is a paid mutator transaction binding the contract method 0x5dd6a6cb. +// +// Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex, rewardRecipient) +} + +// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. // // Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndValidation(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndValidation", validationID, includeUptimeProof, messageIndex) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) InitializeEndValidation0(opts *bind.TransactOpts, validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "initializeEndValidation0", validationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x76f78621. +// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. // // Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeEndValidation0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } -// InitializeEndValidation is a paid mutator transaction binding the contract method 0x76f78621. +// InitializeEndValidation0 is a paid mutator transaction binding the contract method 0x76f78621. // // Solidity: function initializeEndValidation(bytes32 validationID, bool includeUptimeProof, uint32 messageIndex) returns() -func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndValidation(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { - return _NativeTokenStakingManager.Contract.InitializeEndValidation(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) InitializeEndValidation0(validationID [32]byte, includeUptimeProof bool, messageIndex uint32) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.InitializeEndValidation0(&_NativeTokenStakingManager.TransactOpts, validationID, includeUptimeProof, messageIndex) } // InitializeValidatorRegistration is a paid mutator transaction binding the contract method 0xaf2f5feb. diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index e50f814dc..f91ca5cd2 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -65,8 +65,10 @@ abstract contract PoSValidatorManager is mapping(bytes32 delegationID => Delegator) _delegatorStakes; /// @notice Maps the delegation ID to its pending staking rewards. mapping(bytes32 delegationID => uint256) _redeemableDelegatorRewards; + mapping(bytes32 delegationID => address) _delegatorRewardRecipients; /// @notice Maps the validation ID to its pending staking rewards. mapping(bytes32 validationID => uint256) _redeemableValidatorRewards; + mapping(bytes32 validationID => address) _rewardRecipients; } // solhint-enable private-vars-leading-underscore @@ -213,7 +215,36 @@ abstract contract PoSValidatorManager is bool includeUptimeProof, uint32 messageIndex ) external { - if (!_initializeEndPoSValidation(validationID, includeUptimeProof, messageIndex)) { + _initializeEndValidationWithCheck( + validationID, includeUptimeProof, messageIndex, address(0) + ); + } + + /** + * @notice See {IPoSValidatorManager-initializeEndValidation}. + */ + function initializeEndValidation( + bytes32 validationID, + bool includeUptimeProof, + uint32 messageIndex, + address rewardRecipient + ) external { + _initializeEndValidationWithCheck( + validationID, includeUptimeProof, messageIndex, rewardRecipient + ); + } + + function _initializeEndValidationWithCheck( + bytes32 validationID, + bool includeUptimeProof, + uint32 messageIndex, + address rewardRecipient + ) internal { + if ( + !_initializeEndPoSValidation( + validationID, includeUptimeProof, messageIndex, rewardRecipient + ) + ) { revert ValidatorIneligibleForRewards(validationID); } } @@ -227,7 +258,20 @@ abstract contract PoSValidatorManager is uint32 messageIndex ) external { // Ignore the return value here to force end validation, regardless of possible missed rewards - _initializeEndPoSValidation(validationID, includeUptimeProof, messageIndex); + _initializeEndPoSValidation(validationID, includeUptimeProof, messageIndex, address(0)); + } + + /** + * @notice See {IPoSValidatorManager-forceInitializeEndValidation}. + */ + function forceInitializeEndValidation( + bytes32 validationID, + bool includeUptimeProof, + uint32 messageIndex, + address rewardRecipient + ) external { + // Ignore the return value here to force end validation, regardless of possible missed rewards + _initializeEndPoSValidation(validationID, includeUptimeProof, messageIndex, rewardRecipient); } /** @@ -238,7 +282,8 @@ abstract contract PoSValidatorManager is function _initializeEndPoSValidation( bytes32 validationID, bool includeUptimeProof, - uint32 messageIndex + uint32 messageIndex, + address rewardRecipient ) internal returns (bool) { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); @@ -278,6 +323,11 @@ abstract contract PoSValidatorManager is uptimeSeconds: uptimeSeconds }); $._redeemableValidatorRewards[validationID] += reward; + + if (rewardRecipient != address(0)) { + $._rewardRecipients[validationID] = rewardRecipient; + } + return (reward > 0); } @@ -296,9 +346,18 @@ abstract contract PoSValidatorManager is } address owner = $._posValidatorInfo[validationID].owner; + + address rewardRecipient = $._rewardRecipients[validationID]; + + if (rewardRecipient == address(0)) { + rewardRecipient = owner; + } else { + delete $._rewardRecipients[validationID]; + } + // The validator can either be Completed or Invalidated here. We only grant rewards for Completed. if (validator.status == ValidatorStatus.Completed) { - _withdrawValidationRewards(owner, validationID); + _withdrawValidationRewards(rewardRecipient, validationID); } // The stake is unlocked whether the validation period is completed or invalidated. @@ -526,7 +585,34 @@ abstract contract PoSValidatorManager is bool includeUptimeProof, uint32 messageIndex ) external { - if (!_initializeEndDelegation(delegationID, includeUptimeProof, messageIndex)) { + _initializeEndDeleationWithCheck(delegationID, includeUptimeProof, messageIndex, address(0)); + } + + /** + * @notice See {IPoSValidatorManager-initializeEndDelegation}. + */ + function initializeEndDelegation( + bytes32 delegationID, + bool includeUptimeProof, + uint32 messageIndex, + address rewardRecipient + ) external { + _initializeEndDeleationWithCheck( + delegationID, includeUptimeProof, messageIndex, rewardRecipient + ); + } + + function _initializeEndDeleationWithCheck( + bytes32 delegationID, + bool includeUptimeProof, + uint32 messageIndex, + address rewardRecipient + ) internal { + if ( + !_initializeEndDelegation( + delegationID, includeUptimeProof, messageIndex, rewardRecipient + ) + ) { revert DelegatorIneligibleForRewards(delegationID); } } @@ -540,7 +626,20 @@ abstract contract PoSValidatorManager is uint32 messageIndex ) external { // Ignore the return value here to force end delegation, regardless of possible missed rewards - _initializeEndDelegation(delegationID, includeUptimeProof, messageIndex); + _initializeEndDelegation(delegationID, includeUptimeProof, messageIndex, address(0)); + } + + /** + * @notice See {IPoSValidatorManager-forceInitializeEndDelegation}. + */ + function forceInitializeEndDelegation( + bytes32 delegationID, + bool includeUptimeProof, + uint32 messageIndex, + address rewardRecipient + ) external { + // Ignore the return value here to force end delegation, regardless of possible missed rewards + _initializeEndDelegation(delegationID, includeUptimeProof, messageIndex, rewardRecipient); } /** @@ -551,7 +650,8 @@ abstract contract PoSValidatorManager is function _initializeEndDelegation( bytes32 delegationID, bool includeUptimeProof, - uint32 messageIndex + uint32 messageIndex, + address rewardRecipient ) internal returns (bool) { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); @@ -600,6 +700,9 @@ abstract contract PoSValidatorManager is uint256 reward = _calculateDelegationReward(delegator); $._redeemableDelegatorRewards[delegationID] = reward; + if (rewardRecipient != address(0)) { + $._delegatorRewardRecipients[delegationID] = rewardRecipient; + } emit DelegatorRemovalInitialized({ delegationID: delegationID, @@ -608,6 +711,9 @@ abstract contract PoSValidatorManager is return (reward > 0); } else if (validator.status == ValidatorStatus.Completed) { $._redeemableDelegatorRewards[delegationID] = _calculateDelegationReward(delegator); + if (rewardRecipient != address(0)) { + $._delegatorRewardRecipients[delegationID] = rewardRecipient; + } _completeEndDelegation(delegationID); // If the validator has completed, then no further uptimes may be submitted, so we always @@ -736,7 +842,13 @@ abstract contract PoSValidatorManager is // Once this function completes, the delegation is completed so we can clear it from state now. delete $._delegatorStakes[delegationID]; - address rewardRecipient = delegator.owner; + address rewardRecipient = $._delegatorRewardRecipients[delegationID]; + + if (rewardRecipient == address(0)) { + rewardRecipient = delegator.owner; + } else { + delete $._delegatorRewardRecipients[delegationID]; + } (uint256 delegationRewards, uint256 validatorFees) = _withdrawDelegationRewards(rewardRecipient, delegationID, validationID); diff --git a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol index d5b4944a1..2e478df8f 100644 --- a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol @@ -151,6 +151,17 @@ interface IPoSValidatorManager is IValidatorManager { uint32 messageIndex ) external; + /** + * @notice See {IPoSValidatorManager-initializeEndValidation} for details of the first three parameters + * @param recipientAddress The address to receive the rewards + */ + function initializeEndValidation( + bytes32 validationID, + bool includeUptimeProof, + uint32 messageIndex, + address recipientAddress + ) external; + /** * @notice Begins the process of ending an active validation period, but does not revert if the latest known uptime * is not sufficient to collect uptime-based rewards. This function is used to exit the validator set when rewards are diff --git a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol index fd6e8ba51..114244c93 100644 --- a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol @@ -61,10 +61,26 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { return app.initializeEndValidation(validationID); } + function _initializeEndValidation( + bytes32 validationID, + bool, + address + ) internal virtual override { + return app.initializeEndValidation(validationID); + } + function _forceInitializeEndValidation(bytes32 validationID, bool) internal virtual override { return app.initializeEndValidation(validationID); } + function _forceInitializeEndValidation( + bytes32 validationID, + bool, + address + ) internal virtual override { + return app.initializeEndValidation(validationID); + } + function _setUp() internal override returns (IValidatorManager) { app = new PoAValidatorManager(ICMInitializable.Allowed); app.initialize( diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index 9fc381723..211507760 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -386,7 +386,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); } @@ -403,7 +404,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); } @@ -422,7 +424,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { delegationID: delegationID, endDelegationTimestamp: invalidEndTime, includeUptime: false, - force: false + force: false, + rewardRecipient: address(0) }); } @@ -442,7 +445,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { delegationID: delegationID, endDelegationTimestamp: invalidEndTime, includeUptime: false, - force: false + force: false, + rewardRecipient: address(0) }); } @@ -466,7 +470,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { completeRegistrationTimestamp: DEFAULT_REGISTRATION_TIMESTAMP, completionTimestamp: delegatorRegistrationTime + 1, validatorWeight: DEFAULT_WEIGHT, - expectedNonce: 2 + expectedNonce: 2, + rewardRecipient: address(0) }); uint64 invalidEndTime = delegatorRegistrationTime + DEFAULT_CHURN_PERIOD - 1; @@ -483,7 +488,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { delegationID: delegationID, endDelegationTimestamp: invalidEndTime, includeUptime: false, - force: false + force: false, + rewardRecipient: address(0) }); } @@ -514,7 +520,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: true + force: true, + rewardRecipient: address(0) }); } @@ -531,7 +538,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: false, - force: true + force: true, + rewardRecipient: address(0) }); } @@ -548,7 +556,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); bytes memory setValidatorWeightPayload = ValidatorMessages.packL1ValidatorWeightMessage(validationID, 2, DEFAULT_WEIGHT); @@ -591,7 +600,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); uint256 expectedTotalReward = rewardCalculator.calculateReward({ @@ -602,16 +612,65 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uptimeSeconds: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP }); + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + _completeEndDelegationWithChecks({ validationID: validationID, delegationID: delegationID, delegator: DEFAULT_DELEGATOR_ADDRESS, delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, - expectedTotalReward: expectedTotalReward, - delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, validatorWeight: DEFAULT_WEIGHT, expectedValidatorWeight: DEFAULT_WEIGHT, - expectedNonce: 2 + expectedNonce: 2, + rewardRecipient: address(0) + }); + } + + function testCompleteEndDelegationWithNonDelegatorRewardRecipient() public { + bytes32 validationID = _registerDefaultValidator(); + bytes32 delegationID = _registerDefaultDelegator(validationID); + address rewardRecipient = address(42); + + _initializeEndDelegationValidatorActiveWithChecks({ + validationID: validationID, + sender: DEFAULT_DELEGATOR_ADDRESS, + delegationID: delegationID, + startDelegationTimestamp: DEFAULT_DELEGATOR_INIT_REGISTRATION_TIMESTAMP, + endDelegationTimestamp: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + includeUptime: true, + force: false, + rewardRecipient: rewardRecipient + }); + + uint256 expectedTotalReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_DELEGATOR_WEIGHT), + validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingStartTime: DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP, + stakingEndTime: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + uptimeSeconds: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + }); + + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + + _completeEndDelegationWithChecks({ + validationID: validationID, + delegationID: delegationID, + delegator: DEFAULT_DELEGATOR_ADDRESS, + delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, + validatorWeight: DEFAULT_WEIGHT, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + rewardRecipient: rewardRecipient }); } @@ -726,7 +785,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); uint64 validationEndTime = DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP + 1; @@ -752,16 +812,21 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uptimeSeconds: validationEndTime - DEFAULT_REGISTRATION_TIMESTAMP }); + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + _completeEndDelegationWithChecks({ validationID: validationID, delegationID: delegationID, delegator: DEFAULT_DELEGATOR_ADDRESS, delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, - expectedTotalReward: expectedTotalReward, - delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, validatorWeight: DEFAULT_WEIGHT, expectedValidatorWeight: 0, - expectedNonce: 2 + expectedNonce: 2, + rewardRecipient: address(0) }); } @@ -860,7 +925,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); _endDefaultValidator(validationID, 3); @@ -928,7 +994,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_DELEGATOR_WEIGHT + DEFAULT_WEIGHT, expectedNonce: 3, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); _initializeEndDelegationValidatorActiveWithChecks({ validationID: validationID, @@ -939,7 +1006,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 4, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); // Complete ending delegator2 with delegator1's nonce @@ -990,7 +1058,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_DELEGATOR_WEIGHT + DEFAULT_WEIGHT, expectedNonce: 3, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); _initializeEndDelegationValidatorActiveWithChecks({ validationID: validationID, @@ -1001,7 +1070,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 4, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); uint256 expectedTotalReward = rewardCalculator.calculateReward({ @@ -1012,17 +1082,22 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uptimeSeconds: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP }); + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + // Complete delegation1 by delivering the weight update from nonce 4 (delegator2's nonce) _completeEndDelegationWithChecks({ validationID: validationID, delegationID: delegationID1, delegator: DEFAULT_DELEGATOR_ADDRESS, delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, - expectedTotalReward: expectedTotalReward, - delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, validatorWeight: DEFAULT_WEIGHT, expectedValidatorWeight: DEFAULT_WEIGHT, - expectedNonce: 4 + expectedNonce: 4, + rewardRecipient: address(0) }); } @@ -1054,7 +1129,44 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID: validationID, validatorOwner: address(this), expectedReward: expectedReward, - validatorWeight: DEFAULT_WEIGHT + validatorWeight: DEFAULT_WEIGHT, + rewardRecipient: address(0) + }); + } + + function testCompleteEndValidationWithNonValidatorRewardRecipient() public virtual { + bytes32 validationID = _registerDefaultValidator(); + bytes memory setWeightMessage = + ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); + bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( + validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + ); + address rewardRecipient = address(42); + + _initializeEndValidation({ + validationID: validationID, + completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, + setWeightMessage: setWeightMessage, + includeUptime: true, + uptimeMessage: uptimeMessage, + force: false, + recipientAddress: rewardRecipient + }); + + uint256 expectedReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_WEIGHT), + validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingEndTime: DEFAULT_COMPLETION_TIMESTAMP, + uptimeSeconds: DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + }); + + _completeEndValidationWithChecks({ + validationID: validationID, + validatorOwner: address(this), + expectedReward: expectedReward, + validatorWeight: DEFAULT_WEIGHT, + rewardRecipient: rewardRecipient }); } @@ -1248,6 +1360,16 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { posValidatorManager.initializeEndValidation(validationID, includeUptime, 0); } + function _initializeEndValidation( + bytes32 validationID, + bool includeUptime, + address recipientAddress + ) internal virtual override { + posValidatorManager.initializeEndValidation( + validationID, includeUptime, 0, recipientAddress + ); + } + function _forceInitializeEndValidation( bytes32 validationID, bool includeUptime @@ -1255,6 +1377,16 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { posValidatorManager.forceInitializeEndValidation(validationID, includeUptime, 0); } + function _forceInitializeEndValidation( + bytes32 validationID, + bool includeUptime, + address recipientAddress + ) internal virtual override { + posValidatorManager.forceInitializeEndValidation( + validationID, includeUptime, 0, recipientAddress + ); + } + function _initializeDelegatorRegistration( bytes32 validationID, address delegatorAddress, @@ -1405,7 +1537,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint64 expectedValidatorWeight, uint64 expectedNonce, bool includeUptime, - bool force + bool force, + address rewardRecipient ) internal { bytes memory setValidatorWeightPayload = ValidatorMessages.packL1ValidatorWeightMessage( validationID, expectedNonce, expectedValidatorWeight @@ -1431,7 +1564,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { includeUptime: includeUptime, force: force, setValidatorWeightPayload: setValidatorWeightPayload, - uptimePayload: uptimeMsg + uptimePayload: uptimeMsg, + rewardRecipient: rewardRecipient }); } @@ -1442,14 +1576,22 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bool includeUptime, bool force, bytes memory setValidatorWeightPayload, - bytes memory uptimePayload + bytes memory uptimePayload, + address rewardRecipient ) internal { _mockSendWarpMessage(setValidatorWeightPayload, bytes32(0)); if (includeUptime) { _mockGetUptimeWarpMessage(uptimePayload, true); } - _initializeEndDelegation(sender, delegationID, endDelegationTimestamp, includeUptime, force); + _initializeEndDelegation({ + sender: sender, + delegationID: delegationID, + endDelegationTimestamp: endDelegationTimestamp, + includeUptime: includeUptime, + force: force, + rewardRecipient: rewardRecipient + }); } function _initializeEndDelegation( @@ -1457,14 +1599,19 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 delegationID, uint64 endDelegationTimestamp, bool includeUptime, - bool force + bool force, + address rewardRecipient ) internal { vm.warp(endDelegationTimestamp); vm.prank(sender); if (force) { - posValidatorManager.forceInitializeEndDelegation(delegationID, includeUptime, 0); + posValidatorManager.forceInitializeEndDelegation( + delegationID, includeUptime, 0, rewardRecipient + ); } else { - posValidatorManager.initializeEndDelegation(delegationID, includeUptime, 0); + posValidatorManager.initializeEndDelegation( + delegationID, includeUptime, 0, rewardRecipient + ); } } @@ -1475,7 +1622,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { completeRegistrationTimestamp: DEFAULT_REGISTRATION_TIMESTAMP, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, validatorWeight: DEFAULT_WEIGHT, - expectedNonce: expectedNonce + expectedNonce: expectedNonce, + rewardRecipient: address(0) }); } @@ -1485,7 +1633,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint64 completeRegistrationTimestamp, uint64 completionTimestamp, uint64 validatorWeight, - uint64 expectedNonce + uint64 expectedNonce, + address rewardRecipient ) internal { bytes memory setWeightMessage = ValidatorMessages.packL1ValidatorWeightMessage(validationID, expectedNonce, 0); @@ -1513,7 +1662,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID: validationID, validatorOwner: validatorOwner, expectedReward: expectedReward, - validatorWeight: validatorWeight + validatorWeight: validatorWeight, + rewardRecipient: rewardRecipient }); } @@ -1521,7 +1671,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 validationID, address validatorOwner, uint256 expectedReward, - uint64 validatorWeight + uint64 validatorWeight, + address rewardRecipient ) internal { bytes memory subnetValidatorRegistrationMessage = ValidatorMessages.packL1ValidatorRegistrationMessage(validationID, false); @@ -1529,21 +1680,38 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { vm.expectEmit(true, true, true, true, address(posValidatorManager)); emit ValidationPeriodEnded(validationID, ValidatorStatus.Completed); uint256 balanceBefore = _getStakeAssetBalance(validatorOwner); + uint256 rewardRecipientBalanceBefore = _getStakeAssetBalance(rewardRecipient); _expectStakeUnlock(validatorOwner, _weightToValue(validatorWeight)); - _expectRewardIssuance(validatorOwner, expectedReward); + + if (rewardRecipient != address(0)) { + _expectRewardIssuance(rewardRecipient, expectedReward); + } else { + _expectRewardIssuance(validatorOwner, expectedReward); + } _completeEndValidation(subnetValidatorRegistrationMessage); - assertEq( - _getStakeAssetBalance(validatorOwner), - balanceBefore + _weightToValue(validatorWeight) + expectedReward - ); + if (rewardRecipient == address(0)) { + assertEq( + _getStakeAssetBalance(validatorOwner), + balanceBefore + _weightToValue(validatorWeight) + expectedReward + ); + } else { + assertEq( + _getStakeAssetBalance(validatorOwner), + balanceBefore + _weightToValue(validatorWeight) + ); + + assertEq( + _getStakeAssetBalance(rewardRecipient), + rewardRecipientBalanceBefore + expectedReward + ); + } } function _completeEndValidation(bytes memory subnetValidatorRegistrationMessage) internal { _mockGetPChainWarpMessage(subnetValidatorRegistrationMessage, true); - posValidatorManager.completeEndValidation(0); } @@ -1552,14 +1720,13 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { bytes32 delegationID, address delegator, uint64 delegatorWeight, - uint256 expectedTotalReward, - uint64 delegationFeeBips, + uint256 expectedValidatorFees, + uint256 expectedDelegatorReward, uint64 validatorWeight, uint64 expectedValidatorWeight, - uint64 expectedNonce + uint64 expectedNonce, + address rewardRecipient ) internal { - uint256 expectedValidatorFees = expectedTotalReward * delegationFeeBips / 10000; - uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; bytes memory weightUpdateMessage = ValidatorMessages.packL1ValidatorWeightMessage( validationID, expectedNonce, validatorWeight ); @@ -1569,17 +1736,35 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { delegationID, validationID, expectedDelegatorReward, expectedValidatorFees ); uint256 balanceBefore = _getStakeAssetBalance(delegator); + uint256 rewardRecipientBalanceBefore = _getStakeAssetBalance(rewardRecipient); _expectStakeUnlock(delegator, _weightToValue(delegatorWeight)); - _expectRewardIssuance(delegator, expectedDelegatorReward); + + if (rewardRecipient != address(0)) { + _expectRewardIssuance(rewardRecipient, expectedDelegatorReward); + } else { + _expectRewardIssuance(delegator, expectedDelegatorReward); + } _completeEndDelegation(delegationID, weightUpdateMessage); assertEq(posValidatorManager.getWeight(validationID), expectedValidatorWeight); - assertEq( - _getStakeAssetBalance(delegator), - balanceBefore + _weightToValue(delegatorWeight) + expectedDelegatorReward - ); + + if (rewardRecipient == address(0)) { + assertEq( + _getStakeAssetBalance(delegator), + balanceBefore + _weightToValue(delegatorWeight) + expectedDelegatorReward + ); + } else { + assertEq( + _getStakeAssetBalance(delegator), balanceBefore + _weightToValue(delegatorWeight) + ); + + assertEq( + _getStakeAssetBalance(rewardRecipient), + rewardRecipientBalanceBefore + expectedDelegatorReward + ); + } } function _completeEndDelegation( @@ -1603,7 +1788,8 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, includeUptime: true, - force: false + force: false, + rewardRecipient: address(0) }); uint256 expectedTotalReward = rewardCalculator.calculateReward({ @@ -1614,20 +1800,32 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uptimeSeconds: 0 }); + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + _completeEndDelegationWithChecks({ validationID: validationID, delegationID: delegationID, delegator: DEFAULT_DELEGATOR_ADDRESS, delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, - expectedTotalReward: expectedTotalReward, - delegationFeeBips: DEFAULT_DELEGATION_FEE_BIPS, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, validatorWeight: DEFAULT_WEIGHT, expectedValidatorWeight: DEFAULT_WEIGHT, - expectedNonce: 2 + expectedNonce: 2, + rewardRecipient: address(0) }); } function _getStakeAssetBalance(address account) internal virtual returns (uint256); function _expectStakeUnlock(address account, uint256 amount) internal virtual; function _expectRewardIssuance(address account, uint256 amount) internal virtual; + + function _calculateValidatorFeesFromDelegator( + uint256 totalReward, + uint64 delegationFeeBips + ) internal pure returns (uint256) { + return totalReward * delegationFeeBips / 10000; + } } diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol index 1f4f49963..dc4fe8f64 100644 --- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol @@ -497,6 +497,28 @@ abstract contract ValidatorManagerTest is Test { } } + function _initializeEndValidation( + bytes32 validationID, + uint64 completionTimestamp, + bytes memory setWeightMessage, + bool includeUptime, + bytes memory uptimeMessage, + bool force, + address recipientAddress + ) internal { + _mockSendWarpMessage(setWeightMessage, bytes32(0)); + if (includeUptime) { + _mockGetUptimeWarpMessage(uptimeMessage, true); + } + + vm.warp(completionTimestamp); + if (force) { + _forceInitializeEndValidation(validationID, includeUptime, recipientAddress); + } else { + _initializeEndValidation(validationID, includeUptime, recipientAddress); + } + } + function _registerDefaultValidator() internal returns (bytes32 validationID) { return _registerValidator({ nodeID: DEFAULT_NODE_ID, @@ -583,11 +605,23 @@ abstract contract ValidatorManagerTest is Test { function _initializeEndValidation(bytes32 validationID, bool includeUptime) internal virtual; + function _initializeEndValidation( + bytes32 validationID, + bool includeUptime, + address rewardRecipient + ) internal virtual; + function _forceInitializeEndValidation( bytes32 validationID, bool includeUptime ) internal virtual; + function _forceInitializeEndValidation( + bytes32 validationID, + bool includeUptime, + address rewardRecipient + ) internal virtual; + function _setUp() internal virtual returns (IValidatorManager); function _beforeSend(uint256 amount, address spender) internal virtual; diff --git a/tests/utils/validator_manager.go b/tests/utils/validator_manager.go index 754f6a367..23a99bcb4 100644 --- a/tests/utils/validator_manager.go +++ b/tests/utils/validator_manager.go @@ -1059,7 +1059,7 @@ func InitializeEndNativeValidation( ) *types.Receipt { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID) Expect(err).Should(BeNil()) - tx, err := stakingManager.InitializeEndValidation( + tx, err := stakingManager.InitializeEndValidation0( opts, validationID, false, @@ -1161,7 +1161,7 @@ func InitializeEndERC20Validation( ) *types.Receipt { opts, err := bind.NewKeyedTransactorWithChainID(senderKey, subnet.EVMChainID) Expect(err).Should(BeNil()) - tx, err := stakingManager.InitializeEndValidation( + tx, err := stakingManager.InitializeEndValidation0( opts, validationID, false, From 906be91dbe97839899414321e9ecb00feeae494c Mon Sep 17 00:00:00 2001 From: Richard Pringle Date: Mon, 18 Nov 2024 15:06:36 -0500 Subject: [PATCH 02/10] Add change-reward-recipient functionality --- .../ERC20TokenStakingManager.go | 46 +++++++++- .../NativeTokenStakingManager.go | 46 +++++++++- .../validator-manager/PoSValidatorManager.sol | 43 +++++++++ .../tests/PoSValidatorManagerTests.t.sol | 87 +++++++++++++++++++ 4 files changed, 218 insertions(+), 4 deletions(-) diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index 150e8ce99..9aca93bfb 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -103,8 +103,8 @@ type ValidatorRegistrationInput 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\":\"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\":[{\"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\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"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\":\"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\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"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\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"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\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"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\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"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\":\"DelegatorAdded\",\"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\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"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\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndValidation\",\"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\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"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\":\"structPoSValidatorManagerSettings\",\"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\":\"initializeDelegatorRegistration\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndValidation\",\"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\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"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\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"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\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"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: "0x608060405234801561000f575f80fd5b50604051615d28380380615d2883398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615bdb8061014d5f395ff3fe608060405234801561000f575f80fd5b5060043610610229575f3560e01c80637d8d2f771161012a578063afb98096116100b4578063c974d1b611610079578063c974d1b6146104e5578063d5f20ff6146104ed578063df93d8de1461050d578063e4a63c4014610517578063fd7ac5e71461052b575f80fd5b8063afb980961461045e578063b771b3bc14610485578063ba3a4b97146104ab578063bc5fbfec146104be578063bee0a03f146104d2575f80fd5b80639ae06447116100fa5780639ae06447146104125780639e1bc4ef146104255780639e478eea14610438578063a3a65e481461044b578063a9778a7a146102d8575f80fd5b80637d8d2f77146103d157806380dd672f146103e45780638280a25a146103f757806393e24598146103ff575f80fd5b80633a1cfff6116101b657806360ad77841161017b57806360ad77841461037e578063620658561461039157806366435abf146103a4578063732214f8146103b757806376f78621146103be575f80fd5b80633a1cfff614610307578063467ef06f1461031a5780634bee00401461032d5780635dd6a6cb1461034e57806360305d6214610361575f80fd5b806320d91b7a116101fc57806320d91b7a1461028757806325e1c7761461029a5780632e2194d8146102ad57806335455ded146102d857806337b9be8f146102f4575f80fd5b80630118acc41461022d5780630322ed9814610242578063151d30d1146102555780631ec4472414610274575b5f80fd5b61024061023b366004614b4b565b61053e565b005b610240610250366004614b86565b61054f565b61025d600a81565b60405160ff90911681526020015b60405180910390f35b610240610282366004614b4b565b6107df565b610240610295366004614b9d565b6107eb565b6102406102a8366004614beb565b610d70565b6102c06102bb366004614b86565b610de4565b6040516001600160401b03909116815260200161026b565b6102e161271081565b60405161ffff909116815260200161026b565b610240610302366004614c20565b610e38565b610240610315366004614b4b565b610e4b565b610240610328366004614c6e565b610e57565b61034061033b366004614cac565b610f3c565b60405190815260200161026b565b61024061035c366004614c20565b610f71565b610369601481565b60405163ffffffff909116815260200161026b565b61024061038c366004614beb565b610f7d565b61034061039f366004614d13565b61124a565b6102c06103b2366004614b86565b61126a565b6103405f81565b6102406103cc366004614b4b565b61127e565b6102406103df366004614c20565b61128a565b6102406103f2366004614beb565b611296565b61025d603081565b61024061040d366004614b86565b6114d0565b610240610420366004614c20565b611585565b610340610433366004614d2e565b611591565b610240610446366004614d4e565b6115bd565b610240610459366004614c6e565b61169c565b6103407f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104936005600160991b0181565b6040516001600160a01b03909116815260200161026b565b6102406104b9366004614b86565b611891565b6103405f80516020615b4683398151915281565b6102406104e0366004614b86565b611aea565b61025d601481565b6105006104fb366004614b86565b611c27565b60405161026b9190614e01565b6102c06202a30081565b6103405f80516020615b2683398151915281565b610340610539366004614e81565b611d76565b61054a8383835f611dd1565b505050565b5f8181525f80516020615b868339815191526020526040808220815160e0810190925280545f80516020615b4683398151915293929190829060ff16600581111561059c5761059c614d8c565b60058111156105ad576105ad614d8c565b81526020016001820180546105c190614eec565b80601f01602080910402602001604051908101604052809291908181526020018280546105ed90614eec565b80156106385780601f1061060f57610100808354040283529160200191610638565b820191905f5260205f20905b81548152906001019060200180831161061b57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156106a3576106a3614d8c565b146106df575f8381526007830160205260409081902054905163170cc93360e21b81526106d69160ff1690600401614f24565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610756573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261077d919081019061502d565b6040518263ffffffff1660e01b8152600401610799919061505e565b6020604051808303815f875af11580156107b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107d99190615070565b50505050565b6107d98383835f611dfd565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615b468339815191529060ff161561083d57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610880573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108a49190615070565b8360200135146108cd576040516372b0a7e760e11b8152602084013560048201526024016106d6565b306108de6060850160408601615087565b6001600160a01b031614610921576108fc6060840160408501615087565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016106d6565b5f61092f60608501856150a2565b905090505f805b828163ffffffff161015610b96575f61095260608801886150a2565b8363ffffffff16818110610968576109686150e7565b905060200281019061097a91906150fb565b61098390615166565b80516040519192505f91600888019161099b916151e1565b908152602001604051809103902054146109cb57805160405163a41f772f60e01b81526106d6919060040161505e565b5f6002885f0135846040516020016109fa92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a14916151e1565b602060405180830381855afa158015610a2f573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a529190615070565b90508086600801835f0151604051610a6a91906151e1565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610aaa9082615236565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610b299085615305565b8251604051919550610b3a916151e1565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610b8f90615318565b9050610936565b50600483018190556001830154606490610bba90600160401b900460ff168361533a565b1015610bdc57604051635943317f60e01b8152600481018290526024016106d6565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c00876121b5565b604001516040518263ffffffff1660e01b8152600401610c20919061505e565b602060405180830381865af4158015610c3b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c5f9190615070565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610c99919061547c565b5f60405180830381865af4158015610cb3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610cda919081019061502d565b90505f600282604051610ced91906151e1565b602060405180830381855afa158015610d08573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d2b9190615070565b9050828114610d575760405163baaea89d60e01b815260048101829052602481018490526044016106d6565b5050506009909201805460ff1916600117905550505050565b610d79826122cb565b610d99576040516330efa98b60e01b8152600481018390526024016106d6565b5f610da383611c27565b5190506002816005811115610dba57610dba614d8c565b14610dda578060405163170cc93360e21b81526004016106d69190614f24565b6107d983836122f4565b5f80610dee612593565b60030154610dfc9084615507565b9050801580610e1157506001600160401b0381115b15610e325760405163222d164360e21b8152600481018490526024016106d6565b92915050565b610e4484848484611dfd565b5050505050565b6107d98383835f6125b7565b610e5f6127d9565b5f610e68612593565b90505f80610e7584612810565b91509150610e82826122cb565b610e8e57505050610f23565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b03918216911680610ec5575080610ee3565b5f848152600b86016020526040902080546001600160a01b03191690555b600483516005811115610ef857610ef8614d8c565b03610f0757610f078185612bc3565b610f1d82610f18856040015161124a565b612bed565b50505050505b610f3960015f80516020615b6683398151915255565b50565b5f610f456127d9565b610f5185858585612c23565b9050610f6960015f80516020615b6683398151915255565b949350505050565b6107d984848484612d88565b5f610f86612593565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610fbf57610fbf614d8c565b6003811115610fd057610fd0614d8c565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61104682611c27565b905060018351600381111561105d5761105d614d8c565b1461107e578251604051633b0d540d60e21b81526106d69190600401615526565b60048151600581111561109357611093614d8c565b036110a9576110a186612db4565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f6110ce896121b5565b604001516040518263ffffffff1660e01b81526004016110ee919061505e565b606060405180830381865af4158015611109573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061112d9190615540565b509150915081841461115a57846040015160405163089938b360e11b81526004016106d691815260200190565b806001600160401b031683606001516001600160401b031610806111935750806001600160401b03168560a001516001600160401b0316115b156111bc57604051632e19bc2d60e11b81526001600160401b03821660048201526024016106d6565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f611253612593565b60030154610e32906001600160401b03841661533a565b5f61127482611c27565b6080015192915050565b61054a8383835f612d88565b610e44848484846125b7565b61129e6127d9565b5f6112a7612593565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156112e0576112e0614d8c565b60038111156112f1576112f1614d8c565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152905060038151600381111561136a5761136a614d8c565b1461138b578051604051633b0d540d60e21b81526106d69190600401615526565b600461139a8260400151611c27565b5160058111156113ac576113ac614d8c565b146114ab575f6113bb846121b5565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016113fa919061505e565b606060405180830381865af4158015611415573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114399190615540565b5091509150818460400151146114655760405163089938b360e11b8152600481018390526024016106d6565b806001600160401b03168460c001516001600160401b031611156114a757604051632e19bc2d60e11b81526001600160401b03821660048201526024016106d6565b5050505b6114b484612db4565b50506114cc60015f80516020615b6683398151915255565b5050565b5f6114d9612593565b90505f6114e583611c27565b51905060048160058111156114fc576114fc614d8c565b1461151c578060405163170cc93360e21b81526004016106d69190614f24565b5f8381526006830160205260409020546001600160a01b0316331461156257335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016106d6565b5f83815260068301602052604090205461054a906001600160a01b031684612bc3565b6107d984848484611dd1565b5f61159a6127d9565b6115a5833384612fc1565b9050610e3260015f80516020615b6683398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611606575080546001600160401b03808416911610155b156116245760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561164f8484613206565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615b468339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6116cf866121b5565b604001516040518263ffffffff1660e01b81526004016116ef919061505e565b6040805180830381865af4158015611709573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061172d9190615580565b915091508061175357604051632d07135360e01b815281151560048201526024016106d6565b5f8281526006840160205260409020805461176d90614eec565b90505f036117915760405163089938b360e11b8152600481018390526024016106d6565b60015f83815260078501602052604090205460ff1660058111156117b7576117b7614d8c565b146117ea575f8281526007840160205260409081902054905163170cc93360e21b81526106d69160ff1690600401614f24565b5f828152600684016020526040812061180291614a9a565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f61189a612593565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156118d3576118d3614d8c565b60038111156118e4576118e4614d8c565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529091508151600381111561195d5761195d614d8c565b1415801561197e575060038151600381111561197b5761197b614d8c565b14155b1561199f578051604051633b0d540d60e21b81526106d69190600401615526565b5f6119ad8260400151611c27565b905080606001516001600160401b03165f036119df576040516339b894f960e21b8152600481018590526024016106d6565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611a4d93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611a67573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a8e919081019061502d565b6040518263ffffffff1660e01b8152600401611aaa919061505e565b6020604051808303815f875af1158015611ac6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e449190615070565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615b468339815191529190611b3190614eec565b90505f03611b555760405163089938b360e11b8152600481018390526024016106d6565b60015f83815260078301602052604090205460ff166005811115611b7b57611b7b614d8c565b14611bae575f8281526007820160205260409081902054905163170cc93360e21b81526106d69160ff1690600401614f24565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611be791906004016155a3565b6020604051808303815f875af1158015611c03573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061054a9190615070565b611c2f614ad1565b5f8281525f80516020615b86833981519152602052604090819020815160e0810190925280545f80516020615b46833981519152929190829060ff166005811115611c7c57611c7c614d8c565b6005811115611c8d57611c8d614d8c565b8152602001600182018054611ca190614eec565b80601f0160208091040260200160405190810160405280929190818152602001828054611ccd90614eec565b8015611d185780601f10611cef57610100808354040283529160200191611d18565b820191905f5260205f20905b815481529060010190602001808311611cfb57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f80516020615b46833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611db9908690869061562d565b90815260200160405180910390205491505092915050565b611ddd84848484611dfd565b6107d957604051631036cf9160e11b8152600481018590526024016106d6565b5f80611e07612593565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611e4057611e40614d8c565b6003811115611e5157611e51614d8c565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611ec782611c27565b9050600283516003811115611ede57611ede614d8c565b14611eff578251604051633b0d540d60e21b81526106d69190600401615526565b60208301516001600160a01b03163314611f9b575f8281526006850160205260409020546001600160a01b03163314611f38573361153d565b5f82815260068501602052604090205460a0820151611f6791600160b01b90046001600160401b03169061563c565b6001600160401b0316421015611f9b5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016106d6565b600281516005811115611fb057611fb0614d8c565b036121185760028401546080840151611fd2916001600160401b03169061563c565b6001600160401b03164210156120065760405163fb6ce63f60e01b81526001600160401b03421660048201526024016106d6565b87156120185761201682886122f4565b505b5f8981526007850160205260409020805460ff191660031790556060830151608082015161205191849161204c919061565c565b613220565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155612092846133f7565b5f8b8152600887016020526040902081905590506001600160a01b038716156120de575f8a8152600986016020526040902080546001600160a01b0319166001600160a01b0389161790555b60405183908b907f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57905f90a315159450610f699350505050565b60048151600581111561212d5761212d614d8c565b036121995761213b836133f7565b5f8a81526008860160205260409020556001600160a01b03861615612183575f898152600985016020526040902080546001600160a01b0319166001600160a01b0388161790555b61218c89612db4565b6001945050505050610f69565b805160405163170cc93360e21b81526106d69190600401614f24565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612219573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612240919081019061567c565b915091508061226257604051636b2f19e960e01b815260040160405180910390fd5b815115612288578151604051636ba589a560e01b815260048101919091526024016106d6565b60208201516001600160a01b0316156122c4576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016106d6565b5092915050565b5f806122d5612593565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa15801561233f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612366919081019061567c565b915091508061238857604051636b2f19e960e01b815260040160405180910390fd5b5f612391612593565b60058101548451919250146123bf578251604051636ba589a560e01b815260048101919091526024016106d6565b60208301516001600160a01b0316156123fb576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016106d6565b60208301516001600160a01b031615612437576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016106d6565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b8152600401612474919061505e565b6040805180830381865af415801561248e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124b2919061570c565b915091508188146124d95760405163089938b360e11b8152600481018990526024016106d6565b5f8881526006840160205260409020600101546001600160401b03908116908216111561256a575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612588565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806125c1612593565b90505f6125cd8761358e565b90506125d8876122cb565b6125e757600192505050610f69565b5f8781526006830160205260409020546001600160a01b0316331461260c573361153d565b5f87815260068301602052604090205460a082015161263b91600160b01b90046001600160401b03169061563c565b6001600160401b03168160c001516001600160401b031610156126825760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016106d6565b5f861561269a5761269388876122f4565b90506126b8565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906126dd9061124a565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612746573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061276a9190615070565b90508084600a015f8b81526020019081526020015f205f82825461278e9190615305565b90915550506001600160a01b038616156127cb575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615b6683398151915280546001190161280a57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612819614ad1565b5f80516020615b468339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61284c886121b5565b604001516040518263ffffffff1660e01b815260040161286c919061505e565b6040805180830381865af4158015612886573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128aa9190615580565b9150915080156128d157604051632d07135360e01b815281151560048201526024016106d6565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561290257612902614d8c565b600581111561291357612913614d8c565b815260200160018201805461292790614eec565b80601f016020809104026020016040519081016040528092919081815260200182805461295390614eec565b801561299e5780601f106129755761010080835404028352916020019161299e565b820191905f5260205f20905b81548152906001019060200180831161298157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612a0957612a09614d8c565b14158015612a2a5750600181516005811115612a2757612a27614d8c565b14155b15612a4b57805160405163170cc93360e21b81526106d69190600401614f24565b600381516005811115612a6057612a60614d8c565b03612a6e5760048152612a73565b600581525b836008018160200151604051612a8991906151e1565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612acd57612acd614d8c565b021790555060208201516001820190612ae69082615236565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612b8c57612b8c614d8c565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612bcc612593565b5f838152600a82016020526040812080549190559091506107d98482613872565b5f80516020615b26833981519152546114cc906001600160a01b031683836138e8565b60015f80516020615b6683398151915255565b5f80612c2d612593565b600281015490915061ffff600160401b90910481169086161080612c56575061271061ffff8616115b15612c7a57604051635f12e6c360e11b815261ffff861660048201526024016106d6565b60028101546001600160401b039081169085161015612cb6576040516202a06d60e11b81526001600160401b03851660048201526024016106d6565b8054831080612cc85750806001015483115b15612ce95760405163222d164360e21b8152600481018490526024016106d6565b5f612cf384613947565b90505f612cff82610de4565b90505f612d0c898361396a565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b612d94848484846125b7565b6107d957604051635bff683f60e11b8152600481018590526024016106d6565b5f612dbd612593565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612df657612df6614d8c565b6003811115612e0757612e07614d8c565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612ea47fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612eb3919061563c565b6001600160401b0316421015612ee75760405163fb6ce63f60e01b81526001600160401b03421660048201526024016106d6565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b031680612f3757506020820151612f55565b5f858152600985016020526040902080546001600160a01b03191690555b5f80612f62838886613e8f565b91509150612f7b8560200151610f18876060015161124a565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80612fcb612593565b90505f612fda6102bb85613947565b90505f612fe687611c27565b9050612ff1876122cb565b613011576040516330efa98b60e01b8152600481018890526024016106d6565b60028151600581111561302657613026614d8c565b1461304757805160405163170cc93360e21b81526106d69190600401614f24565b5f828260800151613058919061563c565b905083600201600a9054906101000a90046001600160401b03168260400151613081919061572f565b6001600160401b0316816001600160401b031611156130be57604051636d51fe0560e11b81526001600160401b03821660048201526024016106d6565b5f806130ca8a84613220565b915091505f8a836040516020016130f892919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b61320e613f3c565b61321782613f87565b6114cc81614001565b5f8281525f80516020615b86833981519152602052604081206002015481905f80516020615b4683398151915290600160801b90046001600160401b03166132688582614069565b5f6132728761428c565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561331b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613342919081019061502d565b6040518263ffffffff1660e01b815260040161335e919061505e565b6020604051808303815f875af115801561337a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061339e9190615070565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f80613401612593565b90505f6134118460400151611c27565b90505f60038251600581111561342957613429614d8c565b1480613447575060048251600581111561344557613445614d8c565b145b15613457575060c0810151613494565b60028251600581111561346c5761346c614d8c565b03613478575042613494565b815160405163170cc93360e21b81526106d69190600401614f24565b84608001516001600160401b0316816001600160401b0316116134bb57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906134e09061124a565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613561573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135859190615070565b95945050505050565b613596614ad1565b5f8281525f80516020615b868339815191526020526040808220815160e0810190925280545f80516020615b4683398151915293929190829060ff1660058111156135e3576135e3614d8c565b60058111156135f4576135f4614d8c565b815260200160018201805461360890614eec565b80601f016020809104026020016040519081016040528092919081815260200182805461363490614eec565b801561367f5780601f106136565761010080835404028352916020019161367f565b820191905f5260205f20905b81548152906001019060200180831161366257829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156136ed576136ed614d8c565b14613720575f8481526007830160205260409081902054905163170cc93360e21b81526106d69160ff1690600401614f24565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561376457613764614d8c565b02179055506020820151600182019061377d9082615236565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f61381b8582613220565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b5f5f80516020615b2683398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b1580156138cd575f80fd5b505af11580156138df573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261054a91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614301565b5f610e32825f80516020615b26833981519152546001600160a01b031690614362565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff166139ae57604051637fab81e560e01b815260040160405180910390fd5b5f80516020615b46833981519152426139cd6060860160408701614d13565b6001600160401b0316111580613a0757506139eb6202a30042615305565b6139fb6060860160408701614d13565b6001600160401b031610155b15613a4157613a1c6060850160408601614d13565b604051635879da1360e11b81526001600160401b0390911660048201526024016106d6565b613a56613a51606086018661575a565b61436e565b613a66613a51608086018661575a565b6030613a75602086018661576e565b905014613aa757613a89602085018561576e565b6040516326475b2f60e11b81526106d6925060040190815260200190565b613ab1848061576e565b90505f03613ade57613ac3848061576e565b604051633e08a12560e11b81526004016106d69291906157b0565b5f60088201613aed868061576e565b604051613afb92919061562d565b90815260200160405180910390205414613b3457613b19848061576e565b60405163a41f772f60e01b81526004016106d69291906157b0565b613b3e835f614069565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613b7b8a8061576e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613bc3908b018b61576e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613c0c60608b0160408c01614d13565b6001600160401b03168152602001613c2760608b018b61575a565b613c30906157c3565b8152602001613c4260808b018b61575a565b613c4b906157c3565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613c7991906158f0565b5f60405180830381865af4158015613c93573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613cba91908101906159a7565b5f82815260068601602052604090209193509150613cd88282615236565b508160088401613ce8888061576e565b604051613cf692919061562d565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613d3290859060040161505e565b6020604051808303815f875af1158015613d4e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d729190615070565b5f8481526007860160205260409020805460ff191660011790559050613d98878061576e565b5f858152600787016020526040902060010191613db69190836159ea565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613e15888061576e565b604051613e2392919061562d565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613e619190614d13565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f613e9a612593565b5f86815260088201602052604081208054908290559192509081908015613f2e575f87815260068501602052604090205461271090613ee490600160a01b900461ffff168361533a565b613eee9190615507565b91508184600a015f8981526020019081526020015f205f828254613f129190615305565b90915550613f2290508282615aa3565b9250613f2e8984613872565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613f8557604051631afcd79f60e31b815260040160405180910390fd5b565b613f8f613f3c565b613f98816144d7565b613fa06144f0565b610f3960608201356080830135613fbd60c0850160a08601614d13565b613fcd60e0860160c08701615ab6565b613fde610100870160e08801615acf565b610100870135613ff661014089016101208a01615087565b886101400135614500565b614009613f3c565b5f80516020615b268339815191526001600160a01b03821661404957604051637330680360e01b81526001600160a01b03831660048201526024016106d6565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615b468339815191525f6001600160401b03808416908516111561409d57614096838561565c565b90506140aa565b6140a7848461565c565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061410c575060018401548151614108916001600160401b031690615305565b8210155b15614132576001600160401b038316606082015281815260408101516020820152614151565b8281606001818151614144919061563c565b6001600160401b03169052505b606081015161416190606461572f565b602082015160018601546001600160401b03929092169161418c9190600160401b900460ff1661533a565b10156141bc57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016106d6565b856001600160401b0316816040018181516141d79190615305565b9052506040810180516001600160401b03871691906141f7908390615aa3565b9052506001840154604082015160649161421c91600160401b90910460ff169061533a565b1015614243578060400151604051635943317f60e01b81526004016106d691815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615b868339815191526020526040812060020180545f80516020615b4683398151915291906008906142d690600160401b90046001600160401b0316615aef565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6143156001600160a01b038416836146e5565b905080515f141580156143395750808060200190518101906143379190615b0a565b155b1561054a57604051635274afe760e01b81526001600160a01b03841660048201526024016106d6565b5f6131ff8333846146f2565b61437b6020820182614c6e565b63ffffffff1615801561439b575061439660208201826150a2565b151590505b156143e2576143ad6020820182614c6e565b6143ba60208301836150a2565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016106d6565b6143ef60208201826150a2565b90506143fe6020830183614c6e565b63ffffffff161115614417576143ad6020820182614c6e565b60015b61442760208301836150a2565b90508110156114cc5761443d60208301836150a2565b614448600184615aa3565b818110614457576144576150e7565b905060200201602081019061446c9190615087565b6001600160a01b031661448260208401846150a2565b83818110614492576144926150e7565b90506020020160208101906144a79190615087565b6001600160a01b031610156144cf57604051630dbc8d5f60e31b815260040160405180910390fd5b60010161441a565b6144df613f3c565b6144e7614855565b610f398161485d565b6144f8613f3c565b613f85614945565b614508613f3c565b5f614511612593565b905061ffff86161580614529575061271061ffff8716115b1561454d57604051635f12e6c360e11b815261ffff871660048201526024016106d6565b878911156145715760405163222d164360e21b8152600481018a90526024016106d6565b60ff851615806145845750600a60ff8616115b156145a75760405163170db35960e31b815260ff861660048201526024016106d6565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b0316101561460e576040516202a06d60e11b81526001600160401b03881660048201526024016106d6565b835f0361462e5760405163a733007160e01b815260040160405180910390fd5b8161464f57604051632f6bd1db60e01b8152600481018390526024016106d6565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b60606131ff83835f61494d565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614738573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061475c9190615070565b90506147736001600160a01b0386168530866149dc565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156147b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147db9190615070565b90508181116148415760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016106d6565b61484b8282615aa3565b9695505050505050565b613f85613f3c565b614865613f3c565b80355f80516020615b46833981519152908155601461488a6060840160408501615acf565b60ff1611806148a957506148a46060830160408401615acf565b60ff16155b156148dd576148be6060830160408401615acf565b604051634a59bbff60e11b815260ff90911660048201526024016106d6565b6148ed6060830160408401615acf565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561491e6040830160208401614d13565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c10613f3c565b6060814710156149725760405163cd78605960e01b81523060048201526024016106d6565b5f80856001600160a01b0316848660405161498d91906151e1565b5f6040518083038185875af1925050503d805f81146149c7576040519150601f19603f3d011682016040523d82523d5f602084013e6149cc565b606091505b509150915061484b868383614a15565b6040516001600160a01b0384811660248301528381166044830152606482018390526107d99186918216906323b872dd90608401613915565b606082614a2a57614a2582614a71565b6131ff565b8151158015614a4157506001600160a01b0384163b155b15614a6a57604051639996b31560e01b81526001600160a01b03851660048201526024016106d6565b50806131ff565b805115614a815780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614aa690614eec565b5f825580601f10614ab5575050565b601f0160209004905f5260205f2090810190610f399190614b0e565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614b22575f8155600101614b0f565b5090565b8015158114610f39575f80fd5b803563ffffffff81168114614b46575f80fd5b919050565b5f805f60608486031215614b5d575f80fd5b833592506020840135614b6f81614b26565b9150614b7d60408501614b33565b90509250925092565b5f60208284031215614b96575f80fd5b5035919050565b5f8060408385031215614bae575f80fd5b82356001600160401b03811115614bc3575f80fd5b830160808186031215614bd4575f80fd5b9150614be260208401614b33565b90509250929050565b5f8060408385031215614bfc575f80fd5b82359150614be260208401614b33565b6001600160a01b0381168114610f39575f80fd5b5f805f8060808587031215614c33575f80fd5b843593506020850135614c4581614b26565b9250614c5360408601614b33565b91506060850135614c6381614c0c565b939692955090935050565b5f60208284031215614c7e575f80fd5b6131ff82614b33565b803561ffff81168114614b46575f80fd5b6001600160401b0381168114610f39575f80fd5b5f805f8060808587031215614cbf575f80fd5b84356001600160401b03811115614cd4575f80fd5b850160a08188031215614ce5575f80fd5b9350614cf360208601614c87565b92506040850135614d0381614c98565b9396929550929360600135925050565b5f60208284031215614d23575f80fd5b81356131ff81614c98565b5f8060408385031215614d3f575f80fd5b50508035926020909101359150565b5f80828403610180811215614d61575f80fd5b61016080821215614d70575f80fd5b8493508301359050614d8181614c0c565b809150509250929050565b634e487b7160e01b5f52602160045260245ffd5b60068110614db057614db0614d8c565b9052565b5f5b83811015614dce578181015183820152602001614db6565b50505f910152565b5f8151808452614ded816020860160208601614db4565b601f01601f19169290920160200192915050565b60208152614e13602082018351614da0565b5f602083015160e06040840152614e2e610100840182614dd6565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614e92575f80fd5b82356001600160401b0380821115614ea8575f80fd5b818501915085601f830112614ebb575f80fd5b813581811115614ec9575f80fd5b866020828501011115614eda575f80fd5b60209290920196919550909350505050565b600181811c90821680614f0057607f821691505b602082108103614f1e57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610e328284614da0565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614f6857614f68614f32565b60405290565b604080519081016001600160401b0381118282101715614f6857614f68614f32565b604051601f8201601f191681016001600160401b0381118282101715614fb857614fb8614f32565b604052919050565b5f6001600160401b03821115614fd857614fd8614f32565b50601f01601f191660200190565b5f82601f830112614ff5575f80fd5b815161500861500382614fc0565b614f90565b81815284602083860101111561501c575f80fd5b610f69826020830160208701614db4565b5f6020828403121561503d575f80fd5b81516001600160401b03811115615052575f80fd5b610f6984828501614fe6565b602081525f6131ff6020830184614dd6565b5f60208284031215615080575f80fd5b5051919050565b5f60208284031215615097575f80fd5b81356131ff81614c0c565b5f808335601e198436030181126150b7575f80fd5b8301803591506001600160401b038211156150d0575f80fd5b6020019150600581901b36038213156133f0575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261510f575f80fd5b9190910192915050565b5f82601f830112615128575f80fd5b813561513661500382614fc0565b81815284602083860101111561514a575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615176575f80fd5b61517e614f46565b82356001600160401b0380821115615194575f80fd5b6151a036838701615119565b835260208501359150808211156151b5575f80fd5b506151c236828601615119565b60208301525060408301356151d681614c98565b604082015292915050565b5f825161510f818460208701614db4565b601f82111561054a57805f5260205f20601f840160051c810160208510156152175750805b601f840160051c820191505b81811015610e44575f8155600101615223565b81516001600160401b0381111561524f5761524f614f32565b6152638161525d8454614eec565b846151f2565b602080601f831160018114615296575f841561527f5750858301515b5f19600386901b1c1916600185901b1785556110a1565b5f85815260208120601f198616915b828110156152c4578886015182559484019460019091019084016152a5565b50858210156152e157878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610e3257610e326152f1565b5f63ffffffff808316818103615330576153306152f1565b6001019392505050565b8082028115828204841417610e3257610e326152f1565b5f808335601e19843603018112615366575f80fd5b83016020810192503590506001600160401b03811115615384575f80fd5b8036038213156133f0575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561546f57848303601f19018952813536889003605e190181126153f6575f80fd5b870160606154048280615351565b8287526154148388018284615392565b9250505061542486830183615351565b86830388880152615436838284615392565b92505050604080830135925061544b83614c98565b6001600160401b0392909216949091019390935297830197908301906001016153d1565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356154a081614c0c565b6001600160a01b031660608381019190915283013536849003601e190181126154c7575f80fd5b83016020810190356001600160401b038111156154e2575f80fd5b8060051b36038213156154f3575f80fd5b60808085015261358560a0850182846153ba565b5f8261552157634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061553a5761553a614d8c565b91905290565b5f805f60608486031215615552575f80fd5b83519250602084015161556481614c98565b604085015190925061557581614c98565b809150509250925092565b5f8060408385031215615591575f80fd5b825191506020830151614d8181614b26565b5f60208083525f84546155b581614eec565b806020870152604060018084165f81146155d657600181146155f25761561f565b60ff19851660408a0152604084151560051b8a0101955061561f565b895f5260205f205f5b858110156156165781548b82018601529083019088016155fb565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156122c4576122c46152f1565b6001600160401b038281168282160390808211156122c4576122c46152f1565b5f806040838503121561568d575f80fd5b82516001600160401b03808211156156a3575f80fd5b90840190606082870312156156b6575f80fd5b6156be614f46565b8251815260208301516156d081614c0c565b60208201526040830151828111156156e6575f80fd5b6156f288828601614fe6565b6040830152508094505050506020830151614d8181614b26565b5f806040838503121561571d575f80fd5b825191506020830151614d8181614c98565b6001600160401b03818116838216028082169190828114615752576157526152f1565b505092915050565b5f8235603e1983360301811261510f575f80fd5b5f808335601e19843603018112615783575f80fd5b8301803591506001600160401b0382111561579c575f80fd5b6020019150368190038213156133f0575f80fd5b602081525f610f69602083018486615392565b5f604082360312156157d3575f80fd5b6157db614f6e565b6157e483614b33565b81526020808401356001600160401b0380821115615800575f80fd5b9085019036601f830112615812575f80fd5b81358181111561582457615824614f32565b8060051b9150615835848301614f90565b818152918301840191848101903684111561584e575f80fd5b938501935b83851015615878578435925061586883614c0c565b8282529385019390850190615853565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158e55784516001600160a01b031682529383019360019290920191908301906158bc565b509695505050505050565b60208152815160208201525f602083015160e06040840152615916610100840182614dd6565b90506040840151601f19808584030160608601526159348383614dd6565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615964838361588a565b925060a08601519150808584030160c086015250615982828261588a565b91505060c084015161599f60e08501826001600160401b03169052565b509392505050565b5f80604083850312156159b8575f80fd5b8251915060208301516001600160401b038111156159d4575f80fd5b6159e085828601614fe6565b9150509250929050565b6001600160401b03831115615a0157615a01614f32565b615a1583615a0f8354614eec565b836151f2565b5f601f841160018114615a46575f8515615a2f5750838201355b5f19600387901b1c1916600186901b178355610e44565b5f83815260208120601f198716915b82811015615a755786850135825560209485019460019092019101615a55565b5086821015615a91575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610e3257610e326152f1565b5f60208284031215615ac6575f80fd5b6131ff82614c87565b5f60208284031215615adf575f80fd5b813560ff811681146131ff575f80fd5b5f6001600160401b03808316818103615330576153306152f1565b5f60208284031215615b1a575f80fd5b81516131ff81614b2656fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220bb56a731282f14905788e0a5232b808f45ad16b3c99f9692810c267bde48cab664736f6c63430008190033", + 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\":\"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\":[{\"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\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"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\":\"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\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"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\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"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\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"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\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"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\":\"DelegatorAdded\",\"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\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"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\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndValidation\",\"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\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"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\":\"structPoSValidatorManagerSettings\",\"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\":\"initializeDelegatorRegistration\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndValidation\",\"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\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"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\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"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\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"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: "0x608060405234801561000f575f80fd5b50604051615f0f380380615f0f83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615dc28061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061023f575f3560e01c806380dd672f11610135578063b771b3bc116100b4578063d5f20ff611610079578063d5f20ff614610516578063df93d8de14610536578063e4a63c4014610540578063fb8b11dd14610554578063fd7ac5e714610567575f80fd5b8063b771b3bc146104ae578063ba3a4b97146104d4578063bc5fbfec146104e7578063bee0a03f146104fb578063c974d1b61461050e575f80fd5b80639e1bc4ef116100fa5780639e1bc4ef1461044e5780639e478eea14610461578063a3a65e4814610474578063a9778a7a146102ee578063afb9809614610487575f80fd5b806380dd672f146103fa5780638280a25a1461040d5780638ef34c981461041557806393e24598146104285780639ae064471461043b575f80fd5b8063467ef06f116101c1578063620658561161018657806362065856146103a757806366435abf146103ba578063732214f8146103cd57806376f78621146103d45780637d8d2f77146103e7575f80fd5b8063467ef06f146103305780634bee0040146103435780635dd6a6cb1461036457806360305d621461037757806360ad778414610394575f80fd5b806325e1c7761161020757806325e1c776146102b05780632e2194d8146102c357806335455ded146102ee57806337b9be8f1461030a5780633a1cfff61461031d575f80fd5b80630118acc4146102435780630322ed9814610258578063151d30d11461026b5780631ec447241461028a57806320d91b7a1461029d575b5f80fd5b610256610251366004614d0f565b61057a565b005b610256610266366004614d4a565b61058b565b610273600a81565b60405160ff90911681526020015b60405180910390f35b610256610298366004614d0f565b61081b565b6102566102ab366004614d61565b610827565b6102566102be366004614daf565b610dac565b6102d66102d1366004614d4a565b610e20565b6040516001600160401b039091168152602001610281565b6102f761271081565b60405161ffff9091168152602001610281565b610256610318366004614de4565b610e74565b61025661032b366004614d0f565b610e87565b61025661033e366004614e32565b610e93565b610356610351366004614e70565b610f78565b604051908152602001610281565b610256610372366004614de4565b610fad565b61037f601481565b60405163ffffffff9091168152602001610281565b6102566103a2366004614daf565b610fb9565b6103566103b5366004614ed7565b611286565b6102d66103c8366004614d4a565b6112a6565b6103565f81565b6102566103e2366004614d0f565b6112ba565b6102566103f5366004614de4565b6112c6565b610256610408366004614daf565b6112d2565b610273603081565b610256610423366004614ef2565b61150c565b610256610436366004614d4a565b6115ee565b610256610449366004614de4565b611682565b61035661045c366004614f20565b61168e565b61025661046f366004614f40565b6116ba565b610256610482366004614e32565b611799565b6103567f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104bc6005600160991b0181565b6040516001600160a01b039091168152602001610281565b6102566104e2366004614d4a565b61198e565b6103565f80516020615d2d83398151915281565b610256610509366004614d4a565b611be7565b610273601481565b610529610524366004614d4a565b611d24565b6040516102819190614fe8565b6102d66202a30081565b6103565f80516020615d0d83398151915281565b610256610562366004614ef2565b611e73565b610356610575366004615068565b611f3a565b6105868383835f611f95565b505050565b5f8181525f80516020615d6d8339815191526020526040808220815160e0810190925280545f80516020615d2d83398151915293929190829060ff1660058111156105d8576105d8614f73565b60058111156105e9576105e9614f73565b81526020016001820180546105fd906150d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610629906150d3565b80156106745780601f1061064b57610100808354040283529160200191610674565b820191905f5260205f20905b81548152906001019060200180831161065757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156106df576106df614f73565b1461071b575f8381526007830160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610792573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107b99190810190615214565b6040518263ffffffff1660e01b81526004016107d59190615245565b6020604051808303815f875af11580156107f1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108159190615257565b50505050565b6108158383835f611fc1565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615d2d8339815191529060ff161561087957604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e09190615257565b836020013514610909576040516372b0a7e760e11b815260208401356004820152602401610712565b3061091a606085016040860161526e565b6001600160a01b03161461095d57610938606084016040850161526e565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610712565b5f61096b6060850185615289565b905090505f805b828163ffffffff161015610bd2575f61098e6060880188615289565b8363ffffffff168181106109a4576109a46152ce565b90506020028101906109b691906152e2565b6109bf9061534d565b80516040519192505f9160088801916109d7916153c8565b90815260200160405180910390205414610a0757805160405163a41f772f60e01b81526107129190600401615245565b5f6002885f013584604051602001610a3692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a50916153c8565b602060405180830381855afa158015610a6b573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a8e9190615257565b90508086600801835f0151604051610aa691906153c8565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610ae6908261541d565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610b6590856154ec565b8251604051919550610b76916153c8565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610bcb906154ff565b9050610972565b50600483018190556001830154606490610bf690600160401b900460ff1683615521565b1015610c1857604051635943317f60e01b815260048101829052602401610712565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c3c87612379565b604001516040518263ffffffff1660e01b8152600401610c5c9190615245565b602060405180830381865af4158015610c77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9b9190615257565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610cd59190615663565b5f60405180830381865af4158015610cef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d169190810190615214565b90505f600282604051610d2991906153c8565b602060405180830381855afa158015610d44573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d679190615257565b9050828114610d935760405163baaea89d60e01b81526004810182905260248101849052604401610712565b5050506009909201805460ff1916600117905550505050565b610db58261248f565b610dd5576040516330efa98b60e01b815260048101839052602401610712565b5f610ddf83611d24565b5190506002816005811115610df657610df6614f73565b14610e16578060405163170cc93360e21b8152600401610712919061510b565b61081583836124b8565b5f80610e2a612757565b60030154610e3890846156ee565b9050801580610e4d57506001600160401b0381115b15610e6e5760405163222d164360e21b815260048101849052602401610712565b92915050565b610e8084848484611fc1565b5050505050565b6108158383835f61277b565b610e9b61299d565b5f610ea4612757565b90505f80610eb1846129d4565b91509150610ebe8261248f565b610eca57505050610f5f565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b03918216911680610f01575080610f1f565b5f848152600b86016020526040902080546001600160a01b03191690555b600483516005811115610f3457610f34614f73565b03610f4357610f438185612d87565b610f5982610f548560400151611286565b612db1565b50505050505b610f7560015f80516020615d4d83398151915255565b50565b5f610f8161299d565b610f8d85858585612de7565b9050610fa560015f80516020615d4d83398151915255565b949350505050565b61081584848484612f4c565b5f610fc2612757565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610ffb57610ffb614f73565b600381111561100c5761100c614f73565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61108282611d24565b905060018351600381111561109957611099614f73565b146110ba578251604051633b0d540d60e21b8152610712919060040161570d565b6004815160058111156110cf576110cf614f73565b036110e5576110dd86612f78565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61110a89612379565b604001516040518263ffffffff1660e01b815260040161112a9190615245565b606060405180830381865af4158015611145573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111699190615727565b509150915081841461119657846040015160405163089938b360e11b815260040161071291815260200190565b806001600160401b031683606001516001600160401b031610806111cf5750806001600160401b03168560a001516001600160401b0316115b156111f857604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61128f612757565b60030154610e6e906001600160401b038416615521565b5f6112b082611d24565b6080015192915050565b6105868383835f612f4c565b610e808484848461277b565b6112da61299d565b5f6112e3612757565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561131c5761131c614f73565b600381111561132d5761132d614f73565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113a6576113a6614f73565b146113c7578051604051633b0d540d60e21b8152610712919060040161570d565b60046113d68260400151611d24565b5160058111156113e8576113e8614f73565b146114e7575f6113f784612379565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016114369190615245565b606060405180830381865af4158015611451573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114759190615727565b5091509150818460400151146114a15760405163089938b360e11b815260048101839052602401610712565b806001600160401b03168460c001516001600160401b031611156114e357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5050505b6114f084612f78565b505061150860015f80516020615d4d83398151915255565b5050565b6001600160a01b03811661153e5760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611547612757565b5f8481526006820160205260409020549091506001600160a01b0316331461159057335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610712565b336001600160a01b038316036115bf575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f6115f7612757565b90505f61160383611d24565b519050600481600581111561161a5761161a614f73565b1461163a578060405163170cc93360e21b8152600401610712919061510b565b5f8381526006830160205260409020546001600160a01b0316331461165f573361156b565b5f838152600683016020526040902054610586906001600160a01b031684612d87565b61081584848484611f95565b5f61169761299d565b6116a2833384613185565b9050610e6e60015f80516020615d4d83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611703575080546001600160401b03808416911610155b156117215760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561174c84846133ca565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615d2d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117cc86612379565b604001516040518263ffffffff1660e01b81526004016117ec9190615245565b6040805180830381865af4158015611806573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061182a9190615767565b915091508061185057604051632d07135360e01b81528115156004820152602401610712565b5f8281526006840160205260409020805461186a906150d3565b90505f0361188e5760405163089938b360e11b815260048101839052602401610712565b60015f83815260078501602052604090205460ff1660058111156118b4576118b4614f73565b146118e7575f8281526007840160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b5f82815260068401602052604081206118ff91614c5e565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611997612757565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119d0576119d0614f73565b60038111156119e1576119e1614f73565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a5a57611a5a614f73565b14158015611a7b5750600381516003811115611a7857611a78614f73565b14155b15611a9c578051604051633b0d540d60e21b8152610712919060040161570d565b5f611aaa8260400151611d24565b905080606001516001600160401b03165f03611adc576040516339b894f960e21b815260048101859052602401610712565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b4a93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b64573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b8b9190810190615214565b6040518263ffffffff1660e01b8152600401611ba79190615245565b6020604051808303815f875af1158015611bc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e809190615257565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615d2d8339815191529190611c2e906150d3565b90505f03611c525760405163089938b360e11b815260048101839052602401610712565b60015f83815260078301602052604090205460ff166005811115611c7857611c78614f73565b14611cab575f8281526007820160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611ce4919060040161578a565b6020604051808303815f875af1158015611d00573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105869190615257565b611d2c614c95565b5f8281525f80516020615d6d833981519152602052604090819020815160e0810190925280545f80516020615d2d833981519152929190829060ff166005811115611d7957611d79614f73565b6005811115611d8a57611d8a614f73565b8152602001600182018054611d9e906150d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611dca906150d3565b8015611e155780601f10611dec57610100808354040283529160200191611e15565b820191905f5260205f20905b815481529060010190602001808311611df857829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611ea55760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611eae612757565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611edc573361156b565b336001600160a01b03831603611f0b575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615d2d833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611f7d9086908690615814565b90815260200160405180910390205491505092915050565b611fa184848484611fc1565b61081557604051631036cf9160e11b815260048101859052602401610712565b5f80611fcb612757565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561200457612004614f73565b600381111561201557612015614f73565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61208b82611d24565b90506002835160038111156120a2576120a2614f73565b146120c3578251604051633b0d540d60e21b8152610712919060040161570d565b60208301516001600160a01b0316331461215f575f8281526006850160205260409020546001600160a01b031633146120fc573361156b565b5f82815260068501602052604090205460a082015161212b91600160b01b90046001600160401b031690615823565b6001600160401b031642101561215f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b60028151600581111561217457612174614f73565b036122dc5760028401546080840151612196916001600160401b031690615823565b6001600160401b03164210156121ca5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b87156121dc576121da82886124b8565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516122159184916122109190615843565b6133e4565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155612256846135bb565b5f8b8152600887016020526040902081905590506001600160a01b038716156122a2575f8a8152600986016020526040902080546001600160a01b0319166001600160a01b0389161790555b60405183908b907f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57905f90a315159450610fa59350505050565b6004815160058111156122f1576122f1614f73565b0361235d576122ff836135bb565b5f8a81526008860160205260409020556001600160a01b03861615612347575f898152600985016020526040902080546001600160a01b0319166001600160a01b0388161790555b61235089612f78565b6001945050505050610fa5565b805160405163170cc93360e21b8152610712919060040161510b565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156123dd573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124049190810190615863565b915091508061242657604051636b2f19e960e01b815260040160405180910390fd5b81511561244c578151604051636ba589a560e01b81526004810191909152602401610712565b60208201516001600160a01b031615612488576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5092915050565b5f80612499612757565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612503573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261252a9190810190615863565b915091508061254c57604051636b2f19e960e01b815260040160405180910390fd5b5f612555612757565b6005810154845191925014612583578251604051636ba589a560e01b81526004810191909152602401610712565b60208301516001600160a01b0316156125bf576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b60208301516001600160a01b0316156125fb576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016126389190615245565b6040805180830381865af4158015612652573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267691906158f3565b9150915081881461269d5760405163089938b360e11b815260048101899052602401610712565b5f8881526006840160205260409020600101546001600160401b03908116908216111561272e575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261274c565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f80612785612757565b90505f61279187613752565b905061279c8761248f565b6127ab57600192505050610fa5565b5f8781526006830160205260409020546001600160a01b031633146127d0573361156b565b5f87815260068301602052604090205460a08201516127ff91600160b01b90046001600160401b031690615823565b6001600160401b03168160c001516001600160401b031610156128465760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610712565b5f861561285e5761285788876124b8565b905061287c565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128a190611286565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561290a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061292e9190615257565b90508084600a015f8b81526020019081526020015f205f82825461295291906154ec565b90915550506001600160a01b0386161561298f575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615d4d8339815191528054600119016129ce57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f6129dd614c95565b5f80516020615d2d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612a1088612379565b604001516040518263ffffffff1660e01b8152600401612a309190615245565b6040805180830381865af4158015612a4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a6e9190615767565b915091508015612a9557604051632d07135360e01b81528115156004820152602401610712565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612ac657612ac6614f73565b6005811115612ad757612ad7614f73565b8152602001600182018054612aeb906150d3565b80601f0160208091040260200160405190810160405280929190818152602001828054612b17906150d3565b8015612b625780601f10612b3957610100808354040283529160200191612b62565b820191905f5260205f20905b815481529060010190602001808311612b4557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612bcd57612bcd614f73565b14158015612bee5750600181516005811115612beb57612beb614f73565b14155b15612c0f57805160405163170cc93360e21b8152610712919060040161510b565b600381516005811115612c2457612c24614f73565b03612c325760048152612c37565b600581525b836008018160200151604051612c4d91906153c8565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612c9157612c91614f73565b021790555060208201516001820190612caa908261541d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612d5057612d50614f73565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d90612757565b5f838152600a82016020526040812080549190559091506108158482613a36565b5f80516020615d0d83398151915254611508906001600160a01b03168383613aac565b60015f80516020615d4d83398151915255565b5f80612df1612757565b600281015490915061ffff600160401b90910481169086161080612e1a575061271061ffff8616115b15612e3e57604051635f12e6c360e11b815261ffff86166004820152602401610712565b60028101546001600160401b039081169085161015612e7a576040516202a06d60e11b81526001600160401b0385166004820152602401610712565b8054831080612e8c5750806001015483115b15612ead5760405163222d164360e21b815260048101849052602401610712565b5f612eb784613b0b565b90505f612ec382610e20565b90505f612ed08983613b2e565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b612f588484848461277b565b61081557604051635bff683f60e11b815260048101859052602401610712565b5f612f81612757565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612fba57612fba614f73565b6003811115612fcb57612fcb614f73565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091506130687fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b82608001516130779190615823565b6001600160401b03164210156130ab5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130fb57506020820151613119565b5f858152600985016020526040902080546001600160a01b03191690555b5f80613126838886614053565b9150915061313f8560200151610f548760600151611286565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f8061318f612757565b90505f61319e6102d185613b0b565b90505f6131aa87611d24565b90506131b58761248f565b6131d5576040516330efa98b60e01b815260048101889052602401610712565b6002815160058111156131ea576131ea614f73565b1461320b57805160405163170cc93360e21b8152610712919060040161510b565b5f82826080015161321c9190615823565b905083600201600a9054906101000a90046001600160401b031682604001516132459190615916565b6001600160401b0316816001600160401b0316111561328257604051636d51fe0560e11b81526001600160401b0382166004820152602401610712565b5f8061328e8a846133e4565b915091505f8a836040516020016132bc92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6133d2614100565b6133db8261414b565b611508816141c5565b5f8281525f80516020615d6d833981519152602052604081206002015481905f80516020615d2d83398151915290600160801b90046001600160401b031661342c858261422d565b5f61343687614450565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156134df573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135069190810190615214565b6040518263ffffffff1660e01b81526004016135229190615245565b6020604051808303815f875af115801561353e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135629190615257565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f806135c5612757565b90505f6135d58460400151611d24565b90505f6003825160058111156135ed576135ed614f73565b148061360b575060048251600581111561360957613609614f73565b145b1561361b575060c0810151613658565b60028251600581111561363057613630614f73565b0361363c575042613658565b815160405163170cc93360e21b8152610712919060040161510b565b84608001516001600160401b0316816001600160401b03161161367f57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906136a490611286565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613725573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137499190615257565b95945050505050565b61375a614c95565b5f8281525f80516020615d6d8339815191526020526040808220815160e0810190925280545f80516020615d2d83398151915293929190829060ff1660058111156137a7576137a7614f73565b60058111156137b8576137b8614f73565b81526020016001820180546137cc906150d3565b80601f01602080910402602001604051908101604052809291908181526020018280546137f8906150d3565b80156138435780601f1061381a57610100808354040283529160200191613843565b820191905f5260205f20905b81548152906001019060200180831161382657829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156138b1576138b1614f73565b146138e4575f8481526007830160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561392857613928614f73565b021790555060208201516001820190613941908261541d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139df85826133e4565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b5f5f80516020615d0d83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a91575f80fd5b505af1158015613aa3573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261058691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144c5565b5f610e6e825f80516020615d0d833981519152546001600160a01b031690614526565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613b7257604051637fab81e560e01b815260040160405180910390fd5b5f80516020615d2d83398151915242613b916060860160408701614ed7565b6001600160401b0316111580613bcb5750613baf6202a300426154ec565b613bbf6060860160408701614ed7565b6001600160401b031610155b15613c0557613be06060850160408601614ed7565b604051635879da1360e11b81526001600160401b039091166004820152602401610712565b613c1a613c156060860186615941565b614532565b613c2a613c156080860186615941565b6030613c396020860186615955565b905014613c6b57613c4d6020850185615955565b6040516326475b2f60e11b8152610712925060040190815260200190565b613c758480615955565b90505f03613ca257613c878480615955565b604051633e08a12560e11b8152600401610712929190615997565b5f60088201613cb18680615955565b604051613cbf929190615814565b90815260200160405180910390205414613cf857613cdd8480615955565b60405163a41f772f60e01b8152600401610712929190615997565b613d02835f61422d565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d3f8a80615955565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613d87908b018b615955565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613dd060608b0160408c01614ed7565b6001600160401b03168152602001613deb60608b018b615941565b613df4906159aa565b8152602001613e0660808b018b615941565b613e0f906159aa565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613e3d9190615ad7565b5f60405180830381865af4158015613e57573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e7e9190810190615b8e565b5f82815260068601602052604090209193509150613e9c828261541d565b508160088401613eac8880615955565b604051613eba929190615814565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613ef6908590600401615245565b6020604051808303815f875af1158015613f12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f369190615257565b5f8481526007860160205260409020805460ff191660011790559050613f5c8780615955565b5f858152600787016020526040902060010191613f7a919083615bd1565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613fd98880615955565b604051613fe7929190615814565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b60400160208101906140259190614ed7565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f61405e612757565b5f868152600882016020526040812080549082905591925090819080156140f2575f878152600685016020526040902054612710906140a890600160a01b900461ffff1683615521565b6140b291906156ee565b91508184600a015f8981526020019081526020015f205f8282546140d691906154ec565b909155506140e690508282615c8a565b92506140f28984613a36565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661414957604051631afcd79f60e31b815260040160405180910390fd5b565b614153614100565b61415c8161469b565b6141646146b4565b610f756060820135608083013561418160c0850160a08601614ed7565b61419160e0860160c08701615c9d565b6141a2610100870160e08801615cb6565b6101008701356141ba61014089016101208a0161526e565b8861014001356146c4565b6141cd614100565b5f80516020615d0d8339815191526001600160a01b03821661420d57604051637330680360e01b81526001600160a01b0383166004820152602401610712565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615d2d8339815191525f6001600160401b0380841690851611156142615761425a8385615843565b905061426e565b61426b8484615843565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806142d05750600184015481516142cc916001600160401b0316906154ec565b8210155b156142f6576001600160401b038316606082015281815260408101516020820152614315565b82816060018181516143089190615823565b6001600160401b03169052505b6060810151614325906064615916565b602082015160018601546001600160401b0392909216916143509190600160401b900460ff16615521565b101561438057606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610712565b856001600160401b03168160400181815161439b91906154ec565b9052506040810180516001600160401b03871691906143bb908390615c8a565b905250600184015460408201516064916143e091600160401b90910460ff1690615521565b1015614407578060400151604051635943317f60e01b815260040161071291815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615d6d8339815191526020526040812060020180545f80516020615d2d833981519152919060089061449a90600160401b90046001600160401b0316615cd6565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6144d96001600160a01b038416836148a9565b905080515f141580156144fd5750808060200190518101906144fb9190615cf1565b155b1561058657604051635274afe760e01b81526001600160a01b0384166004820152602401610712565b5f6133c38333846148b6565b61453f6020820182614e32565b63ffffffff1615801561455f575061455a6020820182615289565b151590505b156145a6576145716020820182614e32565b61457e6020830183615289565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610712565b6145b36020820182615289565b90506145c26020830183614e32565b63ffffffff1611156145db576145716020820182614e32565b60015b6145eb6020830183615289565b9050811015611508576146016020830183615289565b61460c600184615c8a565b81811061461b5761461b6152ce565b9050602002016020810190614630919061526e565b6001600160a01b03166146466020840184615289565b83818110614656576146566152ce565b905060200201602081019061466b919061526e565b6001600160a01b0316101561469357604051630dbc8d5f60e31b815260040160405180910390fd5b6001016145de565b6146a3614100565b6146ab614a19565b610f7581614a21565b6146bc614100565b614149614b09565b6146cc614100565b5f6146d5612757565b905061ffff861615806146ed575061271061ffff8716115b1561471157604051635f12e6c360e11b815261ffff87166004820152602401610712565b878911156147355760405163222d164360e21b8152600481018a9052602401610712565b60ff851615806147485750600a60ff8616115b1561476b5760405163170db35960e31b815260ff86166004820152602401610712565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b031610156147d2576040516202a06d60e11b81526001600160401b0388166004820152602401610712565b835f036147f25760405163a733007160e01b815260040160405180910390fd5b8161481357604051632f6bd1db60e01b815260048101839052602401610712565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b60606133c383835f614b11565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149209190615257565b90506149376001600160a01b038616853086614ba0565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa15801561497b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061499f9190615257565b9050818111614a055760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610712565b614a0f8282615c8a565b9695505050505050565b614149614100565b614a29614100565b80355f80516020615d2d8339815191529081556014614a4e6060840160408501615cb6565b60ff161180614a6d5750614a686060830160408401615cb6565b60ff16155b15614aa157614a826060830160408401615cb6565b604051634a59bbff60e11b815260ff9091166004820152602401610712565b614ab16060830160408401615cb6565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614ae26040830160208401614ed7565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dd4614100565b606081471015614b365760405163cd78605960e01b8152306004820152602401610712565b5f80856001600160a01b03168486604051614b5191906153c8565b5f6040518083038185875af1925050503d805f8114614b8b576040519150601f19603f3d011682016040523d82523d5f602084013e614b90565b606091505b5091509150614a0f868383614bd9565b6040516001600160a01b0384811660248301528381166044830152606482018390526108159186918216906323b872dd90608401613ad9565b606082614bee57614be982614c35565b6133c3565b8151158015614c0557506001600160a01b0384163b155b15614c2e57604051639996b31560e01b81526001600160a01b0385166004820152602401610712565b50806133c3565b805115614c455780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c6a906150d3565b5f825580601f10614c79575050565b601f0160209004905f5260205f2090810190610f759190614cd2565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614ce6575f8155600101614cd3565b5090565b8015158114610f75575f80fd5b803563ffffffff81168114614d0a575f80fd5b919050565b5f805f60608486031215614d21575f80fd5b833592506020840135614d3381614cea565b9150614d4160408501614cf7565b90509250925092565b5f60208284031215614d5a575f80fd5b5035919050565b5f8060408385031215614d72575f80fd5b82356001600160401b03811115614d87575f80fd5b830160808186031215614d98575f80fd5b9150614da660208401614cf7565b90509250929050565b5f8060408385031215614dc0575f80fd5b82359150614da660208401614cf7565b6001600160a01b0381168114610f75575f80fd5b5f805f8060808587031215614df7575f80fd5b843593506020850135614e0981614cea565b9250614e1760408601614cf7565b91506060850135614e2781614dd0565b939692955090935050565b5f60208284031215614e42575f80fd5b6133c382614cf7565b803561ffff81168114614d0a575f80fd5b6001600160401b0381168114610f75575f80fd5b5f805f8060808587031215614e83575f80fd5b84356001600160401b03811115614e98575f80fd5b850160a08188031215614ea9575f80fd5b9350614eb760208601614e4b565b92506040850135614ec781614e5c565b9396929550929360600135925050565b5f60208284031215614ee7575f80fd5b81356133c381614e5c565b5f8060408385031215614f03575f80fd5b823591506020830135614f1581614dd0565b809150509250929050565b5f8060408385031215614f31575f80fd5b50508035926020909101359150565b5f80828403610180811215614f53575f80fd5b61016080821215614f62575f80fd5b8493508301359050614f1581614dd0565b634e487b7160e01b5f52602160045260245ffd5b60068110614f9757614f97614f73565b9052565b5f5b83811015614fb5578181015183820152602001614f9d565b50505f910152565b5f8151808452614fd4816020860160208601614f9b565b601f01601f19169290920160200192915050565b60208152614ffa602082018351614f87565b5f602083015160e06040840152615015610100840182614fbd565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215615079575f80fd5b82356001600160401b038082111561508f575f80fd5b818501915085601f8301126150a2575f80fd5b8135818111156150b0575f80fd5b8660208285010111156150c1575f80fd5b60209290920196919550909350505050565b600181811c908216806150e757607f821691505b60208210810361510557634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610e6e8284614f87565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561514f5761514f615119565b60405290565b604080519081016001600160401b038111828210171561514f5761514f615119565b604051601f8201601f191681016001600160401b038111828210171561519f5761519f615119565b604052919050565b5f6001600160401b038211156151bf576151bf615119565b50601f01601f191660200190565b5f82601f8301126151dc575f80fd5b81516151ef6151ea826151a7565b615177565b818152846020838601011115615203575f80fd5b610fa5826020830160208701614f9b565b5f60208284031215615224575f80fd5b81516001600160401b03811115615239575f80fd5b610fa5848285016151cd565b602081525f6133c36020830184614fbd565b5f60208284031215615267575f80fd5b5051919050565b5f6020828403121561527e575f80fd5b81356133c381614dd0565b5f808335601e1984360301811261529e575f80fd5b8301803591506001600160401b038211156152b7575f80fd5b6020019150600581901b36038213156135b4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152f6575f80fd5b9190910192915050565b5f82601f83011261530f575f80fd5b813561531d6151ea826151a7565b818152846020838601011115615331575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6060823603121561535d575f80fd5b61536561512d565b82356001600160401b038082111561537b575f80fd5b61538736838701615300565b8352602085013591508082111561539c575f80fd5b506153a936828601615300565b60208301525060408301356153bd81614e5c565b604082015292915050565b5f82516152f6818460208701614f9b565b601f82111561058657805f5260205f20601f840160051c810160208510156153fe5750805b601f840160051c820191505b81811015610e80575f815560010161540a565b81516001600160401b0381111561543657615436615119565b61544a8161544484546150d3565b846153d9565b602080601f83116001811461547d575f84156154665750858301515b5f19600386901b1c1916600185901b1785556110dd565b5f85815260208120601f198616915b828110156154ab5788860151825594840194600190910190840161548c565b50858210156154c857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610e6e57610e6e6154d8565b5f63ffffffff808316818103615517576155176154d8565b6001019392505050565b8082028115828204841417610e6e57610e6e6154d8565b5f808335601e1984360301811261554d575f80fd5b83016020810192503590506001600160401b0381111561556b575f80fd5b8036038213156135b4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561565657848303601f19018952813536889003605e190181126155dd575f80fd5b870160606155eb8280615538565b8287526155fb8388018284615579565b9250505061560b86830183615538565b8683038888015261561d838284615579565b92505050604080830135925061563283614e5c565b6001600160401b0392909216949091019390935297830197908301906001016155b8565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561568781614dd0565b6001600160a01b031660608381019190915283013536849003601e190181126156ae575f80fd5b83016020810190356001600160401b038111156156c9575f80fd5b8060051b36038213156156da575f80fd5b60808085015261374960a0850182846155a1565b5f8261570857634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061572157615721614f73565b91905290565b5f805f60608486031215615739575f80fd5b83519250602084015161574b81614e5c565b604085015190925061575c81614e5c565b809150509250925092565b5f8060408385031215615778575f80fd5b825191506020830151614f1581614cea565b5f60208083525f845461579c816150d3565b806020870152604060018084165f81146157bd57600181146157d957615806565b60ff19851660408a0152604084151560051b8a01019550615806565b895f5260205f205f5b858110156157fd5781548b82018601529083019088016157e2565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b03818116838216019080821115612488576124886154d8565b6001600160401b03828116828216039080821115612488576124886154d8565b5f8060408385031215615874575f80fd5b82516001600160401b038082111561588a575f80fd5b908401906060828703121561589d575f80fd5b6158a561512d565b8251815260208301516158b781614dd0565b60208201526040830151828111156158cd575f80fd5b6158d9888286016151cd565b6040830152508094505050506020830151614f1581614cea565b5f8060408385031215615904575f80fd5b825191506020830151614f1581614e5c565b6001600160401b03818116838216028082169190828114615939576159396154d8565b505092915050565b5f8235603e198336030181126152f6575f80fd5b5f808335601e1984360301811261596a575f80fd5b8301803591506001600160401b03821115615983575f80fd5b6020019150368190038213156135b4575f80fd5b602081525f610fa5602083018486615579565b5f604082360312156159ba575f80fd5b6159c2615155565b6159cb83614cf7565b81526020808401356001600160401b03808211156159e7575f80fd5b9085019036601f8301126159f9575f80fd5b813581811115615a0b57615a0b615119565b8060051b9150615a1c848301615177565b8181529183018401918481019036841115615a35575f80fd5b938501935b83851015615a5f5784359250615a4f83614dd0565b8282529385019390850190615a3a565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615acc5784516001600160a01b03168252938301936001929092019190830190615aa3565b509695505050505050565b60208152815160208201525f602083015160e06040840152615afd610100840182614fbd565b90506040840151601f1980858403016060860152615b1b8383614fbd565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b4b8383615a71565b925060a08601519150808584030160c086015250615b698282615a71565b91505060c0840151615b8660e08501826001600160401b03169052565b509392505050565b5f8060408385031215615b9f575f80fd5b8251915060208301516001600160401b03811115615bbb575f80fd5b615bc7858286016151cd565b9150509250929050565b6001600160401b03831115615be857615be8615119565b615bfc83615bf683546150d3565b836153d9565b5f601f841160018114615c2d575f8515615c165750838201355b5f19600387901b1c1916600186901b178355610e80565b5f83815260208120601f198716915b82811015615c5c5786850135825560209485019460019092019101615c3c565b5086821015615c78575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610e6e57610e6e6154d8565b5f60208284031215615cad575f80fd5b6133c382614e4b565b5f60208284031215615cc6575f80fd5b813560ff811681146133c3575f80fd5b5f6001600160401b03808316818103615517576155176154d8565b5f60208284031215615d01575f80fd5b81516133c381614cea56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220e0abdfa5c721960f0966e9939ad4ed909246fb27b9c8a6fff2ec709e90f6d36864736f6c63430008190033", } // ERC20TokenStakingManagerABI is the input ABI used to generate the binding from. @@ -804,6 +804,48 @@ func (_ERC20TokenStakingManager *ERC20TokenStakingManagerCallerSession) WeightTo return _ERC20TokenStakingManager.Contract.WeightToValue(&_ERC20TokenStakingManager.CallOpts, weight) } +// ChangeDelegatorRewardRecipient is a paid mutator transaction binding the contract method 0xfb8b11dd. +// +// Solidity: function changeDelegatorRewardRecipient(bytes32 delegationID, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ChangeDelegatorRewardRecipient(opts *bind.TransactOpts, delegationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "changeDelegatorRewardRecipient", delegationID, rewardRecipient) +} + +// ChangeDelegatorRewardRecipient is a paid mutator transaction binding the contract method 0xfb8b11dd. +// +// Solidity: function changeDelegatorRewardRecipient(bytes32 delegationID, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ChangeDelegatorRewardRecipient(delegationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ChangeDelegatorRewardRecipient(&_ERC20TokenStakingManager.TransactOpts, delegationID, rewardRecipient) +} + +// ChangeDelegatorRewardRecipient is a paid mutator transaction binding the contract method 0xfb8b11dd. +// +// Solidity: function changeDelegatorRewardRecipient(bytes32 delegationID, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ChangeDelegatorRewardRecipient(delegationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ChangeDelegatorRewardRecipient(&_ERC20TokenStakingManager.TransactOpts, delegationID, rewardRecipient) +} + +// ChangeValidatorRewardRecipient is a paid mutator transaction binding the contract method 0x8ef34c98. +// +// Solidity: function changeValidatorRewardRecipient(bytes32 validationID, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactor) ChangeValidatorRewardRecipient(opts *bind.TransactOpts, validationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.contract.Transact(opts, "changeValidatorRewardRecipient", validationID, rewardRecipient) +} + +// ChangeValidatorRewardRecipient is a paid mutator transaction binding the contract method 0x8ef34c98. +// +// Solidity: function changeValidatorRewardRecipient(bytes32 validationID, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerSession) ChangeValidatorRewardRecipient(validationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ChangeValidatorRewardRecipient(&_ERC20TokenStakingManager.TransactOpts, validationID, rewardRecipient) +} + +// ChangeValidatorRewardRecipient is a paid mutator transaction binding the contract method 0x8ef34c98. +// +// Solidity: function changeValidatorRewardRecipient(bytes32 validationID, address rewardRecipient) returns() +func (_ERC20TokenStakingManager *ERC20TokenStakingManagerTransactorSession) ChangeValidatorRewardRecipient(validationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _ERC20TokenStakingManager.Contract.ChangeValidatorRewardRecipient(&_ERC20TokenStakingManager.TransactOpts, validationID, rewardRecipient) +} + // ClaimDelegationFees is a paid mutator transaction binding the contract method 0x93e24598. // // Solidity: function claimDelegationFees(bytes32 validationID) returns() diff --git a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go index e8eb426bf..5f113134c 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -103,8 +103,8 @@ type ValidatorRegistrationInput 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\":\"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\":[{\"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\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"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\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"InvalidStakeAmount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumStakeMultiplier\",\"type\":\"uint8\"}],\"name\":\"InvalidStakeMultiplier\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"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\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"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\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"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\":\"DelegatorAdded\",\"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\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"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\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"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_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndValidation\",\"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\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"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\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndValidation\",\"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\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"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\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"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\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"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: "0x608060405234801561000f575f80fd5b50604051615a6f380380615a6f83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6159228061014d5f395ff3fe60806040526004361061021d575f3560e01c806376f786211161011e578063afb98096116100a8578063c599e24f1161006d578063c599e24f14610648578063c974d1b61461065b578063d5f20ff61461066f578063df93d8de1461069b578063fd7ac5e7146106b1575f80fd5b8063afb980961461059d578063b771b3bc146105d0578063ba3a4b97146105ea578063bc5fbfec14610609578063bee0a03f14610629575f80fd5b806393e24598116100ee57806393e245981461052d5780639ae064471461054c578063a3a65e481461056b578063a9778a7a14610371578063af2f5feb1461058a575f80fd5b806376f78621146104bc5780637d8d2f77146104db57806380dd672f146104fa5780638280a25a14610519575f80fd5b806335455ded116101aa57806360305d621161016f57806360305d621461041557806360ad77841461043e578063620658561461045d57806366435abf1461048a578063732214f8146104a9575f80fd5b806335455ded1461037157806337b9be8f146103995780633a1cfff6146103b8578063467ef06f146103d75780635dd6a6cb146103f6575f80fd5b80631ec44724116101f05780631ec44724146102ab57806320d91b7a146102ca57806325e1c776146102e95780632e2194d814610308578063329c3e121461033f575f80fd5b80630118acc4146102215780630322ed98146102425780630ba512d114610261578063151d30d114610280575b5f80fd5b34801561022c575f80fd5b5061024061023b366004614920565b6106d0565b005b34801561024d575f80fd5b5061024061025c36600461495b565b6106e1565b34801561026c575f80fd5b5061024061027b366004614972565b610971565b34801561028b575f80fd5b50610294600a81565b60405160ff90911681526020015b60405180910390f35b3480156102b6575f80fd5b506102406102c5366004614920565b610a4e565b3480156102d5575f80fd5b506102406102e4366004614989565b610a5a565b3480156102f4575f80fd5b506102406103033660046149d7565b610fdf565b348015610313575f80fd5b5061032761032236600461495b565b611053565b6040516001600160401b0390911681526020016102a2565b34801561034a575f80fd5b506103596001600160991b0181565b6040516001600160a01b0390911681526020016102a2565b34801561037c575f80fd5b5061038661271081565b60405161ffff90911681526020016102a2565b3480156103a4575f80fd5b506102406103b3366004614a0c565b6110a7565b3480156103c3575f80fd5b506102406103d2366004614920565b6110ba565b3480156103e2575f80fd5b506102406103f1366004614a5a565b6110c6565b348015610401575f80fd5b50610240610410366004614a0c565b6111ab565b348015610420575f80fd5b50610429601481565b60405163ffffffff90911681526020016102a2565b348015610449575f80fd5b506102406104583660046149d7565b6111b7565b348015610468575f80fd5b5061047c610477366004614a87565b611484565b6040519081526020016102a2565b348015610495575f80fd5b506103276104a436600461495b565b6114a4565b3480156104b4575f80fd5b5061047c5f81565b3480156104c7575f80fd5b506102406104d6366004614920565b6114b8565b3480156104e6575f80fd5b506102406104f5366004614a0c565b6114c4565b348015610505575f80fd5b506102406105143660046149d7565b6114d0565b348015610524575f80fd5b50610294603081565b348015610538575f80fd5b5061024061054736600461495b565b61170a565b348015610557575f80fd5b50610240610566366004614a0c565b6117bf565b348015610576575f80fd5b50610240610585366004614a5a565b6117cb565b61047c610598366004614ab3565b6119c0565b3480156105a8575f80fd5b5061047c7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b3480156105db575f80fd5b506103596005600160991b0181565b3480156105f5575f80fd5b5061024061060436600461495b565b6119f4565b348015610614575f80fd5b5061047c5f8051602061588d83398151915281565b348015610634575f80fd5b5061024061064336600461495b565b611c4d565b61047c61065636600461495b565b611d8a565b348015610666575f80fd5b50610294601481565b34801561067a575f80fd5b5061068e61068936600461495b565b611dbb565b6040516102a29190614b89565b3480156106a6575f80fd5b506103276202a30081565b3480156106bc575f80fd5b5061047c6106cb366004614c09565b611f0a565b6106dc8383835f611f65565b505050565b5f8181525f805160206158cd8339815191526020526040808220815160e0810190925280545f8051602061588d83398151915293929190829060ff16600581111561072e5761072e614b14565b600581111561073f5761073f614b14565b815260200160018201805461075390614c74565b80601f016020809104026020016040519081016040528092919081815260200182805461077f90614c74565b80156107ca5780601f106107a1576101008083540402835291602001916107ca565b820191905f5260205f20905b8154815290600101906020018083116107ad57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561083557610835614b14565b14610871575f8381526007830160205260409081902054905163170cc93360e21b81526108689160ff1690600401614ca6565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156108e8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261090f9190810190614daf565b6040518263ffffffff1660e01b815260040161092b9190614de0565b6020604051808303815f875af1158015610947573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061096b9190614df2565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806109ba575080546001600160401b03808416911610155b156109d85760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a0283611f91565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b61096b8383835f611fa2565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061588d8339815191529060ff1615610aac57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610aef573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b139190614df2565b836020013514610b3c576040516372b0a7e760e11b815260208401356004820152602401610868565b30610b4d6060850160408601614e09565b6001600160a01b031614610b9057610b6b6060840160408501614e09565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610868565b5f610b9e6060850185614e24565b905090505f805b828163ffffffff161015610e05575f610bc16060880188614e24565b8363ffffffff16818110610bd757610bd7614e69565b9050602002810190610be99190614e7d565b610bf290614ee8565b80516040519192505f916008880191610c0a91614f63565b90815260200160405180910390205414610c3a57805160405163a41f772f60e01b81526108689190600401614de0565b5f6002885f013584604051602001610c6992919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610c8391614f63565b602060405180830381855afa158015610c9e573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610cc19190614df2565b90508086600801835f0151604051610cd99190614f63565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610d199082614fb8565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610d989085615087565b8251604051919550610da991614f63565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610dfe9061509a565b9050610ba5565b50600483018190556001830154606490610e2990600160401b900460ff16836150bc565b1015610e4b57604051635943317f60e01b815260048101829052602401610868565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610e6f87612362565b604001516040518263ffffffff1660e01b8152600401610e8f9190614de0565b602060405180830381865af4158015610eaa573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ece9190614df2565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f0891906151fe565b5f60405180830381865af4158015610f22573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f499190810190614daf565b90505f600282604051610f5c9190614f63565b602060405180830381855afa158015610f77573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610f9a9190614df2565b9050828114610fc65760405163baaea89d60e01b81526004810182905260248101849052604401610868565b5050506009909201805460ff1916600117905550505050565b610fe882612478565b611008576040516330efa98b60e01b815260048101839052602401610868565b5f61101283611dbb565b519050600281600581111561102957611029614b14565b14611049578060405163170cc93360e21b81526004016108689190614ca6565b61096b83836124a1565b5f8061105d612740565b6003015461106b9084615289565b905080158061108057506001600160401b0381115b156110a15760405163222d164360e21b815260048101849052602401610868565b92915050565b6110b384848484611fa2565b5050505050565b61096b8383835f612764565b6110ce612986565b5f6110d7612740565b90505f806110e4846129bd565b915091506110f182612478565b6110fd57505050611192565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b03918216911680611134575080611152565b5f848152600b86016020526040902080546001600160a01b03191690555b60048351600581111561116757611167614b14565b03611176576111768185612d70565b61118c826111878560400151611484565b612d9a565b50505050505b6111a860015f805160206158ad83398151915255565b50565b61096b84848484612dc0565b5f6111c0612740565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156111f9576111f9614b14565b600381111561120a5761120a614b14565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61128082611dbb565b905060018351600381111561129757611297614b14565b146112b8578251604051633b0d540d60e21b815261086891906004016152a8565b6004815160058111156112cd576112cd614b14565b036112e3576112db86612dec565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61130889612362565b604001516040518263ffffffff1660e01b81526004016113289190614de0565b606060405180830381865af4158015611343573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061136791906152c2565b509150915081841461139457846040015160405163089938b360e11b815260040161086891815260200190565b806001600160401b031683606001516001600160401b031610806113cd5750806001600160401b03168560a001516001600160401b0316115b156113f657604051632e19bc2d60e11b81526001600160401b0382166004820152602401610868565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61148d612740565b600301546110a1906001600160401b0384166150bc565b5f6114ae82611dbb565b6080015192915050565b6106dc8383835f612dc0565b6110b384848484612764565b6114d8612986565b5f6114e1612740565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561151a5761151a614b14565b600381111561152b5761152b614b14565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156115a4576115a4614b14565b146115c5578051604051633b0d540d60e21b815261086891906004016152a8565b60046115d48260400151611dbb565b5160058111156115e6576115e6614b14565b146116e5575f6115f584612362565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116349190614de0565b606060405180830381865af415801561164f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061167391906152c2565b50915091508184604001511461169f5760405163089938b360e11b815260048101839052602401610868565b806001600160401b03168460c001516001600160401b031611156116e157604051632e19bc2d60e11b81526001600160401b0382166004820152602401610868565b5050505b6116ee84612dec565b505061170660015f805160206158ad83398151915255565b5050565b5f611713612740565b90505f61171f83611dbb565b519050600481600581111561173657611736614b14565b14611756578060405163170cc93360e21b81526004016108689190614ca6565b5f8381526006830160205260409020546001600160a01b0316331461179c57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610868565b5f8381526006830160205260409020546106dc906001600160a01b031684612d70565b61096b84848484611f65565b5f8051602061588d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117fe86612362565b604001516040518263ffffffff1660e01b815260040161181e9190614de0565b6040805180830381865af4158015611838573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185c91906152f7565b915091508061188257604051632d07135360e01b81528115156004820152602401610868565b5f8281526006840160205260409020805461189c90614c74565b90505f036118c05760405163089938b360e11b815260048101839052602401610868565b60015f83815260078501602052604090205460ff1660058111156118e6576118e6614b14565b14611919575f8281526007840160205260409081902054905163170cc93360e21b81526108689160ff1690600401614ca6565b5f828152600684016020526040812061193191614874565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f6119c9612986565b6119d584848434612ff9565b90506119ed60015f805160206158ad83398151915255565b9392505050565b5f6119fd612740565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611a3657611a36614b14565b6003811115611a4757611a47614b14565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611ac057611ac0614b14565b14158015611ae15750600381516003811115611ade57611ade614b14565b14155b15611b02578051604051633b0d540d60e21b815261086891906004016152a8565b5f611b108260400151611dbb565b905080606001516001600160401b03165f03611b42576040516339b894f960e21b815260048101859052602401610868565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611bb093906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611bca573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611bf19190810190614daf565b6040518263ffffffff1660e01b8152600401611c0d9190614de0565b6020604051808303815f875af1158015611c29573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110b39190614df2565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061588d8339815191529190611c9490614c74565b90505f03611cb85760405163089938b360e11b815260048101839052602401610868565b60015f83815260078301602052604090205460ff166005811115611cde57611cde614b14565b14611d11575f8281526007820160205260409081902054905163170cc93360e21b81526108689160ff1690600401614ca6565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611d4a9190600401615325565b6020604051808303815f875af1158015611d66573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106dc9190614df2565b5f611d93612986565b611d9e823334613153565b9050611db660015f805160206158ad83398151915255565b919050565b611dc36148ab565b5f8281525f805160206158cd833981519152602052604090819020815160e0810190925280545f8051602061588d833981519152929190829060ff166005811115611e1057611e10614b14565b6005811115611e2157611e21614b14565b8152602001600182018054611e3590614c74565b80601f0160208091040260200160405190810160405280929190818152602001828054611e6190614c74565b8015611eac5780601f10611e8357610100808354040283529160200191611eac565b820191905f5260205f20905b815481529060010190602001808311611e8f57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f8051602061588d833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611f4d90869086906153af565b90815260200160405180910390205491505092915050565b611f7184848484611fa2565b61096b57604051631036cf9160e11b815260048101859052602401610868565b611f99613393565b6111a8816133de565b5f80611fac612740565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611fe557611fe5614b14565b6003811115611ff657611ff6614b14565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61206c82611dbb565b905060028351600381111561208357612083614b14565b146120a4578251604051633b0d540d60e21b815261086891906004016152a8565b60208301516001600160a01b03163314612140575f8281526006850160205260409020546001600160a01b031633146120dd5733611777565b5f82815260068501602052604090205460a082015161210c91600160b01b90046001600160401b0316906153be565b6001600160401b03164210156121405760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610868565b60028151600581111561215557612155614b14565b036122bd5760028401546080840151612177916001600160401b0316906153be565b6001600160401b03164210156121ab5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610868565b87156121bd576121bb82886124a1565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516121f69184916121f191906153de565b613458565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556122378461362f565b5f8b8152600887016020526040902081905590506001600160a01b03871615612283575f8a8152600986016020526040902080546001600160a01b0319166001600160a01b0389161790555b60405183908b907f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57905f90a31515945061235a9350505050565b6004815160058111156122d2576122d2614b14565b0361233e576122e08361362f565b5f8a81526008860160205260409020556001600160a01b03861615612328575f898152600985016020526040902080546001600160a01b0319166001600160a01b0388161790555b61233189612dec565b600194505050505061235a565b805160405163170cc93360e21b81526108689190600401614ca6565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156123c6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123ed91908101906153fe565b915091508061240f57604051636b2f19e960e01b815260040160405180910390fd5b815115612435578151604051636ba589a560e01b81526004810191909152602401610868565b60208201516001600160a01b031615612471576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610868565b5092915050565b5f80612482612740565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156124ec573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261251391908101906153fe565b915091508061253557604051636b2f19e960e01b815260040160405180910390fd5b5f61253e612740565b600581015484519192501461256c578251604051636ba589a560e01b81526004810191909152602401610868565b60208301516001600160a01b0316156125a8576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610868565b60208301516001600160a01b0316156125e4576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610868565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016126219190614de0565b6040805180830381865af415801561263b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061265f919061548e565b915091508188146126865760405163089938b360e11b815260048101899052602401610868565b5f8881526006840160205260409020600101546001600160401b039081169082161115612717575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612735565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061276e612740565b90505f61277a876137c6565b905061278587612478565b6127945760019250505061235a565b5f8781526006830160205260409020546001600160a01b031633146127b95733611777565b5f87815260068301602052604090205460a08201516127e891600160b01b90046001600160401b0316906153be565b6001600160401b03168160c001516001600160401b0316101561282f5760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610868565b5f86156128475761284088876124a1565b9050612865565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f9061288a90611484565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa1580156128f3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129179190614df2565b90508084600a015f8b81526020019081526020015f205f82825461293b9190615087565b90915550506001600160a01b03861615612978575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f805160206158ad8339815191528054600119016129b757604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f6129c66148ab565b5f8051602061588d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6129f988612362565b604001516040518263ffffffff1660e01b8152600401612a199190614de0565b6040805180830381865af4158015612a33573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a5791906152f7565b915091508015612a7e57604051632d07135360e01b81528115156004820152602401610868565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612aaf57612aaf614b14565b6005811115612ac057612ac0614b14565b8152602001600182018054612ad490614c74565b80601f0160208091040260200160405190810160405280929190818152602001828054612b0090614c74565b8015612b4b5780601f10612b2257610100808354040283529160200191612b4b565b820191905f5260205f20905b815481529060010190602001808311612b2e57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612bb657612bb6614b14565b14158015612bd75750600181516005811115612bd457612bd4614b14565b14155b15612bf857805160405163170cc93360e21b81526108689190600401614ca6565b600381516005811115612c0d57612c0d614b14565b03612c1b5760048152612c20565b600581525b836008018160200151604051612c369190614f63565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612c7a57612c7a614b14565b021790555060208201516001820190612c939082614fb8565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612d3957612d39614b14565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d79612740565b5f838152600a820160205260408120805491905590915061096b8482613aaa565b6117066001600160a01b03831682613b08565b60015f805160206158ad83398151915255565b612dcc84848484612764565b61096b57604051635bff683f60e11b815260048101859052602401610868565b5f612df5612740565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612e2e57612e2e614b14565b6003811115612e3f57612e3f614b14565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612edc7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612eeb91906153be565b6001600160401b0316421015612f1f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610868565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b031680612f6f57506020820151612f8d565b5f858152600985016020526040902080546001600160a01b03191690555b5f80612f9a838886613b9b565b91509150612fb385602001516111878760600151611484565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80613003612740565b600281015490915061ffff600160401b9091048116908616108061302c575061271061ffff8616115b1561305057604051635f12e6c360e11b815261ffff86166004820152602401610868565b60028101546001600160401b03908116908516101561308c576040516202a06d60e11b81526001600160401b0385166004820152602401610868565b805483108061309e5750806001015483115b156130bf5760405163222d164360e21b815260048101849052602401610868565b825f6130ca82611053565b90505f6130d78983613c48565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f8061315d612740565b90505f61316984611053565b90505f61317587611dbb565b905061318087612478565b6131a0576040516330efa98b60e01b815260048101889052602401610868565b6002815160058111156131b5576131b5614b14565b146131d657805160405163170cc93360e21b81526108689190600401614ca6565b5f8282608001516131e791906153be565b905083600201600a9054906101000a90046001600160401b0316826040015161321091906154b1565b6001600160401b0316816001600160401b0316111561324d57604051636d51fe0560e11b81526001600160401b0382166004820152602401610868565b5f806132598a84613458565b915091505f8a8360405160200161328792919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166133dc57604051631afcd79f60e31b815260040160405180910390fd5b565b6133e6613393565b6133ef8161416d565b6133f7614186565b6111a86060820135608083013561341460c0850160a08601614a87565b61342460e0860160c087016154dc565b613435610100870160e088016154f5565b61010087013561344d61014089016101208a01614e09565b886101400135614196565b5f8281525f805160206158cd833981519152602052604081206002015481905f8051602061588d83398151915290600160801b90046001600160401b03166134a0858261437b565b5f6134aa8761459e565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613553573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261357a9190810190614daf565b6040518263ffffffff1660e01b81526004016135969190614de0565b6020604051808303815f875af11580156135b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135d69190614df2565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f80613639612740565b90505f6136498460400151611dbb565b90505f60038251600581111561366157613661614b14565b148061367f575060048251600581111561367d5761367d614b14565b145b1561368f575060c08101516136cc565b6002825160058111156136a4576136a4614b14565b036136b05750426136cc565b815160405163170cc93360e21b81526108689190600401614ca6565b84608001516001600160401b0316816001600160401b0316116136f357505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f9061371890611484565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613799573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137bd9190614df2565b95945050505050565b6137ce6148ab565b5f8281525f805160206158cd8339815191526020526040808220815160e0810190925280545f8051602061588d83398151915293929190829060ff16600581111561381b5761381b614b14565b600581111561382c5761382c614b14565b815260200160018201805461384090614c74565b80601f016020809104026020016040519081016040528092919081815260200182805461386c90614c74565b80156138b75780601f1061388e576101008083540402835291602001916138b7565b820191905f5260205f20905b81548152906001019060200180831161389a57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561392557613925614b14565b14613958575f8481526007830160205260409081902054905163170cc93360e21b81526108689160ff1690600401614ca6565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561399c5761399c614b14565b0217905550602082015160018201906139b59082614fb8565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613a538582613458565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613af6575f80fd5b505af11580156112db573d5f803e3d5ffd5b80471015613b2b5760405163cd78605960e01b8152306004820152602401610868565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613b74576040519150601f19603f3d011682016040523d82523d5f602084013e613b79565b606091505b50509050806106dc57604051630a12f52160e11b815260040160405180910390fd5b5f805f613ba6612740565b5f86815260088201602052604081208054908290559192509081908015613c3a575f87815260068501602052604090205461271090613bf090600160a01b900461ffff16836150bc565b613bfa9190615289565b91508184600a015f8981526020019081526020015f205f828254613c1e9190615087565b90915550613c2e90508282615515565b9250613c3a8984613aaa565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613c8c57604051637fab81e560e01b815260040160405180910390fd5b5f8051602061588d83398151915242613cab6060860160408701614a87565b6001600160401b0316111580613ce55750613cc96202a30042615087565b613cd96060860160408701614a87565b6001600160401b031610155b15613d1f57613cfa6060850160408601614a87565b604051635879da1360e11b81526001600160401b039091166004820152602401610868565b613d34613d2f6060860186615528565b614613565b613d44613d2f6080860186615528565b6030613d53602086018661553c565b905014613d8557613d67602085018561553c565b6040516326475b2f60e11b8152610868925060040190815260200190565b613d8f848061553c565b90505f03613dbc57613da1848061553c565b604051633e08a12560e11b815260040161086892919061557e565b5f60088201613dcb868061553c565b604051613dd99291906153af565b90815260200160405180910390205414613e1257613df7848061553c565b60405163a41f772f60e01b815260040161086892919061557e565b613e1c835f61437b565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613e598a8061553c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613ea1908b018b61553c565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613eea60608b0160408c01614a87565b6001600160401b03168152602001613f0560608b018b615528565b613f0e90615591565b8152602001613f2060808b018b615528565b613f2990615591565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613f5791906156be565b5f60405180830381865af4158015613f71573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613f989190810190615775565b5f82815260068601602052604090209193509150613fb68282614fb8565b508160088401613fc6888061553c565b604051613fd49291906153af565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90614010908590600401614de0565b6020604051808303815f875af115801561402c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906140509190614df2565b5f8481526007860160205260409020805460ff191660011790559050614076878061553c565b5f8581526007870160205260409020600101916140949190836157b8565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806140f3888061553c565b6040516141019291906153af565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b604001602081019061413f9190614a87565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b614175613393565b61417d61477c565b6111a881614784565b61418e613393565b6133dc61486c565b61419e613393565b5f6141a7612740565b905061ffff861615806141bf575061271061ffff8716115b156141e357604051635f12e6c360e11b815261ffff87166004820152602401610868565b878911156142075760405163222d164360e21b8152600481018a9052602401610868565b60ff8516158061421a5750600a60ff8616115b1561423d5760405163170db35960e31b815260ff86166004820152602401610868565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b031610156142a4576040516202a06d60e11b81526001600160401b0388166004820152602401610868565b835f036142c45760405163a733007160e01b815260040160405180910390fd5b816142e557604051632f6bd1db60e01b815260048101839052602401610868565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f8051602061588d8339815191525f6001600160401b0380841690851611156143af576143a883856153de565b90506143bc565b6143b984846153de565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061441e57506001840154815161441a916001600160401b031690615087565b8210155b15614444576001600160401b038316606082015281815260408101516020820152614463565b828160600181815161445691906153be565b6001600160401b03169052505b60608101516144739060646154b1565b602082015160018601546001600160401b03929092169161449e9190600160401b900460ff166150bc565b10156144ce57606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610868565b856001600160401b0316816040018181516144e99190615087565b9052506040810180516001600160401b0387169190614509908390615515565b9052506001840154604082015160649161452e91600160401b90910460ff16906150bc565b1015614555578060400151604051635943317f60e01b815260040161086891815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f805160206158cd8339815191526020526040812060020180545f8051602061588d83398151915291906008906145e890600160401b90046001600160401b0316615871565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6146206020820182614a5a565b63ffffffff16158015614640575061463b6020820182614e24565b151590505b15614687576146526020820182614a5a565b61465f6020830183614e24565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610868565b6146946020820182614e24565b90506146a36020830183614a5a565b63ffffffff1611156146bc576146526020820182614a5a565b60015b6146cc6020830183614e24565b9050811015611706576146e26020830183614e24565b6146ed600184615515565b8181106146fc576146fc614e69565b90506020020160208101906147119190614e09565b6001600160a01b03166147276020840184614e24565b8381811061473757614737614e69565b905060200201602081019061474c9190614e09565b6001600160a01b0316101561477457604051630dbc8d5f60e31b815260040160405180910390fd5b6001016146bf565b6133dc613393565b61478c613393565b80355f8051602061588d83398151915290815560146147b160608401604085016154f5565b60ff1611806147d057506147cb60608301604084016154f5565b60ff16155b15614804576147e560608301604084016154f5565b604051634a59bbff60e11b815260ff9091166004820152602401610868565b61481460608301604084016154f5565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556148456040830160208401614a87565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dad613393565b50805461488090614c74565b5f825580601f1061488f575050565b601f0160209004905f5260205f20908101906111a891906148e8565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b808211156148fc575f81556001016148e9565b5090565b80151581146111a8575f80fd5b803563ffffffff81168114611db6575f80fd5b5f805f60608486031215614932575f80fd5b83359250602084013561494481614900565b91506149526040850161490d565b90509250925092565b5f6020828403121561496b575f80fd5b5035919050565b5f6101608284031215614983575f80fd5b50919050565b5f806040838503121561499a575f80fd5b82356001600160401b038111156149af575f80fd5b8301608081860312156149c0575f80fd5b91506149ce6020840161490d565b90509250929050565b5f80604083850312156149e8575f80fd5b823591506149ce6020840161490d565b6001600160a01b03811681146111a8575f80fd5b5f805f8060808587031215614a1f575f80fd5b843593506020850135614a3181614900565b9250614a3f6040860161490d565b91506060850135614a4f816149f8565b939692955090935050565b5f60208284031215614a6a575f80fd5b6119ed8261490d565b6001600160401b03811681146111a8575f80fd5b5f60208284031215614a97575f80fd5b81356119ed81614a73565b803561ffff81168114611db6575f80fd5b5f805f60608486031215614ac5575f80fd5b83356001600160401b03811115614ada575f80fd5b840160a08187031215614aeb575f80fd5b9250614af960208501614aa2565b91506040840135614b0981614a73565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614b3857614b38614b14565b9052565b5f5b83811015614b56578181015183820152602001614b3e565b50505f910152565b5f8151808452614b75816020860160208601614b3c565b601f01601f19169290920160200192915050565b60208152614b9b602082018351614b28565b5f602083015160e06040840152614bb6610100840182614b5e565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614c1a575f80fd5b82356001600160401b0380821115614c30575f80fd5b818501915085601f830112614c43575f80fd5b813581811115614c51575f80fd5b866020828501011115614c62575f80fd5b60209290920196919550909350505050565b600181811c90821680614c8857607f821691505b60208210810361498357634e487b7160e01b5f52602260045260245ffd5b602081016110a18284614b28565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614cea57614cea614cb4565b60405290565b604080519081016001600160401b0381118282101715614cea57614cea614cb4565b604051601f8201601f191681016001600160401b0381118282101715614d3a57614d3a614cb4565b604052919050565b5f6001600160401b03821115614d5a57614d5a614cb4565b50601f01601f191660200190565b5f82601f830112614d77575f80fd5b8151614d8a614d8582614d42565b614d12565b818152846020838601011115614d9e575f80fd5b61235a826020830160208701614b3c565b5f60208284031215614dbf575f80fd5b81516001600160401b03811115614dd4575f80fd5b61235a84828501614d68565b602081525f6119ed6020830184614b5e565b5f60208284031215614e02575f80fd5b5051919050565b5f60208284031215614e19575f80fd5b81356119ed816149f8565b5f808335601e19843603018112614e39575f80fd5b8301803591506001600160401b03821115614e52575f80fd5b6020019150600581901b3603821315613628575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614e91575f80fd5b9190910192915050565b5f82601f830112614eaa575f80fd5b8135614eb8614d8582614d42565b818152846020838601011115614ecc575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614ef8575f80fd5b614f00614cc8565b82356001600160401b0380821115614f16575f80fd5b614f2236838701614e9b565b83526020850135915080821115614f37575f80fd5b50614f4436828601614e9b565b6020830152506040830135614f5881614a73565b604082015292915050565b5f8251614e91818460208701614b3c565b601f8211156106dc57805f5260205f20601f840160051c81016020851015614f995750805b601f840160051c820191505b818110156110b3575f8155600101614fa5565b81516001600160401b03811115614fd157614fd1614cb4565b614fe581614fdf8454614c74565b84614f74565b602080601f831160018114615018575f84156150015750858301515b5f19600386901b1c1916600185901b1785556112db565b5f85815260208120601f198616915b8281101561504657888601518255948401946001909101908401615027565b508582101561506357878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808201808211156110a1576110a1615073565b5f63ffffffff8083168181036150b2576150b2615073565b6001019392505050565b80820281158282048414176110a1576110a1615073565b5f808335601e198436030181126150e8575f80fd5b83016020810192503590506001600160401b03811115615106575f80fd5b803603821315613628575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156151f157848303601f19018952813536889003605e19018112615178575f80fd5b8701606061518682806150d3565b8287526151968388018284615114565b925050506151a6868301836150d3565b868303888801526151b8838284615114565b9250505060408083013592506151cd83614a73565b6001600160401b039290921694909101939093529783019790830190600101615153565b5090979650505050505050565b6020815281356020820152602082013560408201525f6040830135615222816149f8565b6001600160a01b031660608381019190915283013536849003601e19018112615249575f80fd5b83016020810190356001600160401b03811115615264575f80fd5b8060051b3603821315615275575f80fd5b6080808501526137bd60a08501828461513c565b5f826152a357634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106152bc576152bc614b14565b91905290565b5f805f606084860312156152d4575f80fd5b8351925060208401516152e681614a73565b6040850151909250614b0981614a73565b5f8060408385031215615308575f80fd5b82519150602083015161531a81614900565b809150509250929050565b5f60208083525f845461533781614c74565b806020870152604060018084165f81146153585760018114615374576153a1565b60ff19851660408a0152604084151560051b8a010195506153a1565b895f5260205f205f5b858110156153985781548b820186015290830190880161537d565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0381811683821601908082111561247157612471615073565b6001600160401b0382811682821603908082111561247157612471615073565b5f806040838503121561540f575f80fd5b82516001600160401b0380821115615425575f80fd5b9084019060608287031215615438575f80fd5b615440614cc8565b825181526020830151615452816149f8565b6020820152604083015182811115615468575f80fd5b61547488828601614d68565b604083015250809450505050602083015161531a81614900565b5f806040838503121561549f575f80fd5b82519150602083015161531a81614a73565b6001600160401b038181168382160280821691908281146154d4576154d4615073565b505092915050565b5f602082840312156154ec575f80fd5b6119ed82614aa2565b5f60208284031215615505575f80fd5b813560ff811681146119ed575f80fd5b818103818111156110a1576110a1615073565b5f8235603e19833603018112614e91575f80fd5b5f808335601e19843603018112615551575f80fd5b8301803591506001600160401b0382111561556a575f80fd5b602001915036819003821315613628575f80fd5b602081525f61235a602083018486615114565b5f604082360312156155a1575f80fd5b6155a9614cf0565b6155b28361490d565b81526020808401356001600160401b03808211156155ce575f80fd5b9085019036601f8301126155e0575f80fd5b8135818111156155f2576155f2614cb4565b8060051b9150615603848301614d12565b818152918301840191848101903684111561561c575f80fd5b938501935b838510156156465784359250615636836149f8565b8282529385019390850190615621565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156156b35784516001600160a01b0316825293830193600192909201919083019061568a565b509695505050505050565b60208152815160208201525f602083015160e060408401526156e4610100840182614b5e565b90506040840151601f19808584030160608601526157028383614b5e565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526157328383615658565b925060a08601519150808584030160c0860152506157508282615658565b91505060c084015161576d60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615786575f80fd5b8251915060208301516001600160401b038111156157a2575f80fd5b6157ae85828601614d68565b9150509250929050565b6001600160401b038311156157cf576157cf614cb4565b6157e3836157dd8354614c74565b83614f74565b5f601f841160018114615814575f85156157fd5750838201355b5f19600387901b1c1916600186901b1783556110b3565b5f83815260208120601f198716915b828110156158435786850135825560209485019460019092019101615823565b508682101561585f575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b038083168181036150b2576150b261507356fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a264697066735822122068592a51cd248b2c98772648849a6b8b15ff04656f5778088ac873e795ad631e64736f6c63430008190033", + 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\":\"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\":[{\"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\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"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\":\"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\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"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\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"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\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"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\":\"DelegatorAdded\",\"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\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"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\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"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_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndValidation\",\"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\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"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\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndValidation\",\"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\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"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\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"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\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"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: "0x608060405234801561000f575f80fd5b50604051615c6e380380615c6e83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615b218061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614afc565b610724565b005b348015610263575f80fd5b50610256610272366004614b37565b610735565b348015610282575f80fd5b50610256610291366004614b4e565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614afc565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614b65565b610aae565b34801561030a575f80fd5b50610256610319366004614bb3565b611033565b348015610329575f80fd5b5061033d610338366004614b37565b6110a7565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614be8565b6110fb565b3480156103d9575f80fd5b506102566103e8366004614afc565b61110e565b3480156103f8575f80fd5b50610256610407366004614c36565b61111a565b348015610417575f80fd5b50610256610426366004614be8565b6111ff565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614bb3565b61120b565b34801561047e575f80fd5b5061049261048d366004614c63565b6114d8565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614b37565b6114f8565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614afc565b61150c565b3480156104fc575f80fd5b5061025661050b366004614be8565b611518565b34801561051b575f80fd5b5061025661052a366004614bb3565b611524565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614c7e565b61175e565b34801561056d575f80fd5b5061025661057c366004614b37565b611840565b34801561058c575f80fd5b5061025661059b366004614be8565b6118d4565b3480156105ab575f80fd5b506102566105ba366004614c36565b6118e0565b6104926105cd366004614cbd565b611ad5565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614b37565b611b09565b348015610649575f80fd5b506104925f80516020615a8c83398151915281565b348015610669575f80fd5b50610256610678366004614b37565b611d62565b61049261068b366004614b37565b611e9f565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614b37565b611ed0565b6040516102b89190614d93565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614c7e565b61201f565b348015610710575f80fd5b5061049261071f366004614e13565b6120e6565b6107308383835f612141565b505050565b5f8181525f80516020615acc8339815191526020526040808220815160e0810190925280545f80516020615a8c83398151915293929190829060ff16600581111561078257610782614d1e565b600581111561079357610793614d1e565b81526020016001820180546107a790614e7e565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614e7e565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614d1e565b146108c5575f8381526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190614fb9565b6040518263ffffffff1660e01b815260040161097f9190614fea565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf9190614ffc565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a568361216d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f61217e565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615a8c8339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b679190614ffc565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba16060850160408601615013565b6001600160a01b031614610be457610bbf6060840160408501615013565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf2606085018561502e565b905090505f805b828163ffffffff161015610e59575f610c15606088018861502e565b8363ffffffff16818110610c2b57610c2b615073565b9050602002810190610c3d9190615087565b610c46906150f2565b80516040519192505f916008880191610c5e9161516d565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc9190600401614fea565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd79161516d565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d159190614ffc565b90508086600801835f0151604051610d2d919061516d565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610d6d90826151c2565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610dec9085615291565b8251604051919550610dfd9161516d565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610e52906152a4565b9050610bf9565b50600483018190556001830154606490610e7d90600160401b900460ff16836152c6565b1015610e9f57604051635943317f60e01b8152600481018290526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ec38761253e565b604001516040518263ffffffff1660e01b8152600401610ee39190614fea565b602060405180830381865af4158015610efe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f229190614ffc565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f5c9190615408565b5f60405180830381865af4158015610f76573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f9d9190810190614fb9565b90505f600282604051610fb0919061516d565b602060405180830381855afa158015610fcb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610fee9190614ffc565b905082811461101a5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506009909201805460ff1916600117905550505050565b61103c82612654565b61105c576040516330efa98b60e01b8152600481018390526024016108bc565b5f61106683611ed0565b519050600281600581111561107d5761107d614d1e565b1461109d578060405163170cc93360e21b81526004016108bc9190614eb0565b6109bf838361267d565b5f806110b161291c565b600301546110bf9084615493565b90508015806110d457506001600160401b0381115b156110f55760405163222d164360e21b8152600481018490526024016108bc565b92915050565b6111078484848461217e565b5050505050565b6109bf8383835f612940565b611122612b62565b5f61112b61291c565b90505f8061113884612b99565b9150915061114582612654565b611151575050506111e6565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b039182169116806111885750806111a6565b5f848152600b86016020526040902080546001600160a01b03191690555b6004835160058111156111bb576111bb614d1e565b036111ca576111ca8185612f4c565b6111e0826111db85604001516114d8565b612f76565b50505050505b6111fc60015f80516020615aac83398151915255565b50565b6109bf84848484612f9c565b5f61121461291c565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561124d5761124d614d1e565b600381111561125e5761125e614d1e565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112d482611ed0565b90506001835160038111156112eb576112eb614d1e565b1461130c578251604051633b0d540d60e21b81526108bc91906004016154b2565b60048151600581111561132157611321614d1e565b036113375761132f86612fc8565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61135c8961253e565b604001516040518263ffffffff1660e01b815260040161137c9190614fea565b606060405180830381865af4158015611397573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113bb91906154cc565b50915091508184146113e857846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b031610806114215750806001600160401b03168560a001516001600160401b0316115b1561144a57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114e161291c565b600301546110f5906001600160401b0384166152c6565b5f61150282611ed0565b6080015192915050565b6107308383835f612f9c565b61110784848484612940565b61152c612b62565b5f61153561291c565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561156e5761156e614d1e565b600381111561157f5761157f614d1e565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156115f8576115f8614d1e565b14611619578051604051633b0d540d60e21b81526108bc91906004016154b2565b60046116288260400151611ed0565b51600581111561163a5761163a614d1e565b14611739575f6116498461253e565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116889190614fea565b606060405180830381865af41580156116a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c791906154cc565b5091509150818460400151146116f35760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561173557604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61174284612fc8565b505061175a60015f80516020615aac83398151915255565b5050565b6001600160a01b0381166117905760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f61179961291c565b5f8481526006820160205260409020549091506001600160a01b031633146117e257335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b336001600160a01b03831603611811575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f61184961291c565b90505f61185583611ed0565b519050600481600581111561186c5761186c614d1e565b1461188c578060405163170cc93360e21b81526004016108bc9190614eb0565b5f8381526006830160205260409020546001600160a01b031633146118b157336117bd565b5f838152600683016020526040902054610730906001600160a01b031684612f4c565b6109bf84848484612141565b5f80516020615a8c8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6119138661253e565b604001516040518263ffffffff1660e01b81526004016119339190614fea565b6040805180830381865af415801561194d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119719190615501565b915091508061199757604051632d07135360e01b815281151560048201526024016108bc565b5f828152600684016020526040902080546119b190614e7e565b90505f036119d55760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078501602052604090205460ff1660058111156119fb576119fb614d1e565b14611a2e575f8281526007840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b5f8281526006840160205260408120611a4691614a50565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611ade612b62565b611aea848484346131d5565b9050611b0260015f80516020615aac83398151915255565b9392505050565b5f611b1261291c565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b4b57611b4b614d1e565b6003811115611b5c57611b5c614d1e565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611bd557611bd5614d1e565b14158015611bf65750600381516003811115611bf357611bf3614d1e565b14155b15611c17578051604051633b0d540d60e21b81526108bc91906004016154b2565b5f611c258260400151611ed0565b905080606001516001600160401b03165f03611c57576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611cc593906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611cdf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d069190810190614fb9565b6040518263ffffffff1660e01b8152600401611d229190614fea565b6020604051808303815f875af1158015611d3e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111079190614ffc565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615a8c8339815191529190611da990614e7e565b90505f03611dcd5760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078301602052604090205460ff166005811115611df357611df3614d1e565b14611e26575f8281526007820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611e5f9190600401615524565b6020604051808303815f875af1158015611e7b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107309190614ffc565b5f611ea8612b62565b611eb382333461332f565b9050611ecb60015f80516020615aac83398151915255565b919050565b611ed8614a87565b5f8281525f80516020615acc833981519152602052604090819020815160e0810190925280545f80516020615a8c833981519152929190829060ff166005811115611f2557611f25614d1e565b6005811115611f3657611f36614d1e565b8152602001600182018054611f4a90614e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7690614e7e565b8015611fc15780601f10611f9857610100808354040283529160200191611fc1565b820191905f5260205f20905b815481529060010190602001808311611fa457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b0381166120515760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f61205a61291c565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461208857336117bd565b336001600160a01b038316036120b7575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615a8c833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb089061212990869086906155ae565b90815260200160405180910390205491505092915050565b61214d8484848461217e565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b61217561356f565b6111fc816135ba565b5f8061218861291c565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156121c1576121c1614d1e565b60038111156121d2576121d2614d1e565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61224882611ed0565b905060028351600381111561225f5761225f614d1e565b14612280578251604051633b0d540d60e21b81526108bc91906004016154b2565b60208301516001600160a01b0316331461231c575f8281526006850160205260409020546001600160a01b031633146122b957336117bd565b5f82815260068501602052604090205460a08201516122e891600160b01b90046001600160401b0316906155bd565b6001600160401b031642101561231c5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b60028151600581111561233157612331614d1e565b036124995760028401546080840151612353916001600160401b0316906155bd565b6001600160401b03164210156123875760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b871561239957612397828861267d565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516123d29184916123cd91906155dd565b613634565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124138461380b565b5f8b8152600887016020526040902081905590506001600160a01b0387161561245f575f8a8152600986016020526040902080546001600160a01b0319166001600160a01b0389161790555b60405183908b907f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57905f90a3151594506125369350505050565b6004815160058111156124ae576124ae614d1e565b0361251a576124bc8361380b565b5f8a81526008860160205260409020556001600160a01b03861615612504575f898152600985016020526040902080546001600160a01b0319166001600160a01b0388161790555b61250d89612fc8565b6001945050505050612536565b805160405163170cc93360e21b81526108bc9190600401614eb0565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125a2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125c991908101906155fd565b91509150806125eb57604051636b2f19e960e01b815260040160405180910390fd5b815115612611578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b03161561264d576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f8061265e61291c565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126c8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126ef91908101906155fd565b915091508061271157604051636b2f19e960e01b815260040160405180910390fd5b5f61271a61291c565b6005810154845191925014612748578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b031615612784576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b0316156127c0576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016127fd9190614fea565b6040805180830381865af4158015612817573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061283b919061568d565b915091508188146128625760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b0390811690821611156128f3575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612911565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061294a61291c565b90505f612956876139a2565b905061296187612654565b61297057600192505050612536565b5f8781526006830160205260409020546001600160a01b0316331461299557336117bd565b5f87815260068301602052604090205460a08201516129c491600160b01b90046001600160401b0316906155bd565b6001600160401b03168160c001516001600160401b03161015612a0b5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f8615612a2357612a1c888761267d565b9050612a41565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a66906114d8565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612acf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612af39190614ffc565b90508084600a015f8b81526020019081526020015f205f828254612b179190615291565b90915550506001600160a01b03861615612b54575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615aac833981519152805460011901612b9357604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612ba2614a87565b5f80516020615a8c8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612bd58861253e565b604001516040518263ffffffff1660e01b8152600401612bf59190614fea565b6040805180830381865af4158015612c0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c339190615501565b915091508015612c5a57604051632d07135360e01b815281151560048201526024016108bc565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612c8b57612c8b614d1e565b6005811115612c9c57612c9c614d1e565b8152602001600182018054612cb090614e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054612cdc90614e7e565b8015612d275780601f10612cfe57610100808354040283529160200191612d27565b820191905f5260205f20905b815481529060010190602001808311612d0a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612d9257612d92614d1e565b14158015612db35750600181516005811115612db057612db0614d1e565b14155b15612dd457805160405163170cc93360e21b81526108bc9190600401614eb0565b600381516005811115612de957612de9614d1e565b03612df75760048152612dfc565b600581525b836008018160200151604051612e12919061516d565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612e5657612e56614d1e565b021790555060208201516001820190612e6f90826151c2565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612f1557612f15614d1e565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612f5561291c565b5f838152600a82016020526040812080549190559091506109bf8482613c86565b61175a6001600160a01b03831682613ce4565b60015f80516020615aac83398151915255565b612fa884848484612940565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612fd161291c565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561300a5761300a614d1e565b600381111561301b5761301b614d1e565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091506130b87fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b82608001516130c791906155bd565b6001600160401b03164210156130fb5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b03168061314b57506020820151613169565b5f858152600985016020526040902080546001600160a01b03191690555b5f80613176838886613d77565b9150915061318f85602001516111db87606001516114d8565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131df61291c565b600281015490915061ffff600160401b90910481169086161080613208575061271061ffff8616115b1561322c57604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b039081169085161015613268576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b805483108061327a5750806001015483115b1561329b5760405163222d164360e21b8152600481018490526024016108bc565b825f6132a6826110a7565b90505f6132b38983613e24565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f8061333961291c565b90505f613345846110a7565b90505f61335187611ed0565b905061335c87612654565b61337c576040516330efa98b60e01b8152600481018890526024016108bc565b60028151600581111561339157613391614d1e565b146133b257805160405163170cc93360e21b81526108bc9190600401614eb0565b5f8282608001516133c391906155bd565b905083600201600a9054906101000a90046001600160401b031682604001516133ec91906156b0565b6001600160401b0316816001600160401b0316111561342957604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f806134358a84613634565b915091505f8a8360405160200161346392919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166135b857604051631afcd79f60e31b815260040160405180910390fd5b565b6135c261356f565b6135cb81614349565b6135d3614362565b6111fc606082013560808301356135f060c0850160a08601614c63565b61360060e0860160c087016156db565b613611610100870160e088016156f4565b61010087013561362961014089016101208a01615013565b886101400135614372565b5f8281525f80516020615acc833981519152602052604081206002015481905f80516020615a8c83398151915290600160801b90046001600160401b031661367c8582614557565b5f6136868761477a565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561372f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526137569190810190614fb9565b6040518263ffffffff1660e01b81526004016137729190614fea565b6020604051808303815f875af115801561378e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137b29190614ffc565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061381561291c565b90505f6138258460400151611ed0565b90505f60038251600581111561383d5761383d614d1e565b148061385b575060048251600581111561385957613859614d1e565b145b1561386b575060c08101516138a8565b60028251600581111561388057613880614d1e565b0361388c5750426138a8565b815160405163170cc93360e21b81526108bc9190600401614eb0565b84608001516001600160401b0316816001600160401b0316116138cf57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906138f4906114d8565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613975573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139999190614ffc565b95945050505050565b6139aa614a87565b5f8281525f80516020615acc8339815191526020526040808220815160e0810190925280545f80516020615a8c83398151915293929190829060ff1660058111156139f7576139f7614d1e565b6005811115613a0857613a08614d1e565b8152602001600182018054613a1c90614e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054613a4890614e7e565b8015613a935780601f10613a6a57610100808354040283529160200191613a93565b820191905f5260205f20905b815481529060010190602001808311613a7657829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613b0157613b01614d1e565b14613b34575f8481526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613b7857613b78614d1e565b021790555060208201516001820190613b9190826151c2565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613c2f8582613634565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613cd2575f80fd5b505af115801561132f573d5f803e3d5ffd5b80471015613d075760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613d50576040519150601f19603f3d011682016040523d82523d5f602084013e613d55565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d8261291c565b5f86815260088201602052604081208054908290559192509081908015613e16575f87815260068501602052604090205461271090613dcc90600160a01b900461ffff16836152c6565b613dd69190615493565b91508184600a015f8981526020019081526020015f205f828254613dfa9190615291565b90915550613e0a90508282615714565b9250613e168984613c86565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613e6857604051637fab81e560e01b815260040160405180910390fd5b5f80516020615a8c83398151915242613e876060860160408701614c63565b6001600160401b0316111580613ec15750613ea56202a30042615291565b613eb56060860160408701614c63565b6001600160401b031610155b15613efb57613ed66060850160408601614c63565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b613f10613f0b6060860186615727565b6147ef565b613f20613f0b6080860186615727565b6030613f2f602086018661573b565b905014613f6157613f43602085018561573b565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613f6b848061573b565b90505f03613f9857613f7d848061573b565b604051633e08a12560e11b81526004016108bc92919061577d565b5f60088201613fa7868061573b565b604051613fb59291906155ae565b90815260200160405180910390205414613fee57613fd3848061573b565b60405163a41f772f60e01b81526004016108bc92919061577d565b613ff8835f614557565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce5190602081016140358a8061573b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060209081019061407d908b018b61573b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020016140c660608b0160408c01614c63565b6001600160401b031681526020016140e160608b018b615727565b6140ea90615790565b81526020016140fc60808b018b615727565b61410590615790565b8152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161413391906158bd565b5f60405180830381865af415801561414d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141749190810190615974565b5f8281526006860160205260409020919350915061419282826151c2565b5081600884016141a2888061573b565b6040516141b09291906155ae565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141ec908590600401614fea565b6020604051808303815f875af1158015614208573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061422c9190614ffc565b5f8481526007860160205260409020805460ff191660011790559050614252878061573b565b5f8581526007870160205260409020600101916142709190836159b7565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806142cf888061573b565b6040516142dd9291906155ae565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b604001602081019061431b9190614c63565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b61435161356f565b614359614958565b6111fc81614960565b61436a61356f565b6135b8614a48565b61437a61356f565b5f61438361291c565b905061ffff8616158061439b575061271061ffff8716115b156143bf57604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156143e35760405163222d164360e21b8152600481018a90526024016108bc565b60ff851615806143f65750600a60ff8616115b156144195760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614480576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f036144a05760405163a733007160e01b815260040160405180910390fd5b816144c157604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615a8c8339815191525f6001600160401b03808416908516111561458b5761458483856155dd565b9050614598565b61459584846155dd565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806145fa5750600184015481516145f6916001600160401b031690615291565b8210155b15614620576001600160401b03831660608201528181526040810151602082015261463f565b828160600181815161463291906155bd565b6001600160401b03169052505b606081015161464f9060646156b0565b602082015160018601546001600160401b03929092169161467a9190600160401b900460ff166152c6565b10156146aa57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b856001600160401b0316816040018181516146c59190615291565b9052506040810180516001600160401b03871691906146e5908390615714565b9052506001840154604082015160649161470a91600160401b90910460ff16906152c6565b1015614731578060400151604051635943317f60e01b81526004016108bc91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615acc8339815191526020526040812060020180545f80516020615a8c83398151915291906008906147c490600160401b90046001600160401b0316615a70565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6147fc6020820182614c36565b63ffffffff1615801561481c5750614817602082018261502e565b151590505b156148635761482e6020820182614c36565b61483b602083018361502e565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b614870602082018261502e565b905061487f6020830183614c36565b63ffffffff1611156148985761482e6020820182614c36565b60015b6148a8602083018361502e565b905081101561175a576148be602083018361502e565b6148c9600184615714565b8181106148d8576148d8615073565b90506020020160208101906148ed9190615013565b6001600160a01b0316614903602084018461502e565b8381811061491357614913615073565b90506020020160208101906149289190615013565b6001600160a01b0316101561495057604051630dbc8d5f60e31b815260040160405180910390fd5b60010161489b565b6135b861356f565b61496861356f565b80355f80516020615a8c833981519152908155601461498d60608401604085016156f4565b60ff1611806149ac57506149a760608301604084016156f4565b60ff16155b156149e0576149c160608301604084016156f4565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b6149f060608301604084016156f4565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614a216040830160208401614c63565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612f8961356f565b508054614a5c90614e7e565b5f825580601f10614a6b575050565b601f0160209004905f5260205f20908101906111fc9190614ac4565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614ad8575f8155600101614ac5565b5090565b80151581146111fc575f80fd5b803563ffffffff81168114611ecb575f80fd5b5f805f60608486031215614b0e575f80fd5b833592506020840135614b2081614adc565b9150614b2e60408501614ae9565b90509250925092565b5f60208284031215614b47575f80fd5b5035919050565b5f6101608284031215614b5f575f80fd5b50919050565b5f8060408385031215614b76575f80fd5b82356001600160401b03811115614b8b575f80fd5b830160808186031215614b9c575f80fd5b9150614baa60208401614ae9565b90509250929050565b5f8060408385031215614bc4575f80fd5b82359150614baa60208401614ae9565b6001600160a01b03811681146111fc575f80fd5b5f805f8060808587031215614bfb575f80fd5b843593506020850135614c0d81614adc565b9250614c1b60408601614ae9565b91506060850135614c2b81614bd4565b939692955090935050565b5f60208284031215614c46575f80fd5b611b0282614ae9565b6001600160401b03811681146111fc575f80fd5b5f60208284031215614c73575f80fd5b8135611b0281614c4f565b5f8060408385031215614c8f575f80fd5b823591506020830135614ca181614bd4565b809150509250929050565b803561ffff81168114611ecb575f80fd5b5f805f60608486031215614ccf575f80fd5b83356001600160401b03811115614ce4575f80fd5b840160a08187031215614cf5575f80fd5b9250614d0360208501614cac565b91506040840135614d1381614c4f565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d4257614d42614d1e565b9052565b5f5b83811015614d60578181015183820152602001614d48565b50505f910152565b5f8151808452614d7f816020860160208601614d46565b601f01601f19169290920160200192915050565b60208152614da5602082018351614d32565b5f602083015160e06040840152614dc0610100840182614d68565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614e24575f80fd5b82356001600160401b0380821115614e3a575f80fd5b818501915085601f830112614e4d575f80fd5b813581811115614e5b575f80fd5b866020828501011115614e6c575f80fd5b60209290920196919550909350505050565b600181811c90821680614e9257607f821691505b602082108103614b5f57634e487b7160e01b5f52602260045260245ffd5b602081016110f58284614d32565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ef457614ef4614ebe565b60405290565b604080519081016001600160401b0381118282101715614ef457614ef4614ebe565b604051601f8201601f191681016001600160401b0381118282101715614f4457614f44614ebe565b604052919050565b5f6001600160401b03821115614f6457614f64614ebe565b50601f01601f191660200190565b5f82601f830112614f81575f80fd5b8151614f94614f8f82614f4c565b614f1c565b818152846020838601011115614fa8575f80fd5b612536826020830160208701614d46565b5f60208284031215614fc9575f80fd5b81516001600160401b03811115614fde575f80fd5b61253684828501614f72565b602081525f611b026020830184614d68565b5f6020828403121561500c575f80fd5b5051919050565b5f60208284031215615023575f80fd5b8135611b0281614bd4565b5f808335601e19843603018112615043575f80fd5b8301803591506001600160401b0382111561505c575f80fd5b6020019150600581901b3603821315613804575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261509b575f80fd5b9190910192915050565b5f82601f8301126150b4575f80fd5b81356150c2614f8f82614f4c565b8181528460208386010111156150d6575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615102575f80fd5b61510a614ed2565b82356001600160401b0380821115615120575f80fd5b61512c368387016150a5565b83526020850135915080821115615141575f80fd5b5061514e368286016150a5565b602083015250604083013561516281614c4f565b604082015292915050565b5f825161509b818460208701614d46565b601f82111561073057805f5260205f20601f840160051c810160208510156151a35750805b601f840160051c820191505b81811015611107575f81556001016151af565b81516001600160401b038111156151db576151db614ebe565b6151ef816151e98454614e7e565b8461517e565b602080601f831160018114615222575f841561520b5750858301515b5f19600386901b1c1916600185901b17855561132f565b5f85815260208120601f198616915b8281101561525057888601518255948401946001909101908401615231565b508582101561526d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808201808211156110f5576110f561527d565b5f63ffffffff8083168181036152bc576152bc61527d565b6001019392505050565b80820281158282048414176110f5576110f561527d565b5f808335601e198436030181126152f2575f80fd5b83016020810192503590506001600160401b03811115615310575f80fd5b803603821315613804575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156153fb57848303601f19018952813536889003605e19018112615382575f80fd5b8701606061539082806152dd565b8287526153a0838801828461531e565b925050506153b0868301836152dd565b868303888801526153c283828461531e565b9250505060408083013592506153d783614c4f565b6001600160401b03929092169490910193909352978301979083019060010161535d565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561542c81614bd4565b6001600160a01b031660608381019190915283013536849003601e19018112615453575f80fd5b83016020810190356001600160401b0381111561546e575f80fd5b8060051b360382131561547f575f80fd5b60808085015261399960a085018284615346565b5f826154ad57634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106154c6576154c6614d1e565b91905290565b5f805f606084860312156154de575f80fd5b8351925060208401516154f081614c4f565b6040850151909250614d1381614c4f565b5f8060408385031215615512575f80fd5b825191506020830151614ca181614adc565b5f60208083525f845461553681614e7e565b806020870152604060018084165f81146155575760018114615573576155a0565b60ff19851660408a0152604084151560051b8a010195506155a0565b895f5260205f205f5b858110156155975781548b820186015290830190880161557c565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0381811683821601908082111561264d5761264d61527d565b6001600160401b0382811682821603908082111561264d5761264d61527d565b5f806040838503121561560e575f80fd5b82516001600160401b0380821115615624575f80fd5b9084019060608287031215615637575f80fd5b61563f614ed2565b82518152602083015161565181614bd4565b6020820152604083015182811115615667575f80fd5b61567388828601614f72565b6040830152508094505050506020830151614ca181614adc565b5f806040838503121561569e575f80fd5b825191506020830151614ca181614c4f565b6001600160401b038181168382160280821691908281146156d3576156d361527d565b505092915050565b5f602082840312156156eb575f80fd5b611b0282614cac565b5f60208284031215615704575f80fd5b813560ff81168114611b02575f80fd5b818103818111156110f5576110f561527d565b5f8235603e1983360301811261509b575f80fd5b5f808335601e19843603018112615750575f80fd5b8301803591506001600160401b03821115615769575f80fd5b602001915036819003821315613804575f80fd5b602081525f61253660208301848661531e565b5f604082360312156157a0575f80fd5b6157a8614efa565b6157b183614ae9565b81526020808401356001600160401b03808211156157cd575f80fd5b9085019036601f8301126157df575f80fd5b8135818111156157f1576157f1614ebe565b8060051b9150615802848301614f1c565b818152918301840191848101903684111561581b575f80fd5b938501935b83851015615845578435925061583583614bd4565b8282529385019390850190615820565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158b25784516001600160a01b03168252938301936001929092019190830190615889565b509695505050505050565b60208152815160208201525f602083015160e060408401526158e3610100840182614d68565b90506040840151601f19808584030160608601526159018383614d68565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159318383615857565b925060a08601519150808584030160c08601525061594f8282615857565b91505060c084015161596c60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615985575f80fd5b8251915060208301516001600160401b038111156159a1575f80fd5b6159ad85828601614f72565b9150509250929050565b6001600160401b038311156159ce576159ce614ebe565b6159e2836159dc8354614e7e565b8361517e565b5f601f841160018114615a13575f85156159fc5750838201355b5f19600387901b1c1916600186901b178355611107565b5f83815260208120601f198716915b82811015615a425786850135825560209485019460019092019101615a22565b5086821015615a5e575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b038083168181036152bc576152bc61527d56fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a264697066735822122066d8fe3959bbe03128ad387ab9a58a89f20eb530a034f03297d5b266e8c3a48864736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. @@ -804,6 +804,48 @@ func (_NativeTokenStakingManager *NativeTokenStakingManagerCallerSession) Weight return _NativeTokenStakingManager.Contract.WeightToValue(&_NativeTokenStakingManager.CallOpts, weight) } +// ChangeDelegatorRewardRecipient is a paid mutator transaction binding the contract method 0xfb8b11dd. +// +// Solidity: function changeDelegatorRewardRecipient(bytes32 delegationID, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ChangeDelegatorRewardRecipient(opts *bind.TransactOpts, delegationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "changeDelegatorRewardRecipient", delegationID, rewardRecipient) +} + +// ChangeDelegatorRewardRecipient is a paid mutator transaction binding the contract method 0xfb8b11dd. +// +// Solidity: function changeDelegatorRewardRecipient(bytes32 delegationID, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ChangeDelegatorRewardRecipient(delegationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ChangeDelegatorRewardRecipient(&_NativeTokenStakingManager.TransactOpts, delegationID, rewardRecipient) +} + +// ChangeDelegatorRewardRecipient is a paid mutator transaction binding the contract method 0xfb8b11dd. +// +// Solidity: function changeDelegatorRewardRecipient(bytes32 delegationID, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ChangeDelegatorRewardRecipient(delegationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ChangeDelegatorRewardRecipient(&_NativeTokenStakingManager.TransactOpts, delegationID, rewardRecipient) +} + +// ChangeValidatorRewardRecipient is a paid mutator transaction binding the contract method 0x8ef34c98. +// +// Solidity: function changeValidatorRewardRecipient(bytes32 validationID, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactor) ChangeValidatorRewardRecipient(opts *bind.TransactOpts, validationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.contract.Transact(opts, "changeValidatorRewardRecipient", validationID, rewardRecipient) +} + +// ChangeValidatorRewardRecipient is a paid mutator transaction binding the contract method 0x8ef34c98. +// +// Solidity: function changeValidatorRewardRecipient(bytes32 validationID, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerSession) ChangeValidatorRewardRecipient(validationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ChangeValidatorRewardRecipient(&_NativeTokenStakingManager.TransactOpts, validationID, rewardRecipient) +} + +// ChangeValidatorRewardRecipient is a paid mutator transaction binding the contract method 0x8ef34c98. +// +// Solidity: function changeValidatorRewardRecipient(bytes32 validationID, address rewardRecipient) returns() +func (_NativeTokenStakingManager *NativeTokenStakingManagerTransactorSession) ChangeValidatorRewardRecipient(validationID [32]byte, rewardRecipient common.Address) (*types.Transaction, error) { + return _NativeTokenStakingManager.Contract.ChangeValidatorRewardRecipient(&_NativeTokenStakingManager.TransactOpts, validationID, rewardRecipient) +} + // ClaimDelegationFees is a paid mutator transaction binding the contract method 0x93e24598. // // Solidity: function claimDelegationFees(bytes32 validationID) returns() diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index f91ca5cd2..4ca08a0c3 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -86,6 +86,7 @@ abstract contract PoSValidatorManager is error InvalidDelegationID(bytes32 delegationID); error InvalidDelegatorStatus(DelegatorStatus status); error InvalidNonce(uint64 nonce); + error InvalidRewardRecipient(address rewardRecipient); error InvalidStakeAmount(uint256 stakeAmount); error InvalidMinStakeDuration(uint64 minStakeDuration); error InvalidStakeMultiplier(uint8 maximumStakeMultiplier); @@ -274,6 +275,48 @@ abstract contract PoSValidatorManager is _initializeEndPoSValidation(validationID, includeUptimeProof, messageIndex, rewardRecipient); } + function changeValidatorRewardRecipient( + bytes32 validationID, + address rewardRecipient + ) external { + if (rewardRecipient == address(0)) { + revert InvalidRewardRecipient(rewardRecipient); + } + + PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); + + if ($._posValidatorInfo[validationID].owner != _msgSender()) { + revert UnauthorizedOwner(_msgSender()); + } + + if (rewardRecipient == _msgSender()) { + delete $._rewardRecipients[validationID]; + } else { + $._rewardRecipients[validationID] = rewardRecipient; + } + } + + function changeDelegatorRewardRecipient( + bytes32 delegationID, + address rewardRecipient + ) external { + if (rewardRecipient == address(0)) { + revert InvalidRewardRecipient(rewardRecipient); + } + + PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); + + if ($._delegatorStakes[delegationID].owner != _msgSender()) { + revert UnauthorizedOwner(_msgSender()); + } + + if (rewardRecipient == _msgSender()) { + delete $._delegatorRewardRecipients[delegationID]; + } else { + $._delegatorRewardRecipients[delegationID] = rewardRecipient; + } + } + /** * @dev Helper function that initializes the end of a PoS validation period. * Returns false if it is possible for the validator to claim rewards, but it is not eligible. diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index 211507760..e39b85f29 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -674,6 +674,54 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } + function testChangeDelegatorRewardRecipient() public { + bytes32 validationID = _registerDefaultValidator(); + bytes32 delegationID = _registerDefaultDelegator(validationID); + address rewardRecipient = address(42); + address newRewardRecipient = address(43); + + _initializeEndDelegationValidatorActiveWithChecks({ + validationID: validationID, + sender: DEFAULT_DELEGATOR_ADDRESS, + delegationID: delegationID, + startDelegationTimestamp: DEFAULT_DELEGATOR_INIT_REGISTRATION_TIMESTAMP, + endDelegationTimestamp: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + includeUptime: true, + force: false, + rewardRecipient: rewardRecipient + }); + + vm.prank(DEFAULT_DELEGATOR_ADDRESS); + posValidatorManager.changeDelegatorRewardRecipient(delegationID, newRewardRecipient); + + uint256 expectedTotalReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_DELEGATOR_WEIGHT), + validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingStartTime: DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP, + stakingEndTime: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + uptimeSeconds: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + }); + + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + + _completeEndDelegationWithChecks({ + validationID: validationID, + delegationID: delegationID, + delegator: DEFAULT_DELEGATOR_ADDRESS, + delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, + validatorWeight: DEFAULT_WEIGHT, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + rewardRecipient: newRewardRecipient + }); + } + // Delegator registration is not allowed when Validator is pending removed. function testInitializeDelegatorRegistrationValidatorPendingRemoved() public { bytes32 validationID = _registerDefaultValidator(); @@ -1170,6 +1218,45 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } + function testChangeRewardRecipient() public virtual { + bytes32 validationID = _registerDefaultValidator(); + bytes memory setWeightMessage = + ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); + bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( + validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + ); + address rewardRecipient = address(42); + address newRecipient = address(43); + + _initializeEndValidation({ + validationID: validationID, + completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, + setWeightMessage: setWeightMessage, + includeUptime: true, + uptimeMessage: uptimeMessage, + force: false, + recipientAddress: rewardRecipient + }); + + posValidatorManager.changeValidatorRewardRecipient(validationID, newRecipient); + + uint256 expectedReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_WEIGHT), + validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingEndTime: DEFAULT_COMPLETION_TIMESTAMP, + uptimeSeconds: DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + }); + + _completeEndValidationWithChecks({ + validationID: validationID, + validatorOwner: address(this), + expectedReward: expectedReward, + validatorWeight: DEFAULT_WEIGHT, + rewardRecipient: newRecipient + }); + } + function testInitializeEndValidation() public virtual override { bytes32 validationID = _registerDefaultValidator(); bytes memory setWeightMessage = From e1aaa3ac7db1addf683b813212e9e318231532e5 Mon Sep 17 00:00:00 2001 From: Richard Pringle Date: Wed, 20 Nov 2024 10:53:12 -0500 Subject: [PATCH 03/10] Make sure changing delegator reward recipient fails for nil address --- .../tests/PoSValidatorManagerTests.t.sol | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index e39b85f29..b6ab144ba 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -674,6 +674,36 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } + function testChangeDelegatorRewardRecipientWithNullAddress() public { + bytes32 validationID = _registerDefaultValidator(); + bytes32 delegationID = _registerDefaultDelegator(validationID); + address rewardRecipient = address(42); + address newRewardRecipient = address(0); + + _initializeEndDelegationValidatorActiveWithChecks({ + validationID: validationID, + sender: DEFAULT_DELEGATOR_ADDRESS, + delegationID: delegationID, + startDelegationTimestamp: DEFAULT_DELEGATOR_INIT_REGISTRATION_TIMESTAMP, + endDelegationTimestamp: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + includeUptime: true, + force: false, + rewardRecipient: rewardRecipient + }); + + vm.prank(DEFAULT_DELEGATOR_ADDRESS); + + vm.expectRevert( + abi.encodeWithSelector( + PoSValidatorManager.InvalidRewardRecipient.selector, newRewardRecipient + ) + ); + + posValidatorManager.changeDelegatorRewardRecipient(delegationID, newRewardRecipient); + } + function testChangeDelegatorRewardRecipient() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); From 5a5423bc9cca2c392f953f85b23dcb09e4f9c2eb Mon Sep 17 00:00:00 2001 From: Richard Pringle Date: Wed, 20 Nov 2024 14:33:18 -0500 Subject: [PATCH 04/10] Finish testing --- .../tests/PoSValidatorManagerTests.t.sol | 238 +++++++++++++++--- 1 file changed, 208 insertions(+), 30 deletions(-) diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index b6ab144ba..b05192410 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -464,14 +464,16 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { expectedNonce: 1 }); + address validatorOwner = address(this); + _endValidationWithChecks({ validationID: validationID, - validatorOwner: address(this), + validatorOwner: validatorOwner, completeRegistrationTimestamp: DEFAULT_REGISTRATION_TIMESTAMP, completionTimestamp: delegatorRegistrationTime + 1, validatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, - rewardRecipient: address(0) + rewardRecipient: validatorOwner }); uint64 invalidEndTime = delegatorRegistrationTime + DEFAULT_CHURN_PERIOD - 1; @@ -615,18 +617,19 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint256 expectedValidatorFees = _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + address delegator = DEFAULT_DELEGATOR_ADDRESS; _completeEndDelegationWithChecks({ validationID: validationID, delegationID: delegationID, - delegator: DEFAULT_DELEGATOR_ADDRESS, + delegator: delegator, delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, expectedValidatorFees: expectedValidatorFees, expectedDelegatorReward: expectedDelegatorReward, validatorWeight: DEFAULT_WEIGHT, expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, - rewardRecipient: address(0) + rewardRecipient: delegator }); } @@ -704,6 +707,82 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { posValidatorManager.changeDelegatorRewardRecipient(delegationID, newRewardRecipient); } + function testChangeDelegatorRewardRecipientByNonDelegator() public { + bytes32 validationID = _registerDefaultValidator(); + bytes32 delegationID = _registerDefaultDelegator(validationID); + address rewardRecipient = address(42); + address badActor = address(43); + + _initializeEndDelegationValidatorActiveWithChecks({ + validationID: validationID, + sender: DEFAULT_DELEGATOR_ADDRESS, + delegationID: delegationID, + startDelegationTimestamp: DEFAULT_DELEGATOR_INIT_REGISTRATION_TIMESTAMP, + endDelegationTimestamp: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + includeUptime: true, + force: false, + rewardRecipient: rewardRecipient + }); + + vm.prank(badActor); + + vm.expectRevert( + abi.encodeWithSelector(PoSValidatorManager.UnauthorizedOwner.selector, badActor) + ); + + posValidatorManager.changeDelegatorRewardRecipient(delegationID, badActor); + } + + function testChangeDelegatorRewardRecipientBackToSelf() public { + bytes32 validationID = _registerDefaultValidator(); + bytes32 delegationID = _registerDefaultDelegator(validationID); + address rewardRecipient = address(42); + + _initializeEndDelegationValidatorActiveWithChecks({ + validationID: validationID, + sender: DEFAULT_DELEGATOR_ADDRESS, + delegationID: delegationID, + startDelegationTimestamp: DEFAULT_DELEGATOR_INIT_REGISTRATION_TIMESTAMP, + endDelegationTimestamp: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + includeUptime: true, + force: false, + rewardRecipient: rewardRecipient + }); + + vm.prank(DEFAULT_DELEGATOR_ADDRESS); + + posValidatorManager.changeDelegatorRewardRecipient(delegationID, DEFAULT_DELEGATOR_ADDRESS); + + uint256 expectedTotalReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_DELEGATOR_WEIGHT), + validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingStartTime: DEFAULT_DELEGATOR_COMPLETE_REGISTRATION_TIMESTAMP, + stakingEndTime: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP, + uptimeSeconds: DEFAULT_DELEGATOR_END_DELEGATION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + }); + + uint256 expectedValidatorFees = + _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); + uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + + _completeEndDelegationWithChecks({ + validationID: validationID, + delegationID: delegationID, + delegator: DEFAULT_DELEGATOR_ADDRESS, + delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, + expectedValidatorFees: expectedValidatorFees, + expectedDelegatorReward: expectedDelegatorReward, + validatorWeight: DEFAULT_WEIGHT, + expectedValidatorWeight: DEFAULT_WEIGHT, + expectedNonce: 2, + rewardRecipient: DEFAULT_DELEGATOR_ADDRESS + }); + } + function testChangeDelegatorRewardRecipient() public { bytes32 validationID = _registerDefaultValidator(); bytes32 delegationID = _registerDefaultDelegator(validationID); @@ -894,17 +973,19 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + address delegator = DEFAULT_DELEGATOR_ADDRESS; + _completeEndDelegationWithChecks({ validationID: validationID, delegationID: delegationID, - delegator: DEFAULT_DELEGATOR_ADDRESS, + delegator: delegator, delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, expectedValidatorFees: expectedValidatorFees, expectedDelegatorReward: expectedDelegatorReward, validatorWeight: DEFAULT_WEIGHT, expectedValidatorWeight: 0, expectedNonce: 2, - rewardRecipient: address(0) + rewardRecipient: delegator }); } @@ -1164,18 +1245,20 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + address delegator = DEFAULT_DELEGATOR_ADDRESS; + // Complete delegation1 by delivering the weight update from nonce 4 (delegator2's nonce) _completeEndDelegationWithChecks({ validationID: validationID, delegationID: delegationID1, - delegator: DEFAULT_DELEGATOR_ADDRESS, + delegator: delegator, delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, expectedValidatorFees: expectedValidatorFees, expectedDelegatorReward: expectedDelegatorReward, validatorWeight: DEFAULT_WEIGHT, expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 4, - rewardRecipient: address(0) + rewardRecipient: delegator }); } @@ -1203,12 +1286,14 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uptimeSeconds: DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP }); + address validatorOwner = address(this); + _completeEndValidationWithChecks({ validationID: validationID, - validatorOwner: address(this), + validatorOwner: validatorOwner, expectedReward: expectedReward, validatorWeight: DEFAULT_WEIGHT, - rewardRecipient: address(0) + rewardRecipient: validatorOwner }); } @@ -1239,16 +1324,18 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uptimeSeconds: DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP }); + address validatorOwner = address(this); + _completeEndValidationWithChecks({ validationID: validationID, - validatorOwner: address(this), + validatorOwner: validatorOwner, expectedReward: expectedReward, validatorWeight: DEFAULT_WEIGHT, rewardRecipient: rewardRecipient }); } - function testChangeRewardRecipient() public virtual { + function testChangeValidatorRewardRecipient() public virtual { bytes32 validationID = _registerDefaultValidator(); bytes memory setWeightMessage = ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); @@ -1287,6 +1374,105 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { }); } + function testChangeValidatorRewardRecipientBackToSelf() public { + bytes32 validationID = _registerDefaultValidator(); + bytes memory setWeightMessage = + ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); + bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( + validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + ); + address rewardRecipient = address(42); + address newRecipient = address(this); + + _initializeEndValidation({ + validationID: validationID, + completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, + setWeightMessage: setWeightMessage, + includeUptime: true, + uptimeMessage: uptimeMessage, + force: false, + recipientAddress: rewardRecipient + }); + + posValidatorManager.changeValidatorRewardRecipient(validationID, newRecipient); + + uint256 expectedReward = rewardCalculator.calculateReward({ + stakeAmount: _weightToValue(DEFAULT_WEIGHT), + validatorStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingStartTime: DEFAULT_REGISTRATION_TIMESTAMP, + stakingEndTime: DEFAULT_COMPLETION_TIMESTAMP, + uptimeSeconds: DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + }); + + address validatorOwner = address(this); + + _completeEndValidationWithChecks({ + validationID: validationID, + validatorOwner: validatorOwner, + expectedReward: expectedReward, + validatorWeight: DEFAULT_WEIGHT, + rewardRecipient: validatorOwner + }); + } + + function testChangeValidatorRewardRecipientWithNullAddress() public virtual { + bytes32 validationID = _registerDefaultValidator(); + bytes memory setWeightMessage = + ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); + bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( + validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + ); + address rewardRecipient = address(42); + address newRecipient = address(0); + + _initializeEndValidation({ + validationID: validationID, + completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, + setWeightMessage: setWeightMessage, + includeUptime: true, + uptimeMessage: uptimeMessage, + force: false, + recipientAddress: rewardRecipient + }); + + vm.expectRevert( + abi.encodeWithSelector( + PoSValidatorManager.InvalidRewardRecipient.selector, newRecipient + ) + ); + + posValidatorManager.changeValidatorRewardRecipient(validationID, newRecipient); + } + + function testChangeValidatorRewardRecipientByNonValidator() public { + bytes32 validationID = _registerDefaultValidator(); + bytes memory setWeightMessage = + ValidatorMessages.packL1ValidatorWeightMessage(validationID, 1, 0); + bytes memory uptimeMessage = ValidatorMessages.packValidationUptimeMessage( + validationID, DEFAULT_COMPLETION_TIMESTAMP - DEFAULT_REGISTRATION_TIMESTAMP + ); + address rewardRecipient = address(42); + address badActor = address(43); + + _initializeEndValidation({ + validationID: validationID, + completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, + setWeightMessage: setWeightMessage, + includeUptime: true, + uptimeMessage: uptimeMessage, + force: false, + recipientAddress: rewardRecipient + }); + + vm.prank(badActor); + + vm.expectRevert( + abi.encodeWithSelector(PoSValidatorManager.UnauthorizedOwner.selector, badActor) + ); + + posValidatorManager.changeValidatorRewardRecipient(validationID, badActor); + } + function testInitializeEndValidation() public virtual override { bytes32 validationID = _registerDefaultValidator(); bytes memory setWeightMessage = @@ -1733,14 +1919,15 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { } function _endDefaultValidator(bytes32 validationID, uint64 expectedNonce) internal { + address validatorOwner = address(this); _endValidationWithChecks({ validationID: validationID, - validatorOwner: address(this), + validatorOwner: validatorOwner, completeRegistrationTimestamp: DEFAULT_REGISTRATION_TIMESTAMP, completionTimestamp: DEFAULT_COMPLETION_TIMESTAMP, validatorWeight: DEFAULT_WEIGHT, expectedNonce: expectedNonce, - rewardRecipient: address(0) + rewardRecipient: validatorOwner }); } @@ -1800,16 +1987,11 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint256 rewardRecipientBalanceBefore = _getStakeAssetBalance(rewardRecipient); _expectStakeUnlock(validatorOwner, _weightToValue(validatorWeight)); - - if (rewardRecipient != address(0)) { - _expectRewardIssuance(rewardRecipient, expectedReward); - } else { - _expectRewardIssuance(validatorOwner, expectedReward); - } + _expectRewardIssuance(rewardRecipient, expectedReward); _completeEndValidation(subnetValidatorRegistrationMessage); - if (rewardRecipient == address(0)) { + if (rewardRecipient == validatorOwner) { assertEq( _getStakeAssetBalance(validatorOwner), balanceBefore + _weightToValue(validatorWeight) + expectedReward @@ -1856,18 +2038,13 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint256 rewardRecipientBalanceBefore = _getStakeAssetBalance(rewardRecipient); _expectStakeUnlock(delegator, _weightToValue(delegatorWeight)); - - if (rewardRecipient != address(0)) { - _expectRewardIssuance(rewardRecipient, expectedDelegatorReward); - } else { - _expectRewardIssuance(delegator, expectedDelegatorReward); - } + _expectRewardIssuance(rewardRecipient, expectedDelegatorReward); _completeEndDelegation(delegationID, weightUpdateMessage); assertEq(posValidatorManager.getWeight(validationID), expectedValidatorWeight); - if (rewardRecipient == address(0)) { + if (rewardRecipient == delegator) { assertEq( _getStakeAssetBalance(delegator), balanceBefore + _weightToValue(delegatorWeight) + expectedDelegatorReward @@ -1920,18 +2097,19 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint256 expectedValidatorFees = _calculateValidatorFeesFromDelegator(expectedTotalReward, DEFAULT_DELEGATION_FEE_BIPS); uint256 expectedDelegatorReward = expectedTotalReward - expectedValidatorFees; + address delegator = DEFAULT_DELEGATOR_ADDRESS; _completeEndDelegationWithChecks({ validationID: validationID, delegationID: delegationID, - delegator: DEFAULT_DELEGATOR_ADDRESS, + delegator: delegator, delegatorWeight: DEFAULT_DELEGATOR_WEIGHT, expectedValidatorFees: expectedValidatorFees, expectedDelegatorReward: expectedDelegatorReward, validatorWeight: DEFAULT_WEIGHT, expectedValidatorWeight: DEFAULT_WEIGHT, expectedNonce: 2, - rewardRecipient: address(0) + rewardRecipient: delegator }); } From b68e47733577f86309ccbc80e7787c9a680ff3dc Mon Sep 17 00:00:00 2001 From: Richard Pringle Date: Wed, 20 Nov 2024 17:15:15 -0500 Subject: [PATCH 05/10] Remove redundant test-methods --- .../tests/PoAValidatorManagerTests.t.sol | 8 ------- .../tests/PoSValidatorManagerTests.t.sol | 22 ++++--------------- .../tests/ValidatorManagerTests.t.sol | 16 +++++--------- 3 files changed, 9 insertions(+), 37 deletions(-) diff --git a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol index 114244c93..12cae7e9b 100644 --- a/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoAValidatorManagerTests.t.sol @@ -57,10 +57,6 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { return app.initializeValidatorRegistration(input, weight); } - function _initializeEndValidation(bytes32 validationID, bool) internal virtual override { - return app.initializeEndValidation(validationID); - } - function _initializeEndValidation( bytes32 validationID, bool, @@ -69,10 +65,6 @@ contract PoAValidatorManagerTest is ValidatorManagerTest { return app.initializeEndValidation(validationID); } - function _forceInitializeEndValidation(bytes32 validationID, bool) internal virtual override { - return app.initializeEndValidation(validationID); - } - function _forceInitializeEndValidation( bytes32 validationID, bool, diff --git a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol index b05192410..7a93de3c7 100644 --- a/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/PoSValidatorManagerTests.t.sol @@ -1524,7 +1524,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); - _initializeEndValidation(validationID, true); + _initializeEndValidation(validationID, true, address(0)); } function testInitializeEndValidationInsufficientUptime() public { @@ -1548,7 +1548,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ) ); - _initializeEndValidation(validationID, true); + _initializeEndValidation(validationID, true, address(0)); } function testInitializeEndValidationPoAValidator() public { @@ -1563,7 +1563,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { defaultInitialValidationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); - _initializeEndValidation(defaultInitialValidationID, false); + _initializeEndValidation(defaultInitialValidationID, false, address(0)); } function testForceInitializeEndValidation() public { @@ -1603,7 +1603,7 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { validationID, bytes32(0), DEFAULT_WEIGHT, DEFAULT_COMPLETION_TIMESTAMP ); - _forceInitializeEndValidation(validationID, true); + _forceInitializeEndValidation(validationID, true, address(0)); } function testValueToWeightTruncated() public { @@ -1656,13 +1656,6 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { uint256 stakeAmount ) internal virtual returns (bytes32); - function _initializeEndValidation( - bytes32 validationID, - bool includeUptime - ) internal virtual override { - posValidatorManager.initializeEndValidation(validationID, includeUptime, 0); - } - function _initializeEndValidation( bytes32 validationID, bool includeUptime, @@ -1673,13 +1666,6 @@ abstract contract PoSValidatorManagerTest is ValidatorManagerTest { ); } - function _forceInitializeEndValidation( - bytes32 validationID, - bool includeUptime - ) internal virtual override { - posValidatorManager.forceInitializeEndValidation(validationID, includeUptime, 0); - } - function _forceInitializeEndValidation( bytes32 validationID, bool includeUptime, diff --git a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol index dc4fe8f64..2785825fe 100644 --- a/contracts/validator-manager/tests/ValidatorManagerTests.t.sol +++ b/contracts/validator-manager/tests/ValidatorManagerTests.t.sol @@ -316,7 +316,7 @@ abstract contract ValidatorManagerTest is Test { bytes32 validationID = sha256(abi.encodePacked(DEFAULT_SUBNET_ID, uint32(0))); vm.expectRevert(abi.encodeWithSelector(ValidatorManager.InvalidTotalWeight.selector, 4)); - _forceInitializeEndValidation(validationID, false); + _forceInitializeEndValidation(validationID, false, address(0)); } function testCumulativeChurnRegistration() public { @@ -389,7 +389,8 @@ abstract contract ValidatorManagerTest is Test { _valueToWeight(DEFAULT_MINIMUM_STAKE_AMOUNT) + churnThreshold ) ); - _initializeEndValidation(validationID, false); + + _initializeEndValidation(validationID, false, address(0)); } function testValidatorManagerStorageSlot() public view { @@ -491,9 +492,9 @@ abstract contract ValidatorManagerTest is Test { vm.warp(completionTimestamp); if (force) { - _forceInitializeEndValidation(validationID, includeUptime); + _forceInitializeEndValidation(validationID, includeUptime, address(0)); } else { - _initializeEndValidation(validationID, includeUptime); + _initializeEndValidation(validationID, includeUptime, address(0)); } } @@ -603,19 +604,12 @@ abstract contract ValidatorManagerTest is Test { uint64 weight ) internal virtual returns (bytes32); - function _initializeEndValidation(bytes32 validationID, bool includeUptime) internal virtual; - function _initializeEndValidation( bytes32 validationID, bool includeUptime, address rewardRecipient ) internal virtual; - function _forceInitializeEndValidation( - bytes32 validationID, - bool includeUptime - ) internal virtual; - function _forceInitializeEndValidation( bytes32 validationID, bool includeUptime, From 413237711ac4b3d10a8ee251b4831cb7cc28318f Mon Sep 17 00:00:00 2001 From: Richard Pringle Date: Wed, 20 Nov 2024 17:43:40 -0500 Subject: [PATCH 06/10] Add new functions to PoSValdiatorManager interface --- .../ERC20TokenStakingManager.go | 2 +- .../NativeTokenStakingManager.go | 2 +- .../interfaces/IPoSValidatorManager.sol | 36 +++++++++++++++++++ 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index 9aca93bfb..0ccb8b670 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -104,7 +104,7 @@ type ValidatorRegistrationInput 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\":\"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\":[{\"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\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"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\":\"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\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"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\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"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\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"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\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"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\":\"DelegatorAdded\",\"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\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"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\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndValidation\",\"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\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"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\":\"structPoSValidatorManagerSettings\",\"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\":\"initializeDelegatorRegistration\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndValidation\",\"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\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"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\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"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\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"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: "0x608060405234801561000f575f80fd5b50604051615f0f380380615f0f83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615dc28061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061023f575f3560e01c806380dd672f11610135578063b771b3bc116100b4578063d5f20ff611610079578063d5f20ff614610516578063df93d8de14610536578063e4a63c4014610540578063fb8b11dd14610554578063fd7ac5e714610567575f80fd5b8063b771b3bc146104ae578063ba3a4b97146104d4578063bc5fbfec146104e7578063bee0a03f146104fb578063c974d1b61461050e575f80fd5b80639e1bc4ef116100fa5780639e1bc4ef1461044e5780639e478eea14610461578063a3a65e4814610474578063a9778a7a146102ee578063afb9809614610487575f80fd5b806380dd672f146103fa5780638280a25a1461040d5780638ef34c981461041557806393e24598146104285780639ae064471461043b575f80fd5b8063467ef06f116101c1578063620658561161018657806362065856146103a757806366435abf146103ba578063732214f8146103cd57806376f78621146103d45780637d8d2f77146103e7575f80fd5b8063467ef06f146103305780634bee0040146103435780635dd6a6cb1461036457806360305d621461037757806360ad778414610394575f80fd5b806325e1c7761161020757806325e1c776146102b05780632e2194d8146102c357806335455ded146102ee57806337b9be8f1461030a5780633a1cfff61461031d575f80fd5b80630118acc4146102435780630322ed9814610258578063151d30d11461026b5780631ec447241461028a57806320d91b7a1461029d575b5f80fd5b610256610251366004614d0f565b61057a565b005b610256610266366004614d4a565b61058b565b610273600a81565b60405160ff90911681526020015b60405180910390f35b610256610298366004614d0f565b61081b565b6102566102ab366004614d61565b610827565b6102566102be366004614daf565b610dac565b6102d66102d1366004614d4a565b610e20565b6040516001600160401b039091168152602001610281565b6102f761271081565b60405161ffff9091168152602001610281565b610256610318366004614de4565b610e74565b61025661032b366004614d0f565b610e87565b61025661033e366004614e32565b610e93565b610356610351366004614e70565b610f78565b604051908152602001610281565b610256610372366004614de4565b610fad565b61037f601481565b60405163ffffffff9091168152602001610281565b6102566103a2366004614daf565b610fb9565b6103566103b5366004614ed7565b611286565b6102d66103c8366004614d4a565b6112a6565b6103565f81565b6102566103e2366004614d0f565b6112ba565b6102566103f5366004614de4565b6112c6565b610256610408366004614daf565b6112d2565b610273603081565b610256610423366004614ef2565b61150c565b610256610436366004614d4a565b6115ee565b610256610449366004614de4565b611682565b61035661045c366004614f20565b61168e565b61025661046f366004614f40565b6116ba565b610256610482366004614e32565b611799565b6103567f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104bc6005600160991b0181565b6040516001600160a01b039091168152602001610281565b6102566104e2366004614d4a565b61198e565b6103565f80516020615d2d83398151915281565b610256610509366004614d4a565b611be7565b610273601481565b610529610524366004614d4a565b611d24565b6040516102819190614fe8565b6102d66202a30081565b6103565f80516020615d0d83398151915281565b610256610562366004614ef2565b611e73565b610356610575366004615068565b611f3a565b6105868383835f611f95565b505050565b5f8181525f80516020615d6d8339815191526020526040808220815160e0810190925280545f80516020615d2d83398151915293929190829060ff1660058111156105d8576105d8614f73565b60058111156105e9576105e9614f73565b81526020016001820180546105fd906150d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610629906150d3565b80156106745780601f1061064b57610100808354040283529160200191610674565b820191905f5260205f20905b81548152906001019060200180831161065757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156106df576106df614f73565b1461071b575f8381526007830160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610792573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107b99190810190615214565b6040518263ffffffff1660e01b81526004016107d59190615245565b6020604051808303815f875af11580156107f1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108159190615257565b50505050565b6108158383835f611fc1565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615d2d8339815191529060ff161561087957604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e09190615257565b836020013514610909576040516372b0a7e760e11b815260208401356004820152602401610712565b3061091a606085016040860161526e565b6001600160a01b03161461095d57610938606084016040850161526e565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610712565b5f61096b6060850185615289565b905090505f805b828163ffffffff161015610bd2575f61098e6060880188615289565b8363ffffffff168181106109a4576109a46152ce565b90506020028101906109b691906152e2565b6109bf9061534d565b80516040519192505f9160088801916109d7916153c8565b90815260200160405180910390205414610a0757805160405163a41f772f60e01b81526107129190600401615245565b5f6002885f013584604051602001610a3692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a50916153c8565b602060405180830381855afa158015610a6b573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a8e9190615257565b90508086600801835f0151604051610aa691906153c8565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610ae6908261541d565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610b6590856154ec565b8251604051919550610b76916153c8565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610bcb906154ff565b9050610972565b50600483018190556001830154606490610bf690600160401b900460ff1683615521565b1015610c1857604051635943317f60e01b815260048101829052602401610712565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c3c87612379565b604001516040518263ffffffff1660e01b8152600401610c5c9190615245565b602060405180830381865af4158015610c77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9b9190615257565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610cd59190615663565b5f60405180830381865af4158015610cef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d169190810190615214565b90505f600282604051610d2991906153c8565b602060405180830381855afa158015610d44573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d679190615257565b9050828114610d935760405163baaea89d60e01b81526004810182905260248101849052604401610712565b5050506009909201805460ff1916600117905550505050565b610db58261248f565b610dd5576040516330efa98b60e01b815260048101839052602401610712565b5f610ddf83611d24565b5190506002816005811115610df657610df6614f73565b14610e16578060405163170cc93360e21b8152600401610712919061510b565b61081583836124b8565b5f80610e2a612757565b60030154610e3890846156ee565b9050801580610e4d57506001600160401b0381115b15610e6e5760405163222d164360e21b815260048101849052602401610712565b92915050565b610e8084848484611fc1565b5050505050565b6108158383835f61277b565b610e9b61299d565b5f610ea4612757565b90505f80610eb1846129d4565b91509150610ebe8261248f565b610eca57505050610f5f565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b03918216911680610f01575080610f1f565b5f848152600b86016020526040902080546001600160a01b03191690555b600483516005811115610f3457610f34614f73565b03610f4357610f438185612d87565b610f5982610f548560400151611286565b612db1565b50505050505b610f7560015f80516020615d4d83398151915255565b50565b5f610f8161299d565b610f8d85858585612de7565b9050610fa560015f80516020615d4d83398151915255565b949350505050565b61081584848484612f4c565b5f610fc2612757565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610ffb57610ffb614f73565b600381111561100c5761100c614f73565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61108282611d24565b905060018351600381111561109957611099614f73565b146110ba578251604051633b0d540d60e21b8152610712919060040161570d565b6004815160058111156110cf576110cf614f73565b036110e5576110dd86612f78565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61110a89612379565b604001516040518263ffffffff1660e01b815260040161112a9190615245565b606060405180830381865af4158015611145573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111699190615727565b509150915081841461119657846040015160405163089938b360e11b815260040161071291815260200190565b806001600160401b031683606001516001600160401b031610806111cf5750806001600160401b03168560a001516001600160401b0316115b156111f857604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61128f612757565b60030154610e6e906001600160401b038416615521565b5f6112b082611d24565b6080015192915050565b6105868383835f612f4c565b610e808484848461277b565b6112da61299d565b5f6112e3612757565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561131c5761131c614f73565b600381111561132d5761132d614f73565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113a6576113a6614f73565b146113c7578051604051633b0d540d60e21b8152610712919060040161570d565b60046113d68260400151611d24565b5160058111156113e8576113e8614f73565b146114e7575f6113f784612379565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016114369190615245565b606060405180830381865af4158015611451573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114759190615727565b5091509150818460400151146114a15760405163089938b360e11b815260048101839052602401610712565b806001600160401b03168460c001516001600160401b031611156114e357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5050505b6114f084612f78565b505061150860015f80516020615d4d83398151915255565b5050565b6001600160a01b03811661153e5760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611547612757565b5f8481526006820160205260409020549091506001600160a01b0316331461159057335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610712565b336001600160a01b038316036115bf575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f6115f7612757565b90505f61160383611d24565b519050600481600581111561161a5761161a614f73565b1461163a578060405163170cc93360e21b8152600401610712919061510b565b5f8381526006830160205260409020546001600160a01b0316331461165f573361156b565b5f838152600683016020526040902054610586906001600160a01b031684612d87565b61081584848484611f95565b5f61169761299d565b6116a2833384613185565b9050610e6e60015f80516020615d4d83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611703575080546001600160401b03808416911610155b156117215760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561174c84846133ca565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615d2d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117cc86612379565b604001516040518263ffffffff1660e01b81526004016117ec9190615245565b6040805180830381865af4158015611806573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061182a9190615767565b915091508061185057604051632d07135360e01b81528115156004820152602401610712565b5f8281526006840160205260409020805461186a906150d3565b90505f0361188e5760405163089938b360e11b815260048101839052602401610712565b60015f83815260078501602052604090205460ff1660058111156118b4576118b4614f73565b146118e7575f8281526007840160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b5f82815260068401602052604081206118ff91614c5e565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611997612757565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119d0576119d0614f73565b60038111156119e1576119e1614f73565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a5a57611a5a614f73565b14158015611a7b5750600381516003811115611a7857611a78614f73565b14155b15611a9c578051604051633b0d540d60e21b8152610712919060040161570d565b5f611aaa8260400151611d24565b905080606001516001600160401b03165f03611adc576040516339b894f960e21b815260048101859052602401610712565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b4a93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b64573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b8b9190810190615214565b6040518263ffffffff1660e01b8152600401611ba79190615245565b6020604051808303815f875af1158015611bc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e809190615257565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615d2d8339815191529190611c2e906150d3565b90505f03611c525760405163089938b360e11b815260048101839052602401610712565b60015f83815260078301602052604090205460ff166005811115611c7857611c78614f73565b14611cab575f8281526007820160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611ce4919060040161578a565b6020604051808303815f875af1158015611d00573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105869190615257565b611d2c614c95565b5f8281525f80516020615d6d833981519152602052604090819020815160e0810190925280545f80516020615d2d833981519152929190829060ff166005811115611d7957611d79614f73565b6005811115611d8a57611d8a614f73565b8152602001600182018054611d9e906150d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611dca906150d3565b8015611e155780601f10611dec57610100808354040283529160200191611e15565b820191905f5260205f20905b815481529060010190602001808311611df857829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611ea55760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611eae612757565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611edc573361156b565b336001600160a01b03831603611f0b575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615d2d833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611f7d9086908690615814565b90815260200160405180910390205491505092915050565b611fa184848484611fc1565b61081557604051631036cf9160e11b815260048101859052602401610712565b5f80611fcb612757565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561200457612004614f73565b600381111561201557612015614f73565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61208b82611d24565b90506002835160038111156120a2576120a2614f73565b146120c3578251604051633b0d540d60e21b8152610712919060040161570d565b60208301516001600160a01b0316331461215f575f8281526006850160205260409020546001600160a01b031633146120fc573361156b565b5f82815260068501602052604090205460a082015161212b91600160b01b90046001600160401b031690615823565b6001600160401b031642101561215f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b60028151600581111561217457612174614f73565b036122dc5760028401546080840151612196916001600160401b031690615823565b6001600160401b03164210156121ca5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b87156121dc576121da82886124b8565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516122159184916122109190615843565b6133e4565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155612256846135bb565b5f8b8152600887016020526040902081905590506001600160a01b038716156122a2575f8a8152600986016020526040902080546001600160a01b0319166001600160a01b0389161790555b60405183908b907f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57905f90a315159450610fa59350505050565b6004815160058111156122f1576122f1614f73565b0361235d576122ff836135bb565b5f8a81526008860160205260409020556001600160a01b03861615612347575f898152600985016020526040902080546001600160a01b0319166001600160a01b0388161790555b61235089612f78565b6001945050505050610fa5565b805160405163170cc93360e21b8152610712919060040161510b565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156123dd573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124049190810190615863565b915091508061242657604051636b2f19e960e01b815260040160405180910390fd5b81511561244c578151604051636ba589a560e01b81526004810191909152602401610712565b60208201516001600160a01b031615612488576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5092915050565b5f80612499612757565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612503573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261252a9190810190615863565b915091508061254c57604051636b2f19e960e01b815260040160405180910390fd5b5f612555612757565b6005810154845191925014612583578251604051636ba589a560e01b81526004810191909152602401610712565b60208301516001600160a01b0316156125bf576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b60208301516001600160a01b0316156125fb576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016126389190615245565b6040805180830381865af4158015612652573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267691906158f3565b9150915081881461269d5760405163089938b360e11b815260048101899052602401610712565b5f8881526006840160205260409020600101546001600160401b03908116908216111561272e575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261274c565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f80612785612757565b90505f61279187613752565b905061279c8761248f565b6127ab57600192505050610fa5565b5f8781526006830160205260409020546001600160a01b031633146127d0573361156b565b5f87815260068301602052604090205460a08201516127ff91600160b01b90046001600160401b031690615823565b6001600160401b03168160c001516001600160401b031610156128465760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610712565b5f861561285e5761285788876124b8565b905061287c565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128a190611286565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561290a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061292e9190615257565b90508084600a015f8b81526020019081526020015f205f82825461295291906154ec565b90915550506001600160a01b0386161561298f575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615d4d8339815191528054600119016129ce57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f6129dd614c95565b5f80516020615d2d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612a1088612379565b604001516040518263ffffffff1660e01b8152600401612a309190615245565b6040805180830381865af4158015612a4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a6e9190615767565b915091508015612a9557604051632d07135360e01b81528115156004820152602401610712565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612ac657612ac6614f73565b6005811115612ad757612ad7614f73565b8152602001600182018054612aeb906150d3565b80601f0160208091040260200160405190810160405280929190818152602001828054612b17906150d3565b8015612b625780601f10612b3957610100808354040283529160200191612b62565b820191905f5260205f20905b815481529060010190602001808311612b4557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612bcd57612bcd614f73565b14158015612bee5750600181516005811115612beb57612beb614f73565b14155b15612c0f57805160405163170cc93360e21b8152610712919060040161510b565b600381516005811115612c2457612c24614f73565b03612c325760048152612c37565b600581525b836008018160200151604051612c4d91906153c8565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612c9157612c91614f73565b021790555060208201516001820190612caa908261541d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612d5057612d50614f73565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d90612757565b5f838152600a82016020526040812080549190559091506108158482613a36565b5f80516020615d0d83398151915254611508906001600160a01b03168383613aac565b60015f80516020615d4d83398151915255565b5f80612df1612757565b600281015490915061ffff600160401b90910481169086161080612e1a575061271061ffff8616115b15612e3e57604051635f12e6c360e11b815261ffff86166004820152602401610712565b60028101546001600160401b039081169085161015612e7a576040516202a06d60e11b81526001600160401b0385166004820152602401610712565b8054831080612e8c5750806001015483115b15612ead5760405163222d164360e21b815260048101849052602401610712565b5f612eb784613b0b565b90505f612ec382610e20565b90505f612ed08983613b2e565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b612f588484848461277b565b61081557604051635bff683f60e11b815260048101859052602401610712565b5f612f81612757565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612fba57612fba614f73565b6003811115612fcb57612fcb614f73565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091506130687fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b82608001516130779190615823565b6001600160401b03164210156130ab5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130fb57506020820151613119565b5f858152600985016020526040902080546001600160a01b03191690555b5f80613126838886614053565b9150915061313f8560200151610f548760600151611286565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f8061318f612757565b90505f61319e6102d185613b0b565b90505f6131aa87611d24565b90506131b58761248f565b6131d5576040516330efa98b60e01b815260048101889052602401610712565b6002815160058111156131ea576131ea614f73565b1461320b57805160405163170cc93360e21b8152610712919060040161510b565b5f82826080015161321c9190615823565b905083600201600a9054906101000a90046001600160401b031682604001516132459190615916565b6001600160401b0316816001600160401b0316111561328257604051636d51fe0560e11b81526001600160401b0382166004820152602401610712565b5f8061328e8a846133e4565b915091505f8a836040516020016132bc92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6133d2614100565b6133db8261414b565b611508816141c5565b5f8281525f80516020615d6d833981519152602052604081206002015481905f80516020615d2d83398151915290600160801b90046001600160401b031661342c858261422d565b5f61343687614450565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156134df573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135069190810190615214565b6040518263ffffffff1660e01b81526004016135229190615245565b6020604051808303815f875af115801561353e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135629190615257565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f806135c5612757565b90505f6135d58460400151611d24565b90505f6003825160058111156135ed576135ed614f73565b148061360b575060048251600581111561360957613609614f73565b145b1561361b575060c0810151613658565b60028251600581111561363057613630614f73565b0361363c575042613658565b815160405163170cc93360e21b8152610712919060040161510b565b84608001516001600160401b0316816001600160401b03161161367f57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906136a490611286565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613725573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137499190615257565b95945050505050565b61375a614c95565b5f8281525f80516020615d6d8339815191526020526040808220815160e0810190925280545f80516020615d2d83398151915293929190829060ff1660058111156137a7576137a7614f73565b60058111156137b8576137b8614f73565b81526020016001820180546137cc906150d3565b80601f01602080910402602001604051908101604052809291908181526020018280546137f8906150d3565b80156138435780601f1061381a57610100808354040283529160200191613843565b820191905f5260205f20905b81548152906001019060200180831161382657829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156138b1576138b1614f73565b146138e4575f8481526007830160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561392857613928614f73565b021790555060208201516001820190613941908261541d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139df85826133e4565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b5f5f80516020615d0d83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a91575f80fd5b505af1158015613aa3573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261058691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144c5565b5f610e6e825f80516020615d0d833981519152546001600160a01b031690614526565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613b7257604051637fab81e560e01b815260040160405180910390fd5b5f80516020615d2d83398151915242613b916060860160408701614ed7565b6001600160401b0316111580613bcb5750613baf6202a300426154ec565b613bbf6060860160408701614ed7565b6001600160401b031610155b15613c0557613be06060850160408601614ed7565b604051635879da1360e11b81526001600160401b039091166004820152602401610712565b613c1a613c156060860186615941565b614532565b613c2a613c156080860186615941565b6030613c396020860186615955565b905014613c6b57613c4d6020850185615955565b6040516326475b2f60e11b8152610712925060040190815260200190565b613c758480615955565b90505f03613ca257613c878480615955565b604051633e08a12560e11b8152600401610712929190615997565b5f60088201613cb18680615955565b604051613cbf929190615814565b90815260200160405180910390205414613cf857613cdd8480615955565b60405163a41f772f60e01b8152600401610712929190615997565b613d02835f61422d565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d3f8a80615955565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613d87908b018b615955565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613dd060608b0160408c01614ed7565b6001600160401b03168152602001613deb60608b018b615941565b613df4906159aa565b8152602001613e0660808b018b615941565b613e0f906159aa565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613e3d9190615ad7565b5f60405180830381865af4158015613e57573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e7e9190810190615b8e565b5f82815260068601602052604090209193509150613e9c828261541d565b508160088401613eac8880615955565b604051613eba929190615814565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613ef6908590600401615245565b6020604051808303815f875af1158015613f12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f369190615257565b5f8481526007860160205260409020805460ff191660011790559050613f5c8780615955565b5f858152600787016020526040902060010191613f7a919083615bd1565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613fd98880615955565b604051613fe7929190615814565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b60400160208101906140259190614ed7565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f61405e612757565b5f868152600882016020526040812080549082905591925090819080156140f2575f878152600685016020526040902054612710906140a890600160a01b900461ffff1683615521565b6140b291906156ee565b91508184600a015f8981526020019081526020015f205f8282546140d691906154ec565b909155506140e690508282615c8a565b92506140f28984613a36565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661414957604051631afcd79f60e31b815260040160405180910390fd5b565b614153614100565b61415c8161469b565b6141646146b4565b610f756060820135608083013561418160c0850160a08601614ed7565b61419160e0860160c08701615c9d565b6141a2610100870160e08801615cb6565b6101008701356141ba61014089016101208a0161526e565b8861014001356146c4565b6141cd614100565b5f80516020615d0d8339815191526001600160a01b03821661420d57604051637330680360e01b81526001600160a01b0383166004820152602401610712565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615d2d8339815191525f6001600160401b0380841690851611156142615761425a8385615843565b905061426e565b61426b8484615843565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806142d05750600184015481516142cc916001600160401b0316906154ec565b8210155b156142f6576001600160401b038316606082015281815260408101516020820152614315565b82816060018181516143089190615823565b6001600160401b03169052505b6060810151614325906064615916565b602082015160018601546001600160401b0392909216916143509190600160401b900460ff16615521565b101561438057606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610712565b856001600160401b03168160400181815161439b91906154ec565b9052506040810180516001600160401b03871691906143bb908390615c8a565b905250600184015460408201516064916143e091600160401b90910460ff1690615521565b1015614407578060400151604051635943317f60e01b815260040161071291815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615d6d8339815191526020526040812060020180545f80516020615d2d833981519152919060089061449a90600160401b90046001600160401b0316615cd6565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6144d96001600160a01b038416836148a9565b905080515f141580156144fd5750808060200190518101906144fb9190615cf1565b155b1561058657604051635274afe760e01b81526001600160a01b0384166004820152602401610712565b5f6133c38333846148b6565b61453f6020820182614e32565b63ffffffff1615801561455f575061455a6020820182615289565b151590505b156145a6576145716020820182614e32565b61457e6020830183615289565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610712565b6145b36020820182615289565b90506145c26020830183614e32565b63ffffffff1611156145db576145716020820182614e32565b60015b6145eb6020830183615289565b9050811015611508576146016020830183615289565b61460c600184615c8a565b81811061461b5761461b6152ce565b9050602002016020810190614630919061526e565b6001600160a01b03166146466020840184615289565b83818110614656576146566152ce565b905060200201602081019061466b919061526e565b6001600160a01b0316101561469357604051630dbc8d5f60e31b815260040160405180910390fd5b6001016145de565b6146a3614100565b6146ab614a19565b610f7581614a21565b6146bc614100565b614149614b09565b6146cc614100565b5f6146d5612757565b905061ffff861615806146ed575061271061ffff8716115b1561471157604051635f12e6c360e11b815261ffff87166004820152602401610712565b878911156147355760405163222d164360e21b8152600481018a9052602401610712565b60ff851615806147485750600a60ff8616115b1561476b5760405163170db35960e31b815260ff86166004820152602401610712565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b031610156147d2576040516202a06d60e11b81526001600160401b0388166004820152602401610712565b835f036147f25760405163a733007160e01b815260040160405180910390fd5b8161481357604051632f6bd1db60e01b815260048101839052602401610712565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b60606133c383835f614b11565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149209190615257565b90506149376001600160a01b038616853086614ba0565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa15801561497b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061499f9190615257565b9050818111614a055760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610712565b614a0f8282615c8a565b9695505050505050565b614149614100565b614a29614100565b80355f80516020615d2d8339815191529081556014614a4e6060840160408501615cb6565b60ff161180614a6d5750614a686060830160408401615cb6565b60ff16155b15614aa157614a826060830160408401615cb6565b604051634a59bbff60e11b815260ff9091166004820152602401610712565b614ab16060830160408401615cb6565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614ae26040830160208401614ed7565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dd4614100565b606081471015614b365760405163cd78605960e01b8152306004820152602401610712565b5f80856001600160a01b03168486604051614b5191906153c8565b5f6040518083038185875af1925050503d805f8114614b8b576040519150601f19603f3d011682016040523d82523d5f602084013e614b90565b606091505b5091509150614a0f868383614bd9565b6040516001600160a01b0384811660248301528381166044830152606482018390526108159186918216906323b872dd90608401613ad9565b606082614bee57614be982614c35565b6133c3565b8151158015614c0557506001600160a01b0384163b155b15614c2e57604051639996b31560e01b81526001600160a01b0385166004820152602401610712565b50806133c3565b805115614c455780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c6a906150d3565b5f825580601f10614c79575050565b601f0160209004905f5260205f2090810190610f759190614cd2565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614ce6575f8155600101614cd3565b5090565b8015158114610f75575f80fd5b803563ffffffff81168114614d0a575f80fd5b919050565b5f805f60608486031215614d21575f80fd5b833592506020840135614d3381614cea565b9150614d4160408501614cf7565b90509250925092565b5f60208284031215614d5a575f80fd5b5035919050565b5f8060408385031215614d72575f80fd5b82356001600160401b03811115614d87575f80fd5b830160808186031215614d98575f80fd5b9150614da660208401614cf7565b90509250929050565b5f8060408385031215614dc0575f80fd5b82359150614da660208401614cf7565b6001600160a01b0381168114610f75575f80fd5b5f805f8060808587031215614df7575f80fd5b843593506020850135614e0981614cea565b9250614e1760408601614cf7565b91506060850135614e2781614dd0565b939692955090935050565b5f60208284031215614e42575f80fd5b6133c382614cf7565b803561ffff81168114614d0a575f80fd5b6001600160401b0381168114610f75575f80fd5b5f805f8060808587031215614e83575f80fd5b84356001600160401b03811115614e98575f80fd5b850160a08188031215614ea9575f80fd5b9350614eb760208601614e4b565b92506040850135614ec781614e5c565b9396929550929360600135925050565b5f60208284031215614ee7575f80fd5b81356133c381614e5c565b5f8060408385031215614f03575f80fd5b823591506020830135614f1581614dd0565b809150509250929050565b5f8060408385031215614f31575f80fd5b50508035926020909101359150565b5f80828403610180811215614f53575f80fd5b61016080821215614f62575f80fd5b8493508301359050614f1581614dd0565b634e487b7160e01b5f52602160045260245ffd5b60068110614f9757614f97614f73565b9052565b5f5b83811015614fb5578181015183820152602001614f9d565b50505f910152565b5f8151808452614fd4816020860160208601614f9b565b601f01601f19169290920160200192915050565b60208152614ffa602082018351614f87565b5f602083015160e06040840152615015610100840182614fbd565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215615079575f80fd5b82356001600160401b038082111561508f575f80fd5b818501915085601f8301126150a2575f80fd5b8135818111156150b0575f80fd5b8660208285010111156150c1575f80fd5b60209290920196919550909350505050565b600181811c908216806150e757607f821691505b60208210810361510557634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610e6e8284614f87565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561514f5761514f615119565b60405290565b604080519081016001600160401b038111828210171561514f5761514f615119565b604051601f8201601f191681016001600160401b038111828210171561519f5761519f615119565b604052919050565b5f6001600160401b038211156151bf576151bf615119565b50601f01601f191660200190565b5f82601f8301126151dc575f80fd5b81516151ef6151ea826151a7565b615177565b818152846020838601011115615203575f80fd5b610fa5826020830160208701614f9b565b5f60208284031215615224575f80fd5b81516001600160401b03811115615239575f80fd5b610fa5848285016151cd565b602081525f6133c36020830184614fbd565b5f60208284031215615267575f80fd5b5051919050565b5f6020828403121561527e575f80fd5b81356133c381614dd0565b5f808335601e1984360301811261529e575f80fd5b8301803591506001600160401b038211156152b7575f80fd5b6020019150600581901b36038213156135b4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152f6575f80fd5b9190910192915050565b5f82601f83011261530f575f80fd5b813561531d6151ea826151a7565b818152846020838601011115615331575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6060823603121561535d575f80fd5b61536561512d565b82356001600160401b038082111561537b575f80fd5b61538736838701615300565b8352602085013591508082111561539c575f80fd5b506153a936828601615300565b60208301525060408301356153bd81614e5c565b604082015292915050565b5f82516152f6818460208701614f9b565b601f82111561058657805f5260205f20601f840160051c810160208510156153fe5750805b601f840160051c820191505b81811015610e80575f815560010161540a565b81516001600160401b0381111561543657615436615119565b61544a8161544484546150d3565b846153d9565b602080601f83116001811461547d575f84156154665750858301515b5f19600386901b1c1916600185901b1785556110dd565b5f85815260208120601f198616915b828110156154ab5788860151825594840194600190910190840161548c565b50858210156154c857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610e6e57610e6e6154d8565b5f63ffffffff808316818103615517576155176154d8565b6001019392505050565b8082028115828204841417610e6e57610e6e6154d8565b5f808335601e1984360301811261554d575f80fd5b83016020810192503590506001600160401b0381111561556b575f80fd5b8036038213156135b4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561565657848303601f19018952813536889003605e190181126155dd575f80fd5b870160606155eb8280615538565b8287526155fb8388018284615579565b9250505061560b86830183615538565b8683038888015261561d838284615579565b92505050604080830135925061563283614e5c565b6001600160401b0392909216949091019390935297830197908301906001016155b8565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561568781614dd0565b6001600160a01b031660608381019190915283013536849003601e190181126156ae575f80fd5b83016020810190356001600160401b038111156156c9575f80fd5b8060051b36038213156156da575f80fd5b60808085015261374960a0850182846155a1565b5f8261570857634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061572157615721614f73565b91905290565b5f805f60608486031215615739575f80fd5b83519250602084015161574b81614e5c565b604085015190925061575c81614e5c565b809150509250925092565b5f8060408385031215615778575f80fd5b825191506020830151614f1581614cea565b5f60208083525f845461579c816150d3565b806020870152604060018084165f81146157bd57600181146157d957615806565b60ff19851660408a0152604084151560051b8a01019550615806565b895f5260205f205f5b858110156157fd5781548b82018601529083019088016157e2565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b03818116838216019080821115612488576124886154d8565b6001600160401b03828116828216039080821115612488576124886154d8565b5f8060408385031215615874575f80fd5b82516001600160401b038082111561588a575f80fd5b908401906060828703121561589d575f80fd5b6158a561512d565b8251815260208301516158b781614dd0565b60208201526040830151828111156158cd575f80fd5b6158d9888286016151cd565b6040830152508094505050506020830151614f1581614cea565b5f8060408385031215615904575f80fd5b825191506020830151614f1581614e5c565b6001600160401b03818116838216028082169190828114615939576159396154d8565b505092915050565b5f8235603e198336030181126152f6575f80fd5b5f808335601e1984360301811261596a575f80fd5b8301803591506001600160401b03821115615983575f80fd5b6020019150368190038213156135b4575f80fd5b602081525f610fa5602083018486615579565b5f604082360312156159ba575f80fd5b6159c2615155565b6159cb83614cf7565b81526020808401356001600160401b03808211156159e7575f80fd5b9085019036601f8301126159f9575f80fd5b813581811115615a0b57615a0b615119565b8060051b9150615a1c848301615177565b8181529183018401918481019036841115615a35575f80fd5b938501935b83851015615a5f5784359250615a4f83614dd0565b8282529385019390850190615a3a565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615acc5784516001600160a01b03168252938301936001929092019190830190615aa3565b509695505050505050565b60208152815160208201525f602083015160e06040840152615afd610100840182614fbd565b90506040840151601f1980858403016060860152615b1b8383614fbd565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b4b8383615a71565b925060a08601519150808584030160c086015250615b698282615a71565b91505060c0840151615b8660e08501826001600160401b03169052565b509392505050565b5f8060408385031215615b9f575f80fd5b8251915060208301516001600160401b03811115615bbb575f80fd5b615bc7858286016151cd565b9150509250929050565b6001600160401b03831115615be857615be8615119565b615bfc83615bf683546150d3565b836153d9565b5f601f841160018114615c2d575f8515615c165750838201355b5f19600387901b1c1916600186901b178355610e80565b5f83815260208120601f198716915b82811015615c5c5786850135825560209485019460019092019101615c3c565b5086821015615c78575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610e6e57610e6e6154d8565b5f60208284031215615cad575f80fd5b6133c382614e4b565b5f60208284031215615cc6575f80fd5b813560ff811681146133c3575f80fd5b5f6001600160401b03808316818103615517576155176154d8565b5f60208284031215615d01575f80fd5b81516133c381614cea56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220e0abdfa5c721960f0966e9939ad4ed909246fb27b9c8a6fff2ec709e90f6d36864736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615f0f380380615f0f83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615dc28061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061023f575f3560e01c806380dd672f11610135578063b771b3bc116100b4578063d5f20ff611610079578063d5f20ff614610516578063df93d8de14610536578063e4a63c4014610540578063fb8b11dd14610554578063fd7ac5e714610567575f80fd5b8063b771b3bc146104ae578063ba3a4b97146104d4578063bc5fbfec146104e7578063bee0a03f146104fb578063c974d1b61461050e575f80fd5b80639e1bc4ef116100fa5780639e1bc4ef1461044e5780639e478eea14610461578063a3a65e4814610474578063a9778a7a146102ee578063afb9809614610487575f80fd5b806380dd672f146103fa5780638280a25a1461040d5780638ef34c981461041557806393e24598146104285780639ae064471461043b575f80fd5b8063467ef06f116101c1578063620658561161018657806362065856146103a757806366435abf146103ba578063732214f8146103cd57806376f78621146103d45780637d8d2f77146103e7575f80fd5b8063467ef06f146103305780634bee0040146103435780635dd6a6cb1461036457806360305d621461037757806360ad778414610394575f80fd5b806325e1c7761161020757806325e1c776146102b05780632e2194d8146102c357806335455ded146102ee57806337b9be8f1461030a5780633a1cfff61461031d575f80fd5b80630118acc4146102435780630322ed9814610258578063151d30d11461026b5780631ec447241461028a57806320d91b7a1461029d575b5f80fd5b610256610251366004614d0f565b61057a565b005b610256610266366004614d4a565b61058b565b610273600a81565b60405160ff90911681526020015b60405180910390f35b610256610298366004614d0f565b61081b565b6102566102ab366004614d61565b610827565b6102566102be366004614daf565b610dac565b6102d66102d1366004614d4a565b610e20565b6040516001600160401b039091168152602001610281565b6102f761271081565b60405161ffff9091168152602001610281565b610256610318366004614de4565b610e74565b61025661032b366004614d0f565b610e87565b61025661033e366004614e32565b610e93565b610356610351366004614e70565b610f78565b604051908152602001610281565b610256610372366004614de4565b610fad565b61037f601481565b60405163ffffffff9091168152602001610281565b6102566103a2366004614daf565b610fb9565b6103566103b5366004614ed7565b611286565b6102d66103c8366004614d4a565b6112a6565b6103565f81565b6102566103e2366004614d0f565b6112ba565b6102566103f5366004614de4565b6112c6565b610256610408366004614daf565b6112d2565b610273603081565b610256610423366004614ef2565b61150c565b610256610436366004614d4a565b6115ee565b610256610449366004614de4565b611682565b61035661045c366004614f20565b61168e565b61025661046f366004614f40565b6116ba565b610256610482366004614e32565b611799565b6103567f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104bc6005600160991b0181565b6040516001600160a01b039091168152602001610281565b6102566104e2366004614d4a565b61198e565b6103565f80516020615d2d83398151915281565b610256610509366004614d4a565b611be7565b610273601481565b610529610524366004614d4a565b611d24565b6040516102819190614fe8565b6102d66202a30081565b6103565f80516020615d0d83398151915281565b610256610562366004614ef2565b611e73565b610356610575366004615068565b611f3a565b6105868383835f611f95565b505050565b5f8181525f80516020615d6d8339815191526020526040808220815160e0810190925280545f80516020615d2d83398151915293929190829060ff1660058111156105d8576105d8614f73565b60058111156105e9576105e9614f73565b81526020016001820180546105fd906150d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610629906150d3565b80156106745780601f1061064b57610100808354040283529160200191610674565b820191905f5260205f20905b81548152906001019060200180831161065757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156106df576106df614f73565b1461071b575f8381526007830160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610792573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107b99190810190615214565b6040518263ffffffff1660e01b81526004016107d59190615245565b6020604051808303815f875af11580156107f1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108159190615257565b50505050565b6108158383835f611fc1565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615d2d8339815191529060ff161561087957604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e09190615257565b836020013514610909576040516372b0a7e760e11b815260208401356004820152602401610712565b3061091a606085016040860161526e565b6001600160a01b03161461095d57610938606084016040850161526e565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610712565b5f61096b6060850185615289565b905090505f805b828163ffffffff161015610bd2575f61098e6060880188615289565b8363ffffffff168181106109a4576109a46152ce565b90506020028101906109b691906152e2565b6109bf9061534d565b80516040519192505f9160088801916109d7916153c8565b90815260200160405180910390205414610a0757805160405163a41f772f60e01b81526107129190600401615245565b5f6002885f013584604051602001610a3692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a50916153c8565b602060405180830381855afa158015610a6b573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a8e9190615257565b90508086600801835f0151604051610aa691906153c8565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610ae6908261541d565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610b6590856154ec565b8251604051919550610b76916153c8565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610bcb906154ff565b9050610972565b50600483018190556001830154606490610bf690600160401b900460ff1683615521565b1015610c1857604051635943317f60e01b815260048101829052602401610712565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c3c87612379565b604001516040518263ffffffff1660e01b8152600401610c5c9190615245565b602060405180830381865af4158015610c77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9b9190615257565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610cd59190615663565b5f60405180830381865af4158015610cef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d169190810190615214565b90505f600282604051610d2991906153c8565b602060405180830381855afa158015610d44573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d679190615257565b9050828114610d935760405163baaea89d60e01b81526004810182905260248101849052604401610712565b5050506009909201805460ff1916600117905550505050565b610db58261248f565b610dd5576040516330efa98b60e01b815260048101839052602401610712565b5f610ddf83611d24565b5190506002816005811115610df657610df6614f73565b14610e16578060405163170cc93360e21b8152600401610712919061510b565b61081583836124b8565b5f80610e2a612757565b60030154610e3890846156ee565b9050801580610e4d57506001600160401b0381115b15610e6e5760405163222d164360e21b815260048101849052602401610712565b92915050565b610e8084848484611fc1565b5050505050565b6108158383835f61277b565b610e9b61299d565b5f610ea4612757565b90505f80610eb1846129d4565b91509150610ebe8261248f565b610eca57505050610f5f565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b03918216911680610f01575080610f1f565b5f848152600b86016020526040902080546001600160a01b03191690555b600483516005811115610f3457610f34614f73565b03610f4357610f438185612d87565b610f5982610f548560400151611286565b612db1565b50505050505b610f7560015f80516020615d4d83398151915255565b50565b5f610f8161299d565b610f8d85858585612de7565b9050610fa560015f80516020615d4d83398151915255565b949350505050565b61081584848484612f4c565b5f610fc2612757565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610ffb57610ffb614f73565b600381111561100c5761100c614f73565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61108282611d24565b905060018351600381111561109957611099614f73565b146110ba578251604051633b0d540d60e21b8152610712919060040161570d565b6004815160058111156110cf576110cf614f73565b036110e5576110dd86612f78565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61110a89612379565b604001516040518263ffffffff1660e01b815260040161112a9190615245565b606060405180830381865af4158015611145573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111699190615727565b509150915081841461119657846040015160405163089938b360e11b815260040161071291815260200190565b806001600160401b031683606001516001600160401b031610806111cf5750806001600160401b03168560a001516001600160401b0316115b156111f857604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61128f612757565b60030154610e6e906001600160401b038416615521565b5f6112b082611d24565b6080015192915050565b6105868383835f612f4c565b610e808484848461277b565b6112da61299d565b5f6112e3612757565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561131c5761131c614f73565b600381111561132d5761132d614f73565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113a6576113a6614f73565b146113c7578051604051633b0d540d60e21b8152610712919060040161570d565b60046113d68260400151611d24565b5160058111156113e8576113e8614f73565b146114e7575f6113f784612379565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016114369190615245565b606060405180830381865af4158015611451573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114759190615727565b5091509150818460400151146114a15760405163089938b360e11b815260048101839052602401610712565b806001600160401b03168460c001516001600160401b031611156114e357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5050505b6114f084612f78565b505061150860015f80516020615d4d83398151915255565b5050565b6001600160a01b03811661153e5760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611547612757565b5f8481526006820160205260409020549091506001600160a01b0316331461159057335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610712565b336001600160a01b038316036115bf575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f6115f7612757565b90505f61160383611d24565b519050600481600581111561161a5761161a614f73565b1461163a578060405163170cc93360e21b8152600401610712919061510b565b5f8381526006830160205260409020546001600160a01b0316331461165f573361156b565b5f838152600683016020526040902054610586906001600160a01b031684612d87565b61081584848484611f95565b5f61169761299d565b6116a2833384613185565b9050610e6e60015f80516020615d4d83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611703575080546001600160401b03808416911610155b156117215760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561174c84846133ca565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615d2d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117cc86612379565b604001516040518263ffffffff1660e01b81526004016117ec9190615245565b6040805180830381865af4158015611806573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061182a9190615767565b915091508061185057604051632d07135360e01b81528115156004820152602401610712565b5f8281526006840160205260409020805461186a906150d3565b90505f0361188e5760405163089938b360e11b815260048101839052602401610712565b60015f83815260078501602052604090205460ff1660058111156118b4576118b4614f73565b146118e7575f8281526007840160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b5f82815260068401602052604081206118ff91614c5e565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611997612757565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119d0576119d0614f73565b60038111156119e1576119e1614f73565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a5a57611a5a614f73565b14158015611a7b5750600381516003811115611a7857611a78614f73565b14155b15611a9c578051604051633b0d540d60e21b8152610712919060040161570d565b5f611aaa8260400151611d24565b905080606001516001600160401b03165f03611adc576040516339b894f960e21b815260048101859052602401610712565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b4a93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b64573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b8b9190810190615214565b6040518263ffffffff1660e01b8152600401611ba79190615245565b6020604051808303815f875af1158015611bc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e809190615257565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615d2d8339815191529190611c2e906150d3565b90505f03611c525760405163089938b360e11b815260048101839052602401610712565b60015f83815260078301602052604090205460ff166005811115611c7857611c78614f73565b14611cab575f8281526007820160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611ce4919060040161578a565b6020604051808303815f875af1158015611d00573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105869190615257565b611d2c614c95565b5f8281525f80516020615d6d833981519152602052604090819020815160e0810190925280545f80516020615d2d833981519152929190829060ff166005811115611d7957611d79614f73565b6005811115611d8a57611d8a614f73565b8152602001600182018054611d9e906150d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611dca906150d3565b8015611e155780601f10611dec57610100808354040283529160200191611e15565b820191905f5260205f20905b815481529060010190602001808311611df857829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611ea55760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611eae612757565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611edc573361156b565b336001600160a01b03831603611f0b575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615d2d833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611f7d9086908690615814565b90815260200160405180910390205491505092915050565b611fa184848484611fc1565b61081557604051631036cf9160e11b815260048101859052602401610712565b5f80611fcb612757565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561200457612004614f73565b600381111561201557612015614f73565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61208b82611d24565b90506002835160038111156120a2576120a2614f73565b146120c3578251604051633b0d540d60e21b8152610712919060040161570d565b60208301516001600160a01b0316331461215f575f8281526006850160205260409020546001600160a01b031633146120fc573361156b565b5f82815260068501602052604090205460a082015161212b91600160b01b90046001600160401b031690615823565b6001600160401b031642101561215f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b60028151600581111561217457612174614f73565b036122dc5760028401546080840151612196916001600160401b031690615823565b6001600160401b03164210156121ca5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b87156121dc576121da82886124b8565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516122159184916122109190615843565b6133e4565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155612256846135bb565b5f8b8152600887016020526040902081905590506001600160a01b038716156122a2575f8a8152600986016020526040902080546001600160a01b0319166001600160a01b0389161790555b60405183908b907f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57905f90a315159450610fa59350505050565b6004815160058111156122f1576122f1614f73565b0361235d576122ff836135bb565b5f8a81526008860160205260409020556001600160a01b03861615612347575f898152600985016020526040902080546001600160a01b0319166001600160a01b0388161790555b61235089612f78565b6001945050505050610fa5565b805160405163170cc93360e21b8152610712919060040161510b565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156123dd573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124049190810190615863565b915091508061242657604051636b2f19e960e01b815260040160405180910390fd5b81511561244c578151604051636ba589a560e01b81526004810191909152602401610712565b60208201516001600160a01b031615612488576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5092915050565b5f80612499612757565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612503573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261252a9190810190615863565b915091508061254c57604051636b2f19e960e01b815260040160405180910390fd5b5f612555612757565b6005810154845191925014612583578251604051636ba589a560e01b81526004810191909152602401610712565b60208301516001600160a01b0316156125bf576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b60208301516001600160a01b0316156125fb576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016126389190615245565b6040805180830381865af4158015612652573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267691906158f3565b9150915081881461269d5760405163089938b360e11b815260048101899052602401610712565b5f8881526006840160205260409020600101546001600160401b03908116908216111561272e575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261274c565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f80612785612757565b90505f61279187613752565b905061279c8761248f565b6127ab57600192505050610fa5565b5f8781526006830160205260409020546001600160a01b031633146127d0573361156b565b5f87815260068301602052604090205460a08201516127ff91600160b01b90046001600160401b031690615823565b6001600160401b03168160c001516001600160401b031610156128465760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610712565b5f861561285e5761285788876124b8565b905061287c565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128a190611286565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561290a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061292e9190615257565b90508084600a015f8b81526020019081526020015f205f82825461295291906154ec565b90915550506001600160a01b0386161561298f575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615d4d8339815191528054600119016129ce57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f6129dd614c95565b5f80516020615d2d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612a1088612379565b604001516040518263ffffffff1660e01b8152600401612a309190615245565b6040805180830381865af4158015612a4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a6e9190615767565b915091508015612a9557604051632d07135360e01b81528115156004820152602401610712565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612ac657612ac6614f73565b6005811115612ad757612ad7614f73565b8152602001600182018054612aeb906150d3565b80601f0160208091040260200160405190810160405280929190818152602001828054612b17906150d3565b8015612b625780601f10612b3957610100808354040283529160200191612b62565b820191905f5260205f20905b815481529060010190602001808311612b4557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612bcd57612bcd614f73565b14158015612bee5750600181516005811115612beb57612beb614f73565b14155b15612c0f57805160405163170cc93360e21b8152610712919060040161510b565b600381516005811115612c2457612c24614f73565b03612c325760048152612c37565b600581525b836008018160200151604051612c4d91906153c8565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612c9157612c91614f73565b021790555060208201516001820190612caa908261541d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612d5057612d50614f73565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d90612757565b5f838152600a82016020526040812080549190559091506108158482613a36565b5f80516020615d0d83398151915254611508906001600160a01b03168383613aac565b60015f80516020615d4d83398151915255565b5f80612df1612757565b600281015490915061ffff600160401b90910481169086161080612e1a575061271061ffff8616115b15612e3e57604051635f12e6c360e11b815261ffff86166004820152602401610712565b60028101546001600160401b039081169085161015612e7a576040516202a06d60e11b81526001600160401b0385166004820152602401610712565b8054831080612e8c5750806001015483115b15612ead5760405163222d164360e21b815260048101849052602401610712565b5f612eb784613b0b565b90505f612ec382610e20565b90505f612ed08983613b2e565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b612f588484848461277b565b61081557604051635bff683f60e11b815260048101859052602401610712565b5f612f81612757565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612fba57612fba614f73565b6003811115612fcb57612fcb614f73565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091506130687fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b82608001516130779190615823565b6001600160401b03164210156130ab5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130fb57506020820151613119565b5f858152600985016020526040902080546001600160a01b03191690555b5f80613126838886614053565b9150915061313f8560200151610f548760600151611286565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f8061318f612757565b90505f61319e6102d185613b0b565b90505f6131aa87611d24565b90506131b58761248f565b6131d5576040516330efa98b60e01b815260048101889052602401610712565b6002815160058111156131ea576131ea614f73565b1461320b57805160405163170cc93360e21b8152610712919060040161510b565b5f82826080015161321c9190615823565b905083600201600a9054906101000a90046001600160401b031682604001516132459190615916565b6001600160401b0316816001600160401b0316111561328257604051636d51fe0560e11b81526001600160401b0382166004820152602401610712565b5f8061328e8a846133e4565b915091505f8a836040516020016132bc92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6133d2614100565b6133db8261414b565b611508816141c5565b5f8281525f80516020615d6d833981519152602052604081206002015481905f80516020615d2d83398151915290600160801b90046001600160401b031661342c858261422d565b5f61343687614450565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156134df573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135069190810190615214565b6040518263ffffffff1660e01b81526004016135229190615245565b6020604051808303815f875af115801561353e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135629190615257565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f806135c5612757565b90505f6135d58460400151611d24565b90505f6003825160058111156135ed576135ed614f73565b148061360b575060048251600581111561360957613609614f73565b145b1561361b575060c0810151613658565b60028251600581111561363057613630614f73565b0361363c575042613658565b815160405163170cc93360e21b8152610712919060040161510b565b84608001516001600160401b0316816001600160401b03161161367f57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906136a490611286565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613725573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137499190615257565b95945050505050565b61375a614c95565b5f8281525f80516020615d6d8339815191526020526040808220815160e0810190925280545f80516020615d2d83398151915293929190829060ff1660058111156137a7576137a7614f73565b60058111156137b8576137b8614f73565b81526020016001820180546137cc906150d3565b80601f01602080910402602001604051908101604052809291908181526020018280546137f8906150d3565b80156138435780601f1061381a57610100808354040283529160200191613843565b820191905f5260205f20905b81548152906001019060200180831161382657829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156138b1576138b1614f73565b146138e4575f8481526007830160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561392857613928614f73565b021790555060208201516001820190613941908261541d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139df85826133e4565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b5f5f80516020615d0d83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a91575f80fd5b505af1158015613aa3573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261058691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144c5565b5f610e6e825f80516020615d0d833981519152546001600160a01b031690614526565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613b7257604051637fab81e560e01b815260040160405180910390fd5b5f80516020615d2d83398151915242613b916060860160408701614ed7565b6001600160401b0316111580613bcb5750613baf6202a300426154ec565b613bbf6060860160408701614ed7565b6001600160401b031610155b15613c0557613be06060850160408601614ed7565b604051635879da1360e11b81526001600160401b039091166004820152602401610712565b613c1a613c156060860186615941565b614532565b613c2a613c156080860186615941565b6030613c396020860186615955565b905014613c6b57613c4d6020850185615955565b6040516326475b2f60e11b8152610712925060040190815260200190565b613c758480615955565b90505f03613ca257613c878480615955565b604051633e08a12560e11b8152600401610712929190615997565b5f60088201613cb18680615955565b604051613cbf929190615814565b90815260200160405180910390205414613cf857613cdd8480615955565b60405163a41f772f60e01b8152600401610712929190615997565b613d02835f61422d565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d3f8a80615955565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613d87908b018b615955565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613dd060608b0160408c01614ed7565b6001600160401b03168152602001613deb60608b018b615941565b613df4906159aa565b8152602001613e0660808b018b615941565b613e0f906159aa565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613e3d9190615ad7565b5f60405180830381865af4158015613e57573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e7e9190810190615b8e565b5f82815260068601602052604090209193509150613e9c828261541d565b508160088401613eac8880615955565b604051613eba929190615814565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613ef6908590600401615245565b6020604051808303815f875af1158015613f12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f369190615257565b5f8481526007860160205260409020805460ff191660011790559050613f5c8780615955565b5f858152600787016020526040902060010191613f7a919083615bd1565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613fd98880615955565b604051613fe7929190615814565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b60400160208101906140259190614ed7565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f61405e612757565b5f868152600882016020526040812080549082905591925090819080156140f2575f878152600685016020526040902054612710906140a890600160a01b900461ffff1683615521565b6140b291906156ee565b91508184600a015f8981526020019081526020015f205f8282546140d691906154ec565b909155506140e690508282615c8a565b92506140f28984613a36565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661414957604051631afcd79f60e31b815260040160405180910390fd5b565b614153614100565b61415c8161469b565b6141646146b4565b610f756060820135608083013561418160c0850160a08601614ed7565b61419160e0860160c08701615c9d565b6141a2610100870160e08801615cb6565b6101008701356141ba61014089016101208a0161526e565b8861014001356146c4565b6141cd614100565b5f80516020615d0d8339815191526001600160a01b03821661420d57604051637330680360e01b81526001600160a01b0383166004820152602401610712565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615d2d8339815191525f6001600160401b0380841690851611156142615761425a8385615843565b905061426e565b61426b8484615843565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806142d05750600184015481516142cc916001600160401b0316906154ec565b8210155b156142f6576001600160401b038316606082015281815260408101516020820152614315565b82816060018181516143089190615823565b6001600160401b03169052505b6060810151614325906064615916565b602082015160018601546001600160401b0392909216916143509190600160401b900460ff16615521565b101561438057606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610712565b856001600160401b03168160400181815161439b91906154ec565b9052506040810180516001600160401b03871691906143bb908390615c8a565b905250600184015460408201516064916143e091600160401b90910460ff1690615521565b1015614407578060400151604051635943317f60e01b815260040161071291815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615d6d8339815191526020526040812060020180545f80516020615d2d833981519152919060089061449a90600160401b90046001600160401b0316615cd6565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6144d96001600160a01b038416836148a9565b905080515f141580156144fd5750808060200190518101906144fb9190615cf1565b155b1561058657604051635274afe760e01b81526001600160a01b0384166004820152602401610712565b5f6133c38333846148b6565b61453f6020820182614e32565b63ffffffff1615801561455f575061455a6020820182615289565b151590505b156145a6576145716020820182614e32565b61457e6020830183615289565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610712565b6145b36020820182615289565b90506145c26020830183614e32565b63ffffffff1611156145db576145716020820182614e32565b60015b6145eb6020830183615289565b9050811015611508576146016020830183615289565b61460c600184615c8a565b81811061461b5761461b6152ce565b9050602002016020810190614630919061526e565b6001600160a01b03166146466020840184615289565b83818110614656576146566152ce565b905060200201602081019061466b919061526e565b6001600160a01b0316101561469357604051630dbc8d5f60e31b815260040160405180910390fd5b6001016145de565b6146a3614100565b6146ab614a19565b610f7581614a21565b6146bc614100565b614149614b09565b6146cc614100565b5f6146d5612757565b905061ffff861615806146ed575061271061ffff8716115b1561471157604051635f12e6c360e11b815261ffff87166004820152602401610712565b878911156147355760405163222d164360e21b8152600481018a9052602401610712565b60ff851615806147485750600a60ff8616115b1561476b5760405163170db35960e31b815260ff86166004820152602401610712565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b031610156147d2576040516202a06d60e11b81526001600160401b0388166004820152602401610712565b835f036147f25760405163a733007160e01b815260040160405180910390fd5b8161481357604051632f6bd1db60e01b815260048101839052602401610712565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b60606133c383835f614b11565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149209190615257565b90506149376001600160a01b038616853086614ba0565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa15801561497b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061499f9190615257565b9050818111614a055760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610712565b614a0f8282615c8a565b9695505050505050565b614149614100565b614a29614100565b80355f80516020615d2d8339815191529081556014614a4e6060840160408501615cb6565b60ff161180614a6d5750614a686060830160408401615cb6565b60ff16155b15614aa157614a826060830160408401615cb6565b604051634a59bbff60e11b815260ff9091166004820152602401610712565b614ab16060830160408401615cb6565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614ae26040830160208401614ed7565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dd4614100565b606081471015614b365760405163cd78605960e01b8152306004820152602401610712565b5f80856001600160a01b03168486604051614b5191906153c8565b5f6040518083038185875af1925050503d805f8114614b8b576040519150601f19603f3d011682016040523d82523d5f602084013e614b90565b606091505b5091509150614a0f868383614bd9565b6040516001600160a01b0384811660248301528381166044830152606482018390526108159186918216906323b872dd90608401613ad9565b606082614bee57614be982614c35565b6133c3565b8151158015614c0557506001600160a01b0384163b155b15614c2e57604051639996b31560e01b81526001600160a01b0385166004820152602401610712565b50806133c3565b805115614c455780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c6a906150d3565b5f825580601f10614c79575050565b601f0160209004905f5260205f2090810190610f759190614cd2565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614ce6575f8155600101614cd3565b5090565b8015158114610f75575f80fd5b803563ffffffff81168114614d0a575f80fd5b919050565b5f805f60608486031215614d21575f80fd5b833592506020840135614d3381614cea565b9150614d4160408501614cf7565b90509250925092565b5f60208284031215614d5a575f80fd5b5035919050565b5f8060408385031215614d72575f80fd5b82356001600160401b03811115614d87575f80fd5b830160808186031215614d98575f80fd5b9150614da660208401614cf7565b90509250929050565b5f8060408385031215614dc0575f80fd5b82359150614da660208401614cf7565b6001600160a01b0381168114610f75575f80fd5b5f805f8060808587031215614df7575f80fd5b843593506020850135614e0981614cea565b9250614e1760408601614cf7565b91506060850135614e2781614dd0565b939692955090935050565b5f60208284031215614e42575f80fd5b6133c382614cf7565b803561ffff81168114614d0a575f80fd5b6001600160401b0381168114610f75575f80fd5b5f805f8060808587031215614e83575f80fd5b84356001600160401b03811115614e98575f80fd5b850160a08188031215614ea9575f80fd5b9350614eb760208601614e4b565b92506040850135614ec781614e5c565b9396929550929360600135925050565b5f60208284031215614ee7575f80fd5b81356133c381614e5c565b5f8060408385031215614f03575f80fd5b823591506020830135614f1581614dd0565b809150509250929050565b5f8060408385031215614f31575f80fd5b50508035926020909101359150565b5f80828403610180811215614f53575f80fd5b61016080821215614f62575f80fd5b8493508301359050614f1581614dd0565b634e487b7160e01b5f52602160045260245ffd5b60068110614f9757614f97614f73565b9052565b5f5b83811015614fb5578181015183820152602001614f9d565b50505f910152565b5f8151808452614fd4816020860160208601614f9b565b601f01601f19169290920160200192915050565b60208152614ffa602082018351614f87565b5f602083015160e06040840152615015610100840182614fbd565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215615079575f80fd5b82356001600160401b038082111561508f575f80fd5b818501915085601f8301126150a2575f80fd5b8135818111156150b0575f80fd5b8660208285010111156150c1575f80fd5b60209290920196919550909350505050565b600181811c908216806150e757607f821691505b60208210810361510557634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610e6e8284614f87565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561514f5761514f615119565b60405290565b604080519081016001600160401b038111828210171561514f5761514f615119565b604051601f8201601f191681016001600160401b038111828210171561519f5761519f615119565b604052919050565b5f6001600160401b038211156151bf576151bf615119565b50601f01601f191660200190565b5f82601f8301126151dc575f80fd5b81516151ef6151ea826151a7565b615177565b818152846020838601011115615203575f80fd5b610fa5826020830160208701614f9b565b5f60208284031215615224575f80fd5b81516001600160401b03811115615239575f80fd5b610fa5848285016151cd565b602081525f6133c36020830184614fbd565b5f60208284031215615267575f80fd5b5051919050565b5f6020828403121561527e575f80fd5b81356133c381614dd0565b5f808335601e1984360301811261529e575f80fd5b8301803591506001600160401b038211156152b7575f80fd5b6020019150600581901b36038213156135b4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152f6575f80fd5b9190910192915050565b5f82601f83011261530f575f80fd5b813561531d6151ea826151a7565b818152846020838601011115615331575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6060823603121561535d575f80fd5b61536561512d565b82356001600160401b038082111561537b575f80fd5b61538736838701615300565b8352602085013591508082111561539c575f80fd5b506153a936828601615300565b60208301525060408301356153bd81614e5c565b604082015292915050565b5f82516152f6818460208701614f9b565b601f82111561058657805f5260205f20601f840160051c810160208510156153fe5750805b601f840160051c820191505b81811015610e80575f815560010161540a565b81516001600160401b0381111561543657615436615119565b61544a8161544484546150d3565b846153d9565b602080601f83116001811461547d575f84156154665750858301515b5f19600386901b1c1916600185901b1785556110dd565b5f85815260208120601f198616915b828110156154ab5788860151825594840194600190910190840161548c565b50858210156154c857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610e6e57610e6e6154d8565b5f63ffffffff808316818103615517576155176154d8565b6001019392505050565b8082028115828204841417610e6e57610e6e6154d8565b5f808335601e1984360301811261554d575f80fd5b83016020810192503590506001600160401b0381111561556b575f80fd5b8036038213156135b4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561565657848303601f19018952813536889003605e190181126155dd575f80fd5b870160606155eb8280615538565b8287526155fb8388018284615579565b9250505061560b86830183615538565b8683038888015261561d838284615579565b92505050604080830135925061563283614e5c565b6001600160401b0392909216949091019390935297830197908301906001016155b8565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561568781614dd0565b6001600160a01b031660608381019190915283013536849003601e190181126156ae575f80fd5b83016020810190356001600160401b038111156156c9575f80fd5b8060051b36038213156156da575f80fd5b60808085015261374960a0850182846155a1565b5f8261570857634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061572157615721614f73565b91905290565b5f805f60608486031215615739575f80fd5b83519250602084015161574b81614e5c565b604085015190925061575c81614e5c565b809150509250925092565b5f8060408385031215615778575f80fd5b825191506020830151614f1581614cea565b5f60208083525f845461579c816150d3565b806020870152604060018084165f81146157bd57600181146157d957615806565b60ff19851660408a0152604084151560051b8a01019550615806565b895f5260205f205f5b858110156157fd5781548b82018601529083019088016157e2565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b03818116838216019080821115612488576124886154d8565b6001600160401b03828116828216039080821115612488576124886154d8565b5f8060408385031215615874575f80fd5b82516001600160401b038082111561588a575f80fd5b908401906060828703121561589d575f80fd5b6158a561512d565b8251815260208301516158b781614dd0565b60208201526040830151828111156158cd575f80fd5b6158d9888286016151cd565b6040830152508094505050506020830151614f1581614cea565b5f8060408385031215615904575f80fd5b825191506020830151614f1581614e5c565b6001600160401b03818116838216028082169190828114615939576159396154d8565b505092915050565b5f8235603e198336030181126152f6575f80fd5b5f808335601e1984360301811261596a575f80fd5b8301803591506001600160401b03821115615983575f80fd5b6020019150368190038213156135b4575f80fd5b602081525f610fa5602083018486615579565b5f604082360312156159ba575f80fd5b6159c2615155565b6159cb83614cf7565b81526020808401356001600160401b03808211156159e7575f80fd5b9085019036601f8301126159f9575f80fd5b813581811115615a0b57615a0b615119565b8060051b9150615a1c848301615177565b8181529183018401918481019036841115615a35575f80fd5b938501935b83851015615a5f5784359250615a4f83614dd0565b8282529385019390850190615a3a565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615acc5784516001600160a01b03168252938301936001929092019190830190615aa3565b509695505050505050565b60208152815160208201525f602083015160e06040840152615afd610100840182614fbd565b90506040840151601f1980858403016060860152615b1b8383614fbd565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b4b8383615a71565b925060a08601519150808584030160c086015250615b698282615a71565b91505060c0840151615b8660e08501826001600160401b03169052565b509392505050565b5f8060408385031215615b9f575f80fd5b8251915060208301516001600160401b03811115615bbb575f80fd5b615bc7858286016151cd565b9150509250929050565b6001600160401b03831115615be857615be8615119565b615bfc83615bf683546150d3565b836153d9565b5f601f841160018114615c2d575f8515615c165750838201355b5f19600387901b1c1916600186901b178355610e80565b5f83815260208120601f198716915b82811015615c5c5786850135825560209485019460019092019101615c3c565b5086821015615c78575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610e6e57610e6e6154d8565b5f60208284031215615cad575f80fd5b6133c382614e4b565b5f60208284031215615cc6575f80fd5b813560ff811681146133c3575f80fd5b5f6001600160401b03808316818103615517576155176154d8565b5f60208284031215615d01575f80fd5b81516133c381614cea56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a26469706673582212206cac69af0082ce563641f34c38fe22772649667fc7021c2ea32c70e6a83637ca64736f6c63430008190033", } // 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 5f113134c..133c61850 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -104,7 +104,7 @@ type ValidatorRegistrationInput 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\":\"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\":[{\"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\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"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\":\"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\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"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\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"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\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"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\":\"DelegatorAdded\",\"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\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"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\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"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_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndValidation\",\"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\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"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\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndValidation\",\"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\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"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\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"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\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"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: "0x608060405234801561000f575f80fd5b50604051615c6e380380615c6e83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615b218061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614afc565b610724565b005b348015610263575f80fd5b50610256610272366004614b37565b610735565b348015610282575f80fd5b50610256610291366004614b4e565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614afc565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614b65565b610aae565b34801561030a575f80fd5b50610256610319366004614bb3565b611033565b348015610329575f80fd5b5061033d610338366004614b37565b6110a7565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614be8565b6110fb565b3480156103d9575f80fd5b506102566103e8366004614afc565b61110e565b3480156103f8575f80fd5b50610256610407366004614c36565b61111a565b348015610417575f80fd5b50610256610426366004614be8565b6111ff565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614bb3565b61120b565b34801561047e575f80fd5b5061049261048d366004614c63565b6114d8565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614b37565b6114f8565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614afc565b61150c565b3480156104fc575f80fd5b5061025661050b366004614be8565b611518565b34801561051b575f80fd5b5061025661052a366004614bb3565b611524565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614c7e565b61175e565b34801561056d575f80fd5b5061025661057c366004614b37565b611840565b34801561058c575f80fd5b5061025661059b366004614be8565b6118d4565b3480156105ab575f80fd5b506102566105ba366004614c36565b6118e0565b6104926105cd366004614cbd565b611ad5565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614b37565b611b09565b348015610649575f80fd5b506104925f80516020615a8c83398151915281565b348015610669575f80fd5b50610256610678366004614b37565b611d62565b61049261068b366004614b37565b611e9f565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614b37565b611ed0565b6040516102b89190614d93565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614c7e565b61201f565b348015610710575f80fd5b5061049261071f366004614e13565b6120e6565b6107308383835f612141565b505050565b5f8181525f80516020615acc8339815191526020526040808220815160e0810190925280545f80516020615a8c83398151915293929190829060ff16600581111561078257610782614d1e565b600581111561079357610793614d1e565b81526020016001820180546107a790614e7e565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614e7e565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614d1e565b146108c5575f8381526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190614fb9565b6040518263ffffffff1660e01b815260040161097f9190614fea565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf9190614ffc565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a568361216d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f61217e565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615a8c8339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b679190614ffc565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba16060850160408601615013565b6001600160a01b031614610be457610bbf6060840160408501615013565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf2606085018561502e565b905090505f805b828163ffffffff161015610e59575f610c15606088018861502e565b8363ffffffff16818110610c2b57610c2b615073565b9050602002810190610c3d9190615087565b610c46906150f2565b80516040519192505f916008880191610c5e9161516d565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc9190600401614fea565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd79161516d565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d159190614ffc565b90508086600801835f0151604051610d2d919061516d565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610d6d90826151c2565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610dec9085615291565b8251604051919550610dfd9161516d565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610e52906152a4565b9050610bf9565b50600483018190556001830154606490610e7d90600160401b900460ff16836152c6565b1015610e9f57604051635943317f60e01b8152600481018290526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ec38761253e565b604001516040518263ffffffff1660e01b8152600401610ee39190614fea565b602060405180830381865af4158015610efe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f229190614ffc565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f5c9190615408565b5f60405180830381865af4158015610f76573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f9d9190810190614fb9565b90505f600282604051610fb0919061516d565b602060405180830381855afa158015610fcb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610fee9190614ffc565b905082811461101a5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506009909201805460ff1916600117905550505050565b61103c82612654565b61105c576040516330efa98b60e01b8152600481018390526024016108bc565b5f61106683611ed0565b519050600281600581111561107d5761107d614d1e565b1461109d578060405163170cc93360e21b81526004016108bc9190614eb0565b6109bf838361267d565b5f806110b161291c565b600301546110bf9084615493565b90508015806110d457506001600160401b0381115b156110f55760405163222d164360e21b8152600481018490526024016108bc565b92915050565b6111078484848461217e565b5050505050565b6109bf8383835f612940565b611122612b62565b5f61112b61291c565b90505f8061113884612b99565b9150915061114582612654565b611151575050506111e6565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b039182169116806111885750806111a6565b5f848152600b86016020526040902080546001600160a01b03191690555b6004835160058111156111bb576111bb614d1e565b036111ca576111ca8185612f4c565b6111e0826111db85604001516114d8565b612f76565b50505050505b6111fc60015f80516020615aac83398151915255565b50565b6109bf84848484612f9c565b5f61121461291c565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561124d5761124d614d1e565b600381111561125e5761125e614d1e565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112d482611ed0565b90506001835160038111156112eb576112eb614d1e565b1461130c578251604051633b0d540d60e21b81526108bc91906004016154b2565b60048151600581111561132157611321614d1e565b036113375761132f86612fc8565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61135c8961253e565b604001516040518263ffffffff1660e01b815260040161137c9190614fea565b606060405180830381865af4158015611397573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113bb91906154cc565b50915091508184146113e857846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b031610806114215750806001600160401b03168560a001516001600160401b0316115b1561144a57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114e161291c565b600301546110f5906001600160401b0384166152c6565b5f61150282611ed0565b6080015192915050565b6107308383835f612f9c565b61110784848484612940565b61152c612b62565b5f61153561291c565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561156e5761156e614d1e565b600381111561157f5761157f614d1e565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156115f8576115f8614d1e565b14611619578051604051633b0d540d60e21b81526108bc91906004016154b2565b60046116288260400151611ed0565b51600581111561163a5761163a614d1e565b14611739575f6116498461253e565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116889190614fea565b606060405180830381865af41580156116a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c791906154cc565b5091509150818460400151146116f35760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561173557604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61174284612fc8565b505061175a60015f80516020615aac83398151915255565b5050565b6001600160a01b0381166117905760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f61179961291c565b5f8481526006820160205260409020549091506001600160a01b031633146117e257335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b336001600160a01b03831603611811575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f61184961291c565b90505f61185583611ed0565b519050600481600581111561186c5761186c614d1e565b1461188c578060405163170cc93360e21b81526004016108bc9190614eb0565b5f8381526006830160205260409020546001600160a01b031633146118b157336117bd565b5f838152600683016020526040902054610730906001600160a01b031684612f4c565b6109bf84848484612141565b5f80516020615a8c8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6119138661253e565b604001516040518263ffffffff1660e01b81526004016119339190614fea565b6040805180830381865af415801561194d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119719190615501565b915091508061199757604051632d07135360e01b815281151560048201526024016108bc565b5f828152600684016020526040902080546119b190614e7e565b90505f036119d55760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078501602052604090205460ff1660058111156119fb576119fb614d1e565b14611a2e575f8281526007840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b5f8281526006840160205260408120611a4691614a50565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611ade612b62565b611aea848484346131d5565b9050611b0260015f80516020615aac83398151915255565b9392505050565b5f611b1261291c565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b4b57611b4b614d1e565b6003811115611b5c57611b5c614d1e565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611bd557611bd5614d1e565b14158015611bf65750600381516003811115611bf357611bf3614d1e565b14155b15611c17578051604051633b0d540d60e21b81526108bc91906004016154b2565b5f611c258260400151611ed0565b905080606001516001600160401b03165f03611c57576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611cc593906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611cdf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d069190810190614fb9565b6040518263ffffffff1660e01b8152600401611d229190614fea565b6020604051808303815f875af1158015611d3e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111079190614ffc565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615a8c8339815191529190611da990614e7e565b90505f03611dcd5760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078301602052604090205460ff166005811115611df357611df3614d1e565b14611e26575f8281526007820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611e5f9190600401615524565b6020604051808303815f875af1158015611e7b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107309190614ffc565b5f611ea8612b62565b611eb382333461332f565b9050611ecb60015f80516020615aac83398151915255565b919050565b611ed8614a87565b5f8281525f80516020615acc833981519152602052604090819020815160e0810190925280545f80516020615a8c833981519152929190829060ff166005811115611f2557611f25614d1e565b6005811115611f3657611f36614d1e565b8152602001600182018054611f4a90614e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7690614e7e565b8015611fc15780601f10611f9857610100808354040283529160200191611fc1565b820191905f5260205f20905b815481529060010190602001808311611fa457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b0381166120515760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f61205a61291c565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461208857336117bd565b336001600160a01b038316036120b7575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615a8c833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb089061212990869086906155ae565b90815260200160405180910390205491505092915050565b61214d8484848461217e565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b61217561356f565b6111fc816135ba565b5f8061218861291c565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156121c1576121c1614d1e565b60038111156121d2576121d2614d1e565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61224882611ed0565b905060028351600381111561225f5761225f614d1e565b14612280578251604051633b0d540d60e21b81526108bc91906004016154b2565b60208301516001600160a01b0316331461231c575f8281526006850160205260409020546001600160a01b031633146122b957336117bd565b5f82815260068501602052604090205460a08201516122e891600160b01b90046001600160401b0316906155bd565b6001600160401b031642101561231c5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b60028151600581111561233157612331614d1e565b036124995760028401546080840151612353916001600160401b0316906155bd565b6001600160401b03164210156123875760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b871561239957612397828861267d565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516123d29184916123cd91906155dd565b613634565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124138461380b565b5f8b8152600887016020526040902081905590506001600160a01b0387161561245f575f8a8152600986016020526040902080546001600160a01b0319166001600160a01b0389161790555b60405183908b907f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57905f90a3151594506125369350505050565b6004815160058111156124ae576124ae614d1e565b0361251a576124bc8361380b565b5f8a81526008860160205260409020556001600160a01b03861615612504575f898152600985016020526040902080546001600160a01b0319166001600160a01b0388161790555b61250d89612fc8565b6001945050505050612536565b805160405163170cc93360e21b81526108bc9190600401614eb0565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125a2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125c991908101906155fd565b91509150806125eb57604051636b2f19e960e01b815260040160405180910390fd5b815115612611578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b03161561264d576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f8061265e61291c565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126c8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126ef91908101906155fd565b915091508061271157604051636b2f19e960e01b815260040160405180910390fd5b5f61271a61291c565b6005810154845191925014612748578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b031615612784576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b0316156127c0576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016127fd9190614fea565b6040805180830381865af4158015612817573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061283b919061568d565b915091508188146128625760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b0390811690821611156128f3575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612911565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061294a61291c565b90505f612956876139a2565b905061296187612654565b61297057600192505050612536565b5f8781526006830160205260409020546001600160a01b0316331461299557336117bd565b5f87815260068301602052604090205460a08201516129c491600160b01b90046001600160401b0316906155bd565b6001600160401b03168160c001516001600160401b03161015612a0b5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f8615612a2357612a1c888761267d565b9050612a41565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a66906114d8565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612acf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612af39190614ffc565b90508084600a015f8b81526020019081526020015f205f828254612b179190615291565b90915550506001600160a01b03861615612b54575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615aac833981519152805460011901612b9357604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612ba2614a87565b5f80516020615a8c8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612bd58861253e565b604001516040518263ffffffff1660e01b8152600401612bf59190614fea565b6040805180830381865af4158015612c0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c339190615501565b915091508015612c5a57604051632d07135360e01b815281151560048201526024016108bc565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612c8b57612c8b614d1e565b6005811115612c9c57612c9c614d1e565b8152602001600182018054612cb090614e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054612cdc90614e7e565b8015612d275780601f10612cfe57610100808354040283529160200191612d27565b820191905f5260205f20905b815481529060010190602001808311612d0a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612d9257612d92614d1e565b14158015612db35750600181516005811115612db057612db0614d1e565b14155b15612dd457805160405163170cc93360e21b81526108bc9190600401614eb0565b600381516005811115612de957612de9614d1e565b03612df75760048152612dfc565b600581525b836008018160200151604051612e12919061516d565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612e5657612e56614d1e565b021790555060208201516001820190612e6f90826151c2565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612f1557612f15614d1e565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612f5561291c565b5f838152600a82016020526040812080549190559091506109bf8482613c86565b61175a6001600160a01b03831682613ce4565b60015f80516020615aac83398151915255565b612fa884848484612940565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612fd161291c565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561300a5761300a614d1e565b600381111561301b5761301b614d1e565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091506130b87fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b82608001516130c791906155bd565b6001600160401b03164210156130fb5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b03168061314b57506020820151613169565b5f858152600985016020526040902080546001600160a01b03191690555b5f80613176838886613d77565b9150915061318f85602001516111db87606001516114d8565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131df61291c565b600281015490915061ffff600160401b90910481169086161080613208575061271061ffff8616115b1561322c57604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b039081169085161015613268576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b805483108061327a5750806001015483115b1561329b5760405163222d164360e21b8152600481018490526024016108bc565b825f6132a6826110a7565b90505f6132b38983613e24565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f8061333961291c565b90505f613345846110a7565b90505f61335187611ed0565b905061335c87612654565b61337c576040516330efa98b60e01b8152600481018890526024016108bc565b60028151600581111561339157613391614d1e565b146133b257805160405163170cc93360e21b81526108bc9190600401614eb0565b5f8282608001516133c391906155bd565b905083600201600a9054906101000a90046001600160401b031682604001516133ec91906156b0565b6001600160401b0316816001600160401b0316111561342957604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f806134358a84613634565b915091505f8a8360405160200161346392919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166135b857604051631afcd79f60e31b815260040160405180910390fd5b565b6135c261356f565b6135cb81614349565b6135d3614362565b6111fc606082013560808301356135f060c0850160a08601614c63565b61360060e0860160c087016156db565b613611610100870160e088016156f4565b61010087013561362961014089016101208a01615013565b886101400135614372565b5f8281525f80516020615acc833981519152602052604081206002015481905f80516020615a8c83398151915290600160801b90046001600160401b031661367c8582614557565b5f6136868761477a565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561372f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526137569190810190614fb9565b6040518263ffffffff1660e01b81526004016137729190614fea565b6020604051808303815f875af115801561378e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137b29190614ffc565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061381561291c565b90505f6138258460400151611ed0565b90505f60038251600581111561383d5761383d614d1e565b148061385b575060048251600581111561385957613859614d1e565b145b1561386b575060c08101516138a8565b60028251600581111561388057613880614d1e565b0361388c5750426138a8565b815160405163170cc93360e21b81526108bc9190600401614eb0565b84608001516001600160401b0316816001600160401b0316116138cf57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906138f4906114d8565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613975573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139999190614ffc565b95945050505050565b6139aa614a87565b5f8281525f80516020615acc8339815191526020526040808220815160e0810190925280545f80516020615a8c83398151915293929190829060ff1660058111156139f7576139f7614d1e565b6005811115613a0857613a08614d1e565b8152602001600182018054613a1c90614e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054613a4890614e7e565b8015613a935780601f10613a6a57610100808354040283529160200191613a93565b820191905f5260205f20905b815481529060010190602001808311613a7657829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613b0157613b01614d1e565b14613b34575f8481526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613b7857613b78614d1e565b021790555060208201516001820190613b9190826151c2565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613c2f8582613634565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613cd2575f80fd5b505af115801561132f573d5f803e3d5ffd5b80471015613d075760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613d50576040519150601f19603f3d011682016040523d82523d5f602084013e613d55565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d8261291c565b5f86815260088201602052604081208054908290559192509081908015613e16575f87815260068501602052604090205461271090613dcc90600160a01b900461ffff16836152c6565b613dd69190615493565b91508184600a015f8981526020019081526020015f205f828254613dfa9190615291565b90915550613e0a90508282615714565b9250613e168984613c86565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613e6857604051637fab81e560e01b815260040160405180910390fd5b5f80516020615a8c83398151915242613e876060860160408701614c63565b6001600160401b0316111580613ec15750613ea56202a30042615291565b613eb56060860160408701614c63565b6001600160401b031610155b15613efb57613ed66060850160408601614c63565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b613f10613f0b6060860186615727565b6147ef565b613f20613f0b6080860186615727565b6030613f2f602086018661573b565b905014613f6157613f43602085018561573b565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613f6b848061573b565b90505f03613f9857613f7d848061573b565b604051633e08a12560e11b81526004016108bc92919061577d565b5f60088201613fa7868061573b565b604051613fb59291906155ae565b90815260200160405180910390205414613fee57613fd3848061573b565b60405163a41f772f60e01b81526004016108bc92919061577d565b613ff8835f614557565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce5190602081016140358a8061573b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060209081019061407d908b018b61573b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020016140c660608b0160408c01614c63565b6001600160401b031681526020016140e160608b018b615727565b6140ea90615790565b81526020016140fc60808b018b615727565b61410590615790565b8152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161413391906158bd565b5f60405180830381865af415801561414d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141749190810190615974565b5f8281526006860160205260409020919350915061419282826151c2565b5081600884016141a2888061573b565b6040516141b09291906155ae565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141ec908590600401614fea565b6020604051808303815f875af1158015614208573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061422c9190614ffc565b5f8481526007860160205260409020805460ff191660011790559050614252878061573b565b5f8581526007870160205260409020600101916142709190836159b7565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806142cf888061573b565b6040516142dd9291906155ae565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b604001602081019061431b9190614c63565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b61435161356f565b614359614958565b6111fc81614960565b61436a61356f565b6135b8614a48565b61437a61356f565b5f61438361291c565b905061ffff8616158061439b575061271061ffff8716115b156143bf57604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156143e35760405163222d164360e21b8152600481018a90526024016108bc565b60ff851615806143f65750600a60ff8616115b156144195760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614480576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f036144a05760405163a733007160e01b815260040160405180910390fd5b816144c157604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615a8c8339815191525f6001600160401b03808416908516111561458b5761458483856155dd565b9050614598565b61459584846155dd565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806145fa5750600184015481516145f6916001600160401b031690615291565b8210155b15614620576001600160401b03831660608201528181526040810151602082015261463f565b828160600181815161463291906155bd565b6001600160401b03169052505b606081015161464f9060646156b0565b602082015160018601546001600160401b03929092169161467a9190600160401b900460ff166152c6565b10156146aa57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b856001600160401b0316816040018181516146c59190615291565b9052506040810180516001600160401b03871691906146e5908390615714565b9052506001840154604082015160649161470a91600160401b90910460ff16906152c6565b1015614731578060400151604051635943317f60e01b81526004016108bc91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615acc8339815191526020526040812060020180545f80516020615a8c83398151915291906008906147c490600160401b90046001600160401b0316615a70565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6147fc6020820182614c36565b63ffffffff1615801561481c5750614817602082018261502e565b151590505b156148635761482e6020820182614c36565b61483b602083018361502e565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b614870602082018261502e565b905061487f6020830183614c36565b63ffffffff1611156148985761482e6020820182614c36565b60015b6148a8602083018361502e565b905081101561175a576148be602083018361502e565b6148c9600184615714565b8181106148d8576148d8615073565b90506020020160208101906148ed9190615013565b6001600160a01b0316614903602084018461502e565b8381811061491357614913615073565b90506020020160208101906149289190615013565b6001600160a01b0316101561495057604051630dbc8d5f60e31b815260040160405180910390fd5b60010161489b565b6135b861356f565b61496861356f565b80355f80516020615a8c833981519152908155601461498d60608401604085016156f4565b60ff1611806149ac57506149a760608301604084016156f4565b60ff16155b156149e0576149c160608301604084016156f4565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b6149f060608301604084016156f4565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614a216040830160208401614c63565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612f8961356f565b508054614a5c90614e7e565b5f825580601f10614a6b575050565b601f0160209004905f5260205f20908101906111fc9190614ac4565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614ad8575f8155600101614ac5565b5090565b80151581146111fc575f80fd5b803563ffffffff81168114611ecb575f80fd5b5f805f60608486031215614b0e575f80fd5b833592506020840135614b2081614adc565b9150614b2e60408501614ae9565b90509250925092565b5f60208284031215614b47575f80fd5b5035919050565b5f6101608284031215614b5f575f80fd5b50919050565b5f8060408385031215614b76575f80fd5b82356001600160401b03811115614b8b575f80fd5b830160808186031215614b9c575f80fd5b9150614baa60208401614ae9565b90509250929050565b5f8060408385031215614bc4575f80fd5b82359150614baa60208401614ae9565b6001600160a01b03811681146111fc575f80fd5b5f805f8060808587031215614bfb575f80fd5b843593506020850135614c0d81614adc565b9250614c1b60408601614ae9565b91506060850135614c2b81614bd4565b939692955090935050565b5f60208284031215614c46575f80fd5b611b0282614ae9565b6001600160401b03811681146111fc575f80fd5b5f60208284031215614c73575f80fd5b8135611b0281614c4f565b5f8060408385031215614c8f575f80fd5b823591506020830135614ca181614bd4565b809150509250929050565b803561ffff81168114611ecb575f80fd5b5f805f60608486031215614ccf575f80fd5b83356001600160401b03811115614ce4575f80fd5b840160a08187031215614cf5575f80fd5b9250614d0360208501614cac565b91506040840135614d1381614c4f565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d4257614d42614d1e565b9052565b5f5b83811015614d60578181015183820152602001614d48565b50505f910152565b5f8151808452614d7f816020860160208601614d46565b601f01601f19169290920160200192915050565b60208152614da5602082018351614d32565b5f602083015160e06040840152614dc0610100840182614d68565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614e24575f80fd5b82356001600160401b0380821115614e3a575f80fd5b818501915085601f830112614e4d575f80fd5b813581811115614e5b575f80fd5b866020828501011115614e6c575f80fd5b60209290920196919550909350505050565b600181811c90821680614e9257607f821691505b602082108103614b5f57634e487b7160e01b5f52602260045260245ffd5b602081016110f58284614d32565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ef457614ef4614ebe565b60405290565b604080519081016001600160401b0381118282101715614ef457614ef4614ebe565b604051601f8201601f191681016001600160401b0381118282101715614f4457614f44614ebe565b604052919050565b5f6001600160401b03821115614f6457614f64614ebe565b50601f01601f191660200190565b5f82601f830112614f81575f80fd5b8151614f94614f8f82614f4c565b614f1c565b818152846020838601011115614fa8575f80fd5b612536826020830160208701614d46565b5f60208284031215614fc9575f80fd5b81516001600160401b03811115614fde575f80fd5b61253684828501614f72565b602081525f611b026020830184614d68565b5f6020828403121561500c575f80fd5b5051919050565b5f60208284031215615023575f80fd5b8135611b0281614bd4565b5f808335601e19843603018112615043575f80fd5b8301803591506001600160401b0382111561505c575f80fd5b6020019150600581901b3603821315613804575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261509b575f80fd5b9190910192915050565b5f82601f8301126150b4575f80fd5b81356150c2614f8f82614f4c565b8181528460208386010111156150d6575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615102575f80fd5b61510a614ed2565b82356001600160401b0380821115615120575f80fd5b61512c368387016150a5565b83526020850135915080821115615141575f80fd5b5061514e368286016150a5565b602083015250604083013561516281614c4f565b604082015292915050565b5f825161509b818460208701614d46565b601f82111561073057805f5260205f20601f840160051c810160208510156151a35750805b601f840160051c820191505b81811015611107575f81556001016151af565b81516001600160401b038111156151db576151db614ebe565b6151ef816151e98454614e7e565b8461517e565b602080601f831160018114615222575f841561520b5750858301515b5f19600386901b1c1916600185901b17855561132f565b5f85815260208120601f198616915b8281101561525057888601518255948401946001909101908401615231565b508582101561526d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808201808211156110f5576110f561527d565b5f63ffffffff8083168181036152bc576152bc61527d565b6001019392505050565b80820281158282048414176110f5576110f561527d565b5f808335601e198436030181126152f2575f80fd5b83016020810192503590506001600160401b03811115615310575f80fd5b803603821315613804575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156153fb57848303601f19018952813536889003605e19018112615382575f80fd5b8701606061539082806152dd565b8287526153a0838801828461531e565b925050506153b0868301836152dd565b868303888801526153c283828461531e565b9250505060408083013592506153d783614c4f565b6001600160401b03929092169490910193909352978301979083019060010161535d565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561542c81614bd4565b6001600160a01b031660608381019190915283013536849003601e19018112615453575f80fd5b83016020810190356001600160401b0381111561546e575f80fd5b8060051b360382131561547f575f80fd5b60808085015261399960a085018284615346565b5f826154ad57634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106154c6576154c6614d1e565b91905290565b5f805f606084860312156154de575f80fd5b8351925060208401516154f081614c4f565b6040850151909250614d1381614c4f565b5f8060408385031215615512575f80fd5b825191506020830151614ca181614adc565b5f60208083525f845461553681614e7e565b806020870152604060018084165f81146155575760018114615573576155a0565b60ff19851660408a0152604084151560051b8a010195506155a0565b895f5260205f205f5b858110156155975781548b820186015290830190880161557c565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0381811683821601908082111561264d5761264d61527d565b6001600160401b0382811682821603908082111561264d5761264d61527d565b5f806040838503121561560e575f80fd5b82516001600160401b0380821115615624575f80fd5b9084019060608287031215615637575f80fd5b61563f614ed2565b82518152602083015161565181614bd4565b6020820152604083015182811115615667575f80fd5b61567388828601614f72565b6040830152508094505050506020830151614ca181614adc565b5f806040838503121561569e575f80fd5b825191506020830151614ca181614c4f565b6001600160401b038181168382160280821691908281146156d3576156d361527d565b505092915050565b5f602082840312156156eb575f80fd5b611b0282614cac565b5f60208284031215615704575f80fd5b813560ff81168114611b02575f80fd5b818103818111156110f5576110f561527d565b5f8235603e1983360301811261509b575f80fd5b5f808335601e19843603018112615750575f80fd5b8301803591506001600160401b03821115615769575f80fd5b602001915036819003821315613804575f80fd5b602081525f61253660208301848661531e565b5f604082360312156157a0575f80fd5b6157a8614efa565b6157b183614ae9565b81526020808401356001600160401b03808211156157cd575f80fd5b9085019036601f8301126157df575f80fd5b8135818111156157f1576157f1614ebe565b8060051b9150615802848301614f1c565b818152918301840191848101903684111561581b575f80fd5b938501935b83851015615845578435925061583583614bd4565b8282529385019390850190615820565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158b25784516001600160a01b03168252938301936001929092019190830190615889565b509695505050505050565b60208152815160208201525f602083015160e060408401526158e3610100840182614d68565b90506040840151601f19808584030160608601526159018383614d68565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159318383615857565b925060a08601519150808584030160c08601525061594f8282615857565b91505060c084015161596c60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615985575f80fd5b8251915060208301516001600160401b038111156159a1575f80fd5b6159ad85828601614f72565b9150509250929050565b6001600160401b038311156159ce576159ce614ebe565b6159e2836159dc8354614e7e565b8361517e565b5f601f841160018114615a13575f85156159fc5750838201355b5f19600387901b1c1916600186901b178355611107565b5f83815260208120601f198716915b82811015615a425786850135825560209485019460019092019101615a22565b5086821015615a5e575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b038083168181036152bc576152bc61527d56fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a264697066735822122066d8fe3959bbe03128ad387ab9a58a89f20eb530a034f03297d5b266e8c3a48864736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615c6e380380615c6e83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615b218061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614afc565b610724565b005b348015610263575f80fd5b50610256610272366004614b37565b610735565b348015610282575f80fd5b50610256610291366004614b4e565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614afc565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614b65565b610aae565b34801561030a575f80fd5b50610256610319366004614bb3565b611033565b348015610329575f80fd5b5061033d610338366004614b37565b6110a7565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614be8565b6110fb565b3480156103d9575f80fd5b506102566103e8366004614afc565b61110e565b3480156103f8575f80fd5b50610256610407366004614c36565b61111a565b348015610417575f80fd5b50610256610426366004614be8565b6111ff565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614bb3565b61120b565b34801561047e575f80fd5b5061049261048d366004614c63565b6114d8565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614b37565b6114f8565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614afc565b61150c565b3480156104fc575f80fd5b5061025661050b366004614be8565b611518565b34801561051b575f80fd5b5061025661052a366004614bb3565b611524565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614c7e565b61175e565b34801561056d575f80fd5b5061025661057c366004614b37565b611840565b34801561058c575f80fd5b5061025661059b366004614be8565b6118d4565b3480156105ab575f80fd5b506102566105ba366004614c36565b6118e0565b6104926105cd366004614cbd565b611ad5565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614b37565b611b09565b348015610649575f80fd5b506104925f80516020615a8c83398151915281565b348015610669575f80fd5b50610256610678366004614b37565b611d62565b61049261068b366004614b37565b611e9f565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614b37565b611ed0565b6040516102b89190614d93565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614c7e565b61201f565b348015610710575f80fd5b5061049261071f366004614e13565b6120e6565b6107308383835f612141565b505050565b5f8181525f80516020615acc8339815191526020526040808220815160e0810190925280545f80516020615a8c83398151915293929190829060ff16600581111561078257610782614d1e565b600581111561079357610793614d1e565b81526020016001820180546107a790614e7e565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614e7e565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614d1e565b146108c5575f8381526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190614fb9565b6040518263ffffffff1660e01b815260040161097f9190614fea565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf9190614ffc565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a568361216d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f61217e565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615a8c8339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b679190614ffc565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba16060850160408601615013565b6001600160a01b031614610be457610bbf6060840160408501615013565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf2606085018561502e565b905090505f805b828163ffffffff161015610e59575f610c15606088018861502e565b8363ffffffff16818110610c2b57610c2b615073565b9050602002810190610c3d9190615087565b610c46906150f2565b80516040519192505f916008880191610c5e9161516d565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc9190600401614fea565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd79161516d565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d159190614ffc565b90508086600801835f0151604051610d2d919061516d565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610d6d90826151c2565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610dec9085615291565b8251604051919550610dfd9161516d565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610e52906152a4565b9050610bf9565b50600483018190556001830154606490610e7d90600160401b900460ff16836152c6565b1015610e9f57604051635943317f60e01b8152600481018290526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ec38761253e565b604001516040518263ffffffff1660e01b8152600401610ee39190614fea565b602060405180830381865af4158015610efe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f229190614ffc565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f5c9190615408565b5f60405180830381865af4158015610f76573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f9d9190810190614fb9565b90505f600282604051610fb0919061516d565b602060405180830381855afa158015610fcb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610fee9190614ffc565b905082811461101a5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506009909201805460ff1916600117905550505050565b61103c82612654565b61105c576040516330efa98b60e01b8152600481018390526024016108bc565b5f61106683611ed0565b519050600281600581111561107d5761107d614d1e565b1461109d578060405163170cc93360e21b81526004016108bc9190614eb0565b6109bf838361267d565b5f806110b161291c565b600301546110bf9084615493565b90508015806110d457506001600160401b0381115b156110f55760405163222d164360e21b8152600481018490526024016108bc565b92915050565b6111078484848461217e565b5050505050565b6109bf8383835f612940565b611122612b62565b5f61112b61291c565b90505f8061113884612b99565b9150915061114582612654565b611151575050506111e6565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b039182169116806111885750806111a6565b5f848152600b86016020526040902080546001600160a01b03191690555b6004835160058111156111bb576111bb614d1e565b036111ca576111ca8185612f4c565b6111e0826111db85604001516114d8565b612f76565b50505050505b6111fc60015f80516020615aac83398151915255565b50565b6109bf84848484612f9c565b5f61121461291c565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561124d5761124d614d1e565b600381111561125e5761125e614d1e565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112d482611ed0565b90506001835160038111156112eb576112eb614d1e565b1461130c578251604051633b0d540d60e21b81526108bc91906004016154b2565b60048151600581111561132157611321614d1e565b036113375761132f86612fc8565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61135c8961253e565b604001516040518263ffffffff1660e01b815260040161137c9190614fea565b606060405180830381865af4158015611397573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113bb91906154cc565b50915091508184146113e857846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b031610806114215750806001600160401b03168560a001516001600160401b0316115b1561144a57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114e161291c565b600301546110f5906001600160401b0384166152c6565b5f61150282611ed0565b6080015192915050565b6107308383835f612f9c565b61110784848484612940565b61152c612b62565b5f61153561291c565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561156e5761156e614d1e565b600381111561157f5761157f614d1e565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156115f8576115f8614d1e565b14611619578051604051633b0d540d60e21b81526108bc91906004016154b2565b60046116288260400151611ed0565b51600581111561163a5761163a614d1e565b14611739575f6116498461253e565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116889190614fea565b606060405180830381865af41580156116a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c791906154cc565b5091509150818460400151146116f35760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561173557604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61174284612fc8565b505061175a60015f80516020615aac83398151915255565b5050565b6001600160a01b0381166117905760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f61179961291c565b5f8481526006820160205260409020549091506001600160a01b031633146117e257335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b336001600160a01b03831603611811575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f61184961291c565b90505f61185583611ed0565b519050600481600581111561186c5761186c614d1e565b1461188c578060405163170cc93360e21b81526004016108bc9190614eb0565b5f8381526006830160205260409020546001600160a01b031633146118b157336117bd565b5f838152600683016020526040902054610730906001600160a01b031684612f4c565b6109bf84848484612141565b5f80516020615a8c8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6119138661253e565b604001516040518263ffffffff1660e01b81526004016119339190614fea565b6040805180830381865af415801561194d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119719190615501565b915091508061199757604051632d07135360e01b815281151560048201526024016108bc565b5f828152600684016020526040902080546119b190614e7e565b90505f036119d55760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078501602052604090205460ff1660058111156119fb576119fb614d1e565b14611a2e575f8281526007840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b5f8281526006840160205260408120611a4691614a50565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611ade612b62565b611aea848484346131d5565b9050611b0260015f80516020615aac83398151915255565b9392505050565b5f611b1261291c565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b4b57611b4b614d1e565b6003811115611b5c57611b5c614d1e565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611bd557611bd5614d1e565b14158015611bf65750600381516003811115611bf357611bf3614d1e565b14155b15611c17578051604051633b0d540d60e21b81526108bc91906004016154b2565b5f611c258260400151611ed0565b905080606001516001600160401b03165f03611c57576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611cc593906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611cdf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d069190810190614fb9565b6040518263ffffffff1660e01b8152600401611d229190614fea565b6020604051808303815f875af1158015611d3e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111079190614ffc565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615a8c8339815191529190611da990614e7e565b90505f03611dcd5760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078301602052604090205460ff166005811115611df357611df3614d1e565b14611e26575f8281526007820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611e5f9190600401615524565b6020604051808303815f875af1158015611e7b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107309190614ffc565b5f611ea8612b62565b611eb382333461332f565b9050611ecb60015f80516020615aac83398151915255565b919050565b611ed8614a87565b5f8281525f80516020615acc833981519152602052604090819020815160e0810190925280545f80516020615a8c833981519152929190829060ff166005811115611f2557611f25614d1e565b6005811115611f3657611f36614d1e565b8152602001600182018054611f4a90614e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7690614e7e565b8015611fc15780601f10611f9857610100808354040283529160200191611fc1565b820191905f5260205f20905b815481529060010190602001808311611fa457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b0381166120515760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f61205a61291c565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461208857336117bd565b336001600160a01b038316036120b7575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615a8c833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb089061212990869086906155ae565b90815260200160405180910390205491505092915050565b61214d8484848461217e565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b61217561356f565b6111fc816135ba565b5f8061218861291c565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156121c1576121c1614d1e565b60038111156121d2576121d2614d1e565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61224882611ed0565b905060028351600381111561225f5761225f614d1e565b14612280578251604051633b0d540d60e21b81526108bc91906004016154b2565b60208301516001600160a01b0316331461231c575f8281526006850160205260409020546001600160a01b031633146122b957336117bd565b5f82815260068501602052604090205460a08201516122e891600160b01b90046001600160401b0316906155bd565b6001600160401b031642101561231c5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b60028151600581111561233157612331614d1e565b036124995760028401546080840151612353916001600160401b0316906155bd565b6001600160401b03164210156123875760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b871561239957612397828861267d565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516123d29184916123cd91906155dd565b613634565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124138461380b565b5f8b8152600887016020526040902081905590506001600160a01b0387161561245f575f8a8152600986016020526040902080546001600160a01b0319166001600160a01b0389161790555b60405183908b907f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57905f90a3151594506125369350505050565b6004815160058111156124ae576124ae614d1e565b0361251a576124bc8361380b565b5f8a81526008860160205260409020556001600160a01b03861615612504575f898152600985016020526040902080546001600160a01b0319166001600160a01b0388161790555b61250d89612fc8565b6001945050505050612536565b805160405163170cc93360e21b81526108bc9190600401614eb0565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125a2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125c991908101906155fd565b91509150806125eb57604051636b2f19e960e01b815260040160405180910390fd5b815115612611578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b03161561264d576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f8061265e61291c565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126c8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126ef91908101906155fd565b915091508061271157604051636b2f19e960e01b815260040160405180910390fd5b5f61271a61291c565b6005810154845191925014612748578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b031615612784576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b0316156127c0576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016127fd9190614fea565b6040805180830381865af4158015612817573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061283b919061568d565b915091508188146128625760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b0390811690821611156128f3575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612911565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061294a61291c565b90505f612956876139a2565b905061296187612654565b61297057600192505050612536565b5f8781526006830160205260409020546001600160a01b0316331461299557336117bd565b5f87815260068301602052604090205460a08201516129c491600160b01b90046001600160401b0316906155bd565b6001600160401b03168160c001516001600160401b03161015612a0b5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f8615612a2357612a1c888761267d565b9050612a41565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a66906114d8565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612acf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612af39190614ffc565b90508084600a015f8b81526020019081526020015f205f828254612b179190615291565b90915550506001600160a01b03861615612b54575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615aac833981519152805460011901612b9357604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612ba2614a87565b5f80516020615a8c8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612bd58861253e565b604001516040518263ffffffff1660e01b8152600401612bf59190614fea565b6040805180830381865af4158015612c0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c339190615501565b915091508015612c5a57604051632d07135360e01b815281151560048201526024016108bc565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612c8b57612c8b614d1e565b6005811115612c9c57612c9c614d1e565b8152602001600182018054612cb090614e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054612cdc90614e7e565b8015612d275780601f10612cfe57610100808354040283529160200191612d27565b820191905f5260205f20905b815481529060010190602001808311612d0a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612d9257612d92614d1e565b14158015612db35750600181516005811115612db057612db0614d1e565b14155b15612dd457805160405163170cc93360e21b81526108bc9190600401614eb0565b600381516005811115612de957612de9614d1e565b03612df75760048152612dfc565b600581525b836008018160200151604051612e12919061516d565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612e5657612e56614d1e565b021790555060208201516001820190612e6f90826151c2565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612f1557612f15614d1e565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612f5561291c565b5f838152600a82016020526040812080549190559091506109bf8482613c86565b61175a6001600160a01b03831682613ce4565b60015f80516020615aac83398151915255565b612fa884848484612940565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612fd161291c565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561300a5761300a614d1e565b600381111561301b5761301b614d1e565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091506130b87fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b82608001516130c791906155bd565b6001600160401b03164210156130fb5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b03168061314b57506020820151613169565b5f858152600985016020526040902080546001600160a01b03191690555b5f80613176838886613d77565b9150915061318f85602001516111db87606001516114d8565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131df61291c565b600281015490915061ffff600160401b90910481169086161080613208575061271061ffff8616115b1561322c57604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b039081169085161015613268576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b805483108061327a5750806001015483115b1561329b5760405163222d164360e21b8152600481018490526024016108bc565b825f6132a6826110a7565b90505f6132b38983613e24565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f8061333961291c565b90505f613345846110a7565b90505f61335187611ed0565b905061335c87612654565b61337c576040516330efa98b60e01b8152600481018890526024016108bc565b60028151600581111561339157613391614d1e565b146133b257805160405163170cc93360e21b81526108bc9190600401614eb0565b5f8282608001516133c391906155bd565b905083600201600a9054906101000a90046001600160401b031682604001516133ec91906156b0565b6001600160401b0316816001600160401b0316111561342957604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f806134358a84613634565b915091505f8a8360405160200161346392919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166135b857604051631afcd79f60e31b815260040160405180910390fd5b565b6135c261356f565b6135cb81614349565b6135d3614362565b6111fc606082013560808301356135f060c0850160a08601614c63565b61360060e0860160c087016156db565b613611610100870160e088016156f4565b61010087013561362961014089016101208a01615013565b886101400135614372565b5f8281525f80516020615acc833981519152602052604081206002015481905f80516020615a8c83398151915290600160801b90046001600160401b031661367c8582614557565b5f6136868761477a565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561372f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526137569190810190614fb9565b6040518263ffffffff1660e01b81526004016137729190614fea565b6020604051808303815f875af115801561378e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137b29190614ffc565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061381561291c565b90505f6138258460400151611ed0565b90505f60038251600581111561383d5761383d614d1e565b148061385b575060048251600581111561385957613859614d1e565b145b1561386b575060c08101516138a8565b60028251600581111561388057613880614d1e565b0361388c5750426138a8565b815160405163170cc93360e21b81526108bc9190600401614eb0565b84608001516001600160401b0316816001600160401b0316116138cf57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906138f4906114d8565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613975573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139999190614ffc565b95945050505050565b6139aa614a87565b5f8281525f80516020615acc8339815191526020526040808220815160e0810190925280545f80516020615a8c83398151915293929190829060ff1660058111156139f7576139f7614d1e565b6005811115613a0857613a08614d1e565b8152602001600182018054613a1c90614e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054613a4890614e7e565b8015613a935780601f10613a6a57610100808354040283529160200191613a93565b820191905f5260205f20905b815481529060010190602001808311613a7657829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613b0157613b01614d1e565b14613b34575f8481526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613b7857613b78614d1e565b021790555060208201516001820190613b9190826151c2565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613c2f8582613634565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613cd2575f80fd5b505af115801561132f573d5f803e3d5ffd5b80471015613d075760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613d50576040519150601f19603f3d011682016040523d82523d5f602084013e613d55565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d8261291c565b5f86815260088201602052604081208054908290559192509081908015613e16575f87815260068501602052604090205461271090613dcc90600160a01b900461ffff16836152c6565b613dd69190615493565b91508184600a015f8981526020019081526020015f205f828254613dfa9190615291565b90915550613e0a90508282615714565b9250613e168984613c86565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613e6857604051637fab81e560e01b815260040160405180910390fd5b5f80516020615a8c83398151915242613e876060860160408701614c63565b6001600160401b0316111580613ec15750613ea56202a30042615291565b613eb56060860160408701614c63565b6001600160401b031610155b15613efb57613ed66060850160408601614c63565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b613f10613f0b6060860186615727565b6147ef565b613f20613f0b6080860186615727565b6030613f2f602086018661573b565b905014613f6157613f43602085018561573b565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613f6b848061573b565b90505f03613f9857613f7d848061573b565b604051633e08a12560e11b81526004016108bc92919061577d565b5f60088201613fa7868061573b565b604051613fb59291906155ae565b90815260200160405180910390205414613fee57613fd3848061573b565b60405163a41f772f60e01b81526004016108bc92919061577d565b613ff8835f614557565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce5190602081016140358a8061573b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060209081019061407d908b018b61573b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020016140c660608b0160408c01614c63565b6001600160401b031681526020016140e160608b018b615727565b6140ea90615790565b81526020016140fc60808b018b615727565b61410590615790565b8152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161413391906158bd565b5f60405180830381865af415801561414d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141749190810190615974565b5f8281526006860160205260409020919350915061419282826151c2565b5081600884016141a2888061573b565b6040516141b09291906155ae565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141ec908590600401614fea565b6020604051808303815f875af1158015614208573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061422c9190614ffc565b5f8481526007860160205260409020805460ff191660011790559050614252878061573b565b5f8581526007870160205260409020600101916142709190836159b7565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806142cf888061573b565b6040516142dd9291906155ae565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b604001602081019061431b9190614c63565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b61435161356f565b614359614958565b6111fc81614960565b61436a61356f565b6135b8614a48565b61437a61356f565b5f61438361291c565b905061ffff8616158061439b575061271061ffff8716115b156143bf57604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156143e35760405163222d164360e21b8152600481018a90526024016108bc565b60ff851615806143f65750600a60ff8616115b156144195760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614480576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f036144a05760405163a733007160e01b815260040160405180910390fd5b816144c157604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615a8c8339815191525f6001600160401b03808416908516111561458b5761458483856155dd565b9050614598565b61459584846155dd565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806145fa5750600184015481516145f6916001600160401b031690615291565b8210155b15614620576001600160401b03831660608201528181526040810151602082015261463f565b828160600181815161463291906155bd565b6001600160401b03169052505b606081015161464f9060646156b0565b602082015160018601546001600160401b03929092169161467a9190600160401b900460ff166152c6565b10156146aa57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b856001600160401b0316816040018181516146c59190615291565b9052506040810180516001600160401b03871691906146e5908390615714565b9052506001840154604082015160649161470a91600160401b90910460ff16906152c6565b1015614731578060400151604051635943317f60e01b81526004016108bc91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615acc8339815191526020526040812060020180545f80516020615a8c83398151915291906008906147c490600160401b90046001600160401b0316615a70565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6147fc6020820182614c36565b63ffffffff1615801561481c5750614817602082018261502e565b151590505b156148635761482e6020820182614c36565b61483b602083018361502e565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b614870602082018261502e565b905061487f6020830183614c36565b63ffffffff1611156148985761482e6020820182614c36565b60015b6148a8602083018361502e565b905081101561175a576148be602083018361502e565b6148c9600184615714565b8181106148d8576148d8615073565b90506020020160208101906148ed9190615013565b6001600160a01b0316614903602084018461502e565b8381811061491357614913615073565b90506020020160208101906149289190615013565b6001600160a01b0316101561495057604051630dbc8d5f60e31b815260040160405180910390fd5b60010161489b565b6135b861356f565b61496861356f565b80355f80516020615a8c833981519152908155601461498d60608401604085016156f4565b60ff1611806149ac57506149a760608301604084016156f4565b60ff16155b156149e0576149c160608301604084016156f4565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b6149f060608301604084016156f4565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614a216040830160208401614c63565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612f8961356f565b508054614a5c90614e7e565b5f825580601f10614a6b575050565b601f0160209004905f5260205f20908101906111fc9190614ac4565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614ad8575f8155600101614ac5565b5090565b80151581146111fc575f80fd5b803563ffffffff81168114611ecb575f80fd5b5f805f60608486031215614b0e575f80fd5b833592506020840135614b2081614adc565b9150614b2e60408501614ae9565b90509250925092565b5f60208284031215614b47575f80fd5b5035919050565b5f6101608284031215614b5f575f80fd5b50919050565b5f8060408385031215614b76575f80fd5b82356001600160401b03811115614b8b575f80fd5b830160808186031215614b9c575f80fd5b9150614baa60208401614ae9565b90509250929050565b5f8060408385031215614bc4575f80fd5b82359150614baa60208401614ae9565b6001600160a01b03811681146111fc575f80fd5b5f805f8060808587031215614bfb575f80fd5b843593506020850135614c0d81614adc565b9250614c1b60408601614ae9565b91506060850135614c2b81614bd4565b939692955090935050565b5f60208284031215614c46575f80fd5b611b0282614ae9565b6001600160401b03811681146111fc575f80fd5b5f60208284031215614c73575f80fd5b8135611b0281614c4f565b5f8060408385031215614c8f575f80fd5b823591506020830135614ca181614bd4565b809150509250929050565b803561ffff81168114611ecb575f80fd5b5f805f60608486031215614ccf575f80fd5b83356001600160401b03811115614ce4575f80fd5b840160a08187031215614cf5575f80fd5b9250614d0360208501614cac565b91506040840135614d1381614c4f565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d4257614d42614d1e565b9052565b5f5b83811015614d60578181015183820152602001614d48565b50505f910152565b5f8151808452614d7f816020860160208601614d46565b601f01601f19169290920160200192915050565b60208152614da5602082018351614d32565b5f602083015160e06040840152614dc0610100840182614d68565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614e24575f80fd5b82356001600160401b0380821115614e3a575f80fd5b818501915085601f830112614e4d575f80fd5b813581811115614e5b575f80fd5b866020828501011115614e6c575f80fd5b60209290920196919550909350505050565b600181811c90821680614e9257607f821691505b602082108103614b5f57634e487b7160e01b5f52602260045260245ffd5b602081016110f58284614d32565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ef457614ef4614ebe565b60405290565b604080519081016001600160401b0381118282101715614ef457614ef4614ebe565b604051601f8201601f191681016001600160401b0381118282101715614f4457614f44614ebe565b604052919050565b5f6001600160401b03821115614f6457614f64614ebe565b50601f01601f191660200190565b5f82601f830112614f81575f80fd5b8151614f94614f8f82614f4c565b614f1c565b818152846020838601011115614fa8575f80fd5b612536826020830160208701614d46565b5f60208284031215614fc9575f80fd5b81516001600160401b03811115614fde575f80fd5b61253684828501614f72565b602081525f611b026020830184614d68565b5f6020828403121561500c575f80fd5b5051919050565b5f60208284031215615023575f80fd5b8135611b0281614bd4565b5f808335601e19843603018112615043575f80fd5b8301803591506001600160401b0382111561505c575f80fd5b6020019150600581901b3603821315613804575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261509b575f80fd5b9190910192915050565b5f82601f8301126150b4575f80fd5b81356150c2614f8f82614f4c565b8181528460208386010111156150d6575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615102575f80fd5b61510a614ed2565b82356001600160401b0380821115615120575f80fd5b61512c368387016150a5565b83526020850135915080821115615141575f80fd5b5061514e368286016150a5565b602083015250604083013561516281614c4f565b604082015292915050565b5f825161509b818460208701614d46565b601f82111561073057805f5260205f20601f840160051c810160208510156151a35750805b601f840160051c820191505b81811015611107575f81556001016151af565b81516001600160401b038111156151db576151db614ebe565b6151ef816151e98454614e7e565b8461517e565b602080601f831160018114615222575f841561520b5750858301515b5f19600386901b1c1916600185901b17855561132f565b5f85815260208120601f198616915b8281101561525057888601518255948401946001909101908401615231565b508582101561526d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808201808211156110f5576110f561527d565b5f63ffffffff8083168181036152bc576152bc61527d565b6001019392505050565b80820281158282048414176110f5576110f561527d565b5f808335601e198436030181126152f2575f80fd5b83016020810192503590506001600160401b03811115615310575f80fd5b803603821315613804575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156153fb57848303601f19018952813536889003605e19018112615382575f80fd5b8701606061539082806152dd565b8287526153a0838801828461531e565b925050506153b0868301836152dd565b868303888801526153c283828461531e565b9250505060408083013592506153d783614c4f565b6001600160401b03929092169490910193909352978301979083019060010161535d565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561542c81614bd4565b6001600160a01b031660608381019190915283013536849003601e19018112615453575f80fd5b83016020810190356001600160401b0381111561546e575f80fd5b8060051b360382131561547f575f80fd5b60808085015261399960a085018284615346565b5f826154ad57634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106154c6576154c6614d1e565b91905290565b5f805f606084860312156154de575f80fd5b8351925060208401516154f081614c4f565b6040850151909250614d1381614c4f565b5f8060408385031215615512575f80fd5b825191506020830151614ca181614adc565b5f60208083525f845461553681614e7e565b806020870152604060018084165f81146155575760018114615573576155a0565b60ff19851660408a0152604084151560051b8a010195506155a0565b895f5260205f205f5b858110156155975781548b820186015290830190880161557c565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0381811683821601908082111561264d5761264d61527d565b6001600160401b0382811682821603908082111561264d5761264d61527d565b5f806040838503121561560e575f80fd5b82516001600160401b0380821115615624575f80fd5b9084019060608287031215615637575f80fd5b61563f614ed2565b82518152602083015161565181614bd4565b6020820152604083015182811115615667575f80fd5b61567388828601614f72565b6040830152508094505050506020830151614ca181614adc565b5f806040838503121561569e575f80fd5b825191506020830151614ca181614c4f565b6001600160401b038181168382160280821691908281146156d3576156d361527d565b505092915050565b5f602082840312156156eb575f80fd5b611b0282614cac565b5f60208284031215615704575f80fd5b813560ff81168114611b02575f80fd5b818103818111156110f5576110f561527d565b5f8235603e1983360301811261509b575f80fd5b5f808335601e19843603018112615750575f80fd5b8301803591506001600160401b03821115615769575f80fd5b602001915036819003821315613804575f80fd5b602081525f61253660208301848661531e565b5f604082360312156157a0575f80fd5b6157a8614efa565b6157b183614ae9565b81526020808401356001600160401b03808211156157cd575f80fd5b9085019036601f8301126157df575f80fd5b8135818111156157f1576157f1614ebe565b8060051b9150615802848301614f1c565b818152918301840191848101903684111561581b575f80fd5b938501935b83851015615845578435925061583583614bd4565b8282529385019390850190615820565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158b25784516001600160a01b03168252938301936001929092019190830190615889565b509695505050505050565b60208152815160208201525f602083015160e060408401526158e3610100840182614d68565b90506040840151601f19808584030160608601526159018383614d68565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159318383615857565b925060a08601519150808584030160c08601525061594f8282615857565b91505060c084015161596c60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615985575f80fd5b8251915060208301516001600160401b038111156159a1575f80fd5b6159ad85828601614f72565b9150509250929050565b6001600160401b038311156159ce576159ce614ebe565b6159e2836159dc8354614e7e565b8361517e565b5f601f841160018114615a13575f85156159fc5750838201355b5f19600387901b1c1916600186901b178355611107565b5f83815260208120601f198716915b82811015615a425786850135825560209485019460019092019101615a22565b5086821015615a5e575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b038083168181036152bc576152bc61527d56fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220f60ff755119b5eb67df88cd80a0bc383121eaa82cbbb7c04a05b3eaf757511dc64736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol index 2e478df8f..5f6cdede6 100644 --- a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol @@ -179,6 +179,17 @@ interface IPoSValidatorManager is IValidatorManager { uint32 messageIndex ) external; + /** + * @notice See {IPoSValidatorManager-forceInitializeEndValidation} for details of the first three parameters + * @param recipientAddress Address to receive the rewards. + */ + function forceInitializeEndValidation( + bytes32 validationID, + bool includeUptimeProof, + uint32 messageIndex, + address recipientAddress + ) external; + /** * @notice Completes the delegator registration process by submitting an acknowledgement of the registration of a * validationID from the P-Chain. After this function is called, the validator's weight is updated in the contract state. @@ -212,6 +223,16 @@ interface IPoSValidatorManager is IValidatorManager { bool includeUptimeProof, uint32 messageIndex ) external; + /** + * @notice See {IPoSValidatorManager-initializeEndDelegation} for details of the first three parameters + * @param recipientAddress The address to receive the rewards. + */ + function initializeEndDelegation( + bytes32 delegationID, + bool includeUptimeProof, + uint32 messageIndex, + address recipientAddress + ) external; /** * @notice Begins the process of removing a delegator from a validation period, but does not revert if the delegation is not eligible for rewards. @@ -233,6 +254,17 @@ interface IPoSValidatorManager is IValidatorManager { uint32 messageIndex ) external; + /** + * @notice See {IPoSValidatorManager-forceInitializeEndDelegation} for details of the first three parameters + * @param recipientAddress The address to receive the rewards. + */ + function forceInitializeEndDelegation( + bytes32 delegationID, + bool includeUptimeProof, + uint32 messageIndex, + address recipientAddress + ) external; + /** * @notice Resubmits a delegator registration or delegator end message to be sent to the P-Chain. * Only necessary if the original message can't be delivered due to validator churn. @@ -258,4 +290,8 @@ interface IPoSValidatorManager is IValidatorManager { * @param validationID The ID of the validation period being ended. */ function claimDelegationFees(bytes32 validationID) external; + + function changeValidatorRewardRecipient(bytes32 validationID, address recipient) external; + + function changeDelegatorRewardRecipient(bytes32 delegationID, address recipient) external; } From a57283db62cb9e6857e2c7692344bec0cca487f4 Mon Sep 17 00:00:00 2001 From: Richard Pringle Date: Thu, 21 Nov 2024 11:37:16 -0500 Subject: [PATCH 07/10] Fix Delegation typo --- .../ERC20TokenStakingManager/ERC20TokenStakingManager.go | 2 +- .../NativeTokenStakingManager/NativeTokenStakingManager.go | 2 +- contracts/validator-manager/PoSValidatorManager.sol | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index 0ccb8b670..fd5b7b783 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -104,7 +104,7 @@ type ValidatorRegistrationInput 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\":\"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\":[{\"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\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"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\":\"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\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"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\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"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\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"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\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"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\":\"DelegatorAdded\",\"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\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"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\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndValidation\",\"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\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"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\":\"structPoSValidatorManagerSettings\",\"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\":\"initializeDelegatorRegistration\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndValidation\",\"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\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"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\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"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\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"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: "0x608060405234801561000f575f80fd5b50604051615f0f380380615f0f83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615dc28061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061023f575f3560e01c806380dd672f11610135578063b771b3bc116100b4578063d5f20ff611610079578063d5f20ff614610516578063df93d8de14610536578063e4a63c4014610540578063fb8b11dd14610554578063fd7ac5e714610567575f80fd5b8063b771b3bc146104ae578063ba3a4b97146104d4578063bc5fbfec146104e7578063bee0a03f146104fb578063c974d1b61461050e575f80fd5b80639e1bc4ef116100fa5780639e1bc4ef1461044e5780639e478eea14610461578063a3a65e4814610474578063a9778a7a146102ee578063afb9809614610487575f80fd5b806380dd672f146103fa5780638280a25a1461040d5780638ef34c981461041557806393e24598146104285780639ae064471461043b575f80fd5b8063467ef06f116101c1578063620658561161018657806362065856146103a757806366435abf146103ba578063732214f8146103cd57806376f78621146103d45780637d8d2f77146103e7575f80fd5b8063467ef06f146103305780634bee0040146103435780635dd6a6cb1461036457806360305d621461037757806360ad778414610394575f80fd5b806325e1c7761161020757806325e1c776146102b05780632e2194d8146102c357806335455ded146102ee57806337b9be8f1461030a5780633a1cfff61461031d575f80fd5b80630118acc4146102435780630322ed9814610258578063151d30d11461026b5780631ec447241461028a57806320d91b7a1461029d575b5f80fd5b610256610251366004614d0f565b61057a565b005b610256610266366004614d4a565b61058b565b610273600a81565b60405160ff90911681526020015b60405180910390f35b610256610298366004614d0f565b61081b565b6102566102ab366004614d61565b610827565b6102566102be366004614daf565b610dac565b6102d66102d1366004614d4a565b610e20565b6040516001600160401b039091168152602001610281565b6102f761271081565b60405161ffff9091168152602001610281565b610256610318366004614de4565b610e74565b61025661032b366004614d0f565b610e87565b61025661033e366004614e32565b610e93565b610356610351366004614e70565b610f78565b604051908152602001610281565b610256610372366004614de4565b610fad565b61037f601481565b60405163ffffffff9091168152602001610281565b6102566103a2366004614daf565b610fb9565b6103566103b5366004614ed7565b611286565b6102d66103c8366004614d4a565b6112a6565b6103565f81565b6102566103e2366004614d0f565b6112ba565b6102566103f5366004614de4565b6112c6565b610256610408366004614daf565b6112d2565b610273603081565b610256610423366004614ef2565b61150c565b610256610436366004614d4a565b6115ee565b610256610449366004614de4565b611682565b61035661045c366004614f20565b61168e565b61025661046f366004614f40565b6116ba565b610256610482366004614e32565b611799565b6103567f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104bc6005600160991b0181565b6040516001600160a01b039091168152602001610281565b6102566104e2366004614d4a565b61198e565b6103565f80516020615d2d83398151915281565b610256610509366004614d4a565b611be7565b610273601481565b610529610524366004614d4a565b611d24565b6040516102819190614fe8565b6102d66202a30081565b6103565f80516020615d0d83398151915281565b610256610562366004614ef2565b611e73565b610356610575366004615068565b611f3a565b6105868383835f611f95565b505050565b5f8181525f80516020615d6d8339815191526020526040808220815160e0810190925280545f80516020615d2d83398151915293929190829060ff1660058111156105d8576105d8614f73565b60058111156105e9576105e9614f73565b81526020016001820180546105fd906150d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610629906150d3565b80156106745780601f1061064b57610100808354040283529160200191610674565b820191905f5260205f20905b81548152906001019060200180831161065757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156106df576106df614f73565b1461071b575f8381526007830160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610792573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107b99190810190615214565b6040518263ffffffff1660e01b81526004016107d59190615245565b6020604051808303815f875af11580156107f1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108159190615257565b50505050565b6108158383835f611fc1565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615d2d8339815191529060ff161561087957604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e09190615257565b836020013514610909576040516372b0a7e760e11b815260208401356004820152602401610712565b3061091a606085016040860161526e565b6001600160a01b03161461095d57610938606084016040850161526e565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610712565b5f61096b6060850185615289565b905090505f805b828163ffffffff161015610bd2575f61098e6060880188615289565b8363ffffffff168181106109a4576109a46152ce565b90506020028101906109b691906152e2565b6109bf9061534d565b80516040519192505f9160088801916109d7916153c8565b90815260200160405180910390205414610a0757805160405163a41f772f60e01b81526107129190600401615245565b5f6002885f013584604051602001610a3692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a50916153c8565b602060405180830381855afa158015610a6b573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a8e9190615257565b90508086600801835f0151604051610aa691906153c8565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610ae6908261541d565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610b6590856154ec565b8251604051919550610b76916153c8565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610bcb906154ff565b9050610972565b50600483018190556001830154606490610bf690600160401b900460ff1683615521565b1015610c1857604051635943317f60e01b815260048101829052602401610712565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c3c87612379565b604001516040518263ffffffff1660e01b8152600401610c5c9190615245565b602060405180830381865af4158015610c77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9b9190615257565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610cd59190615663565b5f60405180830381865af4158015610cef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d169190810190615214565b90505f600282604051610d2991906153c8565b602060405180830381855afa158015610d44573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d679190615257565b9050828114610d935760405163baaea89d60e01b81526004810182905260248101849052604401610712565b5050506009909201805460ff1916600117905550505050565b610db58261248f565b610dd5576040516330efa98b60e01b815260048101839052602401610712565b5f610ddf83611d24565b5190506002816005811115610df657610df6614f73565b14610e16578060405163170cc93360e21b8152600401610712919061510b565b61081583836124b8565b5f80610e2a612757565b60030154610e3890846156ee565b9050801580610e4d57506001600160401b0381115b15610e6e5760405163222d164360e21b815260048101849052602401610712565b92915050565b610e8084848484611fc1565b5050505050565b6108158383835f61277b565b610e9b61299d565b5f610ea4612757565b90505f80610eb1846129d4565b91509150610ebe8261248f565b610eca57505050610f5f565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b03918216911680610f01575080610f1f565b5f848152600b86016020526040902080546001600160a01b03191690555b600483516005811115610f3457610f34614f73565b03610f4357610f438185612d87565b610f5982610f548560400151611286565b612db1565b50505050505b610f7560015f80516020615d4d83398151915255565b50565b5f610f8161299d565b610f8d85858585612de7565b9050610fa560015f80516020615d4d83398151915255565b949350505050565b61081584848484612f4c565b5f610fc2612757565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610ffb57610ffb614f73565b600381111561100c5761100c614f73565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61108282611d24565b905060018351600381111561109957611099614f73565b146110ba578251604051633b0d540d60e21b8152610712919060040161570d565b6004815160058111156110cf576110cf614f73565b036110e5576110dd86612f78565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61110a89612379565b604001516040518263ffffffff1660e01b815260040161112a9190615245565b606060405180830381865af4158015611145573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111699190615727565b509150915081841461119657846040015160405163089938b360e11b815260040161071291815260200190565b806001600160401b031683606001516001600160401b031610806111cf5750806001600160401b03168560a001516001600160401b0316115b156111f857604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61128f612757565b60030154610e6e906001600160401b038416615521565b5f6112b082611d24565b6080015192915050565b6105868383835f612f4c565b610e808484848461277b565b6112da61299d565b5f6112e3612757565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561131c5761131c614f73565b600381111561132d5761132d614f73565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113a6576113a6614f73565b146113c7578051604051633b0d540d60e21b8152610712919060040161570d565b60046113d68260400151611d24565b5160058111156113e8576113e8614f73565b146114e7575f6113f784612379565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016114369190615245565b606060405180830381865af4158015611451573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114759190615727565b5091509150818460400151146114a15760405163089938b360e11b815260048101839052602401610712565b806001600160401b03168460c001516001600160401b031611156114e357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5050505b6114f084612f78565b505061150860015f80516020615d4d83398151915255565b5050565b6001600160a01b03811661153e5760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611547612757565b5f8481526006820160205260409020549091506001600160a01b0316331461159057335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610712565b336001600160a01b038316036115bf575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f6115f7612757565b90505f61160383611d24565b519050600481600581111561161a5761161a614f73565b1461163a578060405163170cc93360e21b8152600401610712919061510b565b5f8381526006830160205260409020546001600160a01b0316331461165f573361156b565b5f838152600683016020526040902054610586906001600160a01b031684612d87565b61081584848484611f95565b5f61169761299d565b6116a2833384613185565b9050610e6e60015f80516020615d4d83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611703575080546001600160401b03808416911610155b156117215760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561174c84846133ca565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615d2d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117cc86612379565b604001516040518263ffffffff1660e01b81526004016117ec9190615245565b6040805180830381865af4158015611806573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061182a9190615767565b915091508061185057604051632d07135360e01b81528115156004820152602401610712565b5f8281526006840160205260409020805461186a906150d3565b90505f0361188e5760405163089938b360e11b815260048101839052602401610712565b60015f83815260078501602052604090205460ff1660058111156118b4576118b4614f73565b146118e7575f8281526007840160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b5f82815260068401602052604081206118ff91614c5e565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611997612757565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119d0576119d0614f73565b60038111156119e1576119e1614f73565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a5a57611a5a614f73565b14158015611a7b5750600381516003811115611a7857611a78614f73565b14155b15611a9c578051604051633b0d540d60e21b8152610712919060040161570d565b5f611aaa8260400151611d24565b905080606001516001600160401b03165f03611adc576040516339b894f960e21b815260048101859052602401610712565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b4a93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b64573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b8b9190810190615214565b6040518263ffffffff1660e01b8152600401611ba79190615245565b6020604051808303815f875af1158015611bc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e809190615257565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615d2d8339815191529190611c2e906150d3565b90505f03611c525760405163089938b360e11b815260048101839052602401610712565b60015f83815260078301602052604090205460ff166005811115611c7857611c78614f73565b14611cab575f8281526007820160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611ce4919060040161578a565b6020604051808303815f875af1158015611d00573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105869190615257565b611d2c614c95565b5f8281525f80516020615d6d833981519152602052604090819020815160e0810190925280545f80516020615d2d833981519152929190829060ff166005811115611d7957611d79614f73565b6005811115611d8a57611d8a614f73565b8152602001600182018054611d9e906150d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611dca906150d3565b8015611e155780601f10611dec57610100808354040283529160200191611e15565b820191905f5260205f20905b815481529060010190602001808311611df857829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611ea55760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611eae612757565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611edc573361156b565b336001600160a01b03831603611f0b575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615d2d833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611f7d9086908690615814565b90815260200160405180910390205491505092915050565b611fa184848484611fc1565b61081557604051631036cf9160e11b815260048101859052602401610712565b5f80611fcb612757565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561200457612004614f73565b600381111561201557612015614f73565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61208b82611d24565b90506002835160038111156120a2576120a2614f73565b146120c3578251604051633b0d540d60e21b8152610712919060040161570d565b60208301516001600160a01b0316331461215f575f8281526006850160205260409020546001600160a01b031633146120fc573361156b565b5f82815260068501602052604090205460a082015161212b91600160b01b90046001600160401b031690615823565b6001600160401b031642101561215f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b60028151600581111561217457612174614f73565b036122dc5760028401546080840151612196916001600160401b031690615823565b6001600160401b03164210156121ca5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b87156121dc576121da82886124b8565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516122159184916122109190615843565b6133e4565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155612256846135bb565b5f8b8152600887016020526040902081905590506001600160a01b038716156122a2575f8a8152600986016020526040902080546001600160a01b0319166001600160a01b0389161790555b60405183908b907f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57905f90a315159450610fa59350505050565b6004815160058111156122f1576122f1614f73565b0361235d576122ff836135bb565b5f8a81526008860160205260409020556001600160a01b03861615612347575f898152600985016020526040902080546001600160a01b0319166001600160a01b0388161790555b61235089612f78565b6001945050505050610fa5565b805160405163170cc93360e21b8152610712919060040161510b565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156123dd573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124049190810190615863565b915091508061242657604051636b2f19e960e01b815260040160405180910390fd5b81511561244c578151604051636ba589a560e01b81526004810191909152602401610712565b60208201516001600160a01b031615612488576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5092915050565b5f80612499612757565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612503573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261252a9190810190615863565b915091508061254c57604051636b2f19e960e01b815260040160405180910390fd5b5f612555612757565b6005810154845191925014612583578251604051636ba589a560e01b81526004810191909152602401610712565b60208301516001600160a01b0316156125bf576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b60208301516001600160a01b0316156125fb576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016126389190615245565b6040805180830381865af4158015612652573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267691906158f3565b9150915081881461269d5760405163089938b360e11b815260048101899052602401610712565b5f8881526006840160205260409020600101546001600160401b03908116908216111561272e575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261274c565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f80612785612757565b90505f61279187613752565b905061279c8761248f565b6127ab57600192505050610fa5565b5f8781526006830160205260409020546001600160a01b031633146127d0573361156b565b5f87815260068301602052604090205460a08201516127ff91600160b01b90046001600160401b031690615823565b6001600160401b03168160c001516001600160401b031610156128465760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610712565b5f861561285e5761285788876124b8565b905061287c565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128a190611286565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561290a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061292e9190615257565b90508084600a015f8b81526020019081526020015f205f82825461295291906154ec565b90915550506001600160a01b0386161561298f575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615d4d8339815191528054600119016129ce57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f6129dd614c95565b5f80516020615d2d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612a1088612379565b604001516040518263ffffffff1660e01b8152600401612a309190615245565b6040805180830381865af4158015612a4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a6e9190615767565b915091508015612a9557604051632d07135360e01b81528115156004820152602401610712565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612ac657612ac6614f73565b6005811115612ad757612ad7614f73565b8152602001600182018054612aeb906150d3565b80601f0160208091040260200160405190810160405280929190818152602001828054612b17906150d3565b8015612b625780601f10612b3957610100808354040283529160200191612b62565b820191905f5260205f20905b815481529060010190602001808311612b4557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612bcd57612bcd614f73565b14158015612bee5750600181516005811115612beb57612beb614f73565b14155b15612c0f57805160405163170cc93360e21b8152610712919060040161510b565b600381516005811115612c2457612c24614f73565b03612c325760048152612c37565b600581525b836008018160200151604051612c4d91906153c8565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612c9157612c91614f73565b021790555060208201516001820190612caa908261541d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612d5057612d50614f73565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d90612757565b5f838152600a82016020526040812080549190559091506108158482613a36565b5f80516020615d0d83398151915254611508906001600160a01b03168383613aac565b60015f80516020615d4d83398151915255565b5f80612df1612757565b600281015490915061ffff600160401b90910481169086161080612e1a575061271061ffff8616115b15612e3e57604051635f12e6c360e11b815261ffff86166004820152602401610712565b60028101546001600160401b039081169085161015612e7a576040516202a06d60e11b81526001600160401b0385166004820152602401610712565b8054831080612e8c5750806001015483115b15612ead5760405163222d164360e21b815260048101849052602401610712565b5f612eb784613b0b565b90505f612ec382610e20565b90505f612ed08983613b2e565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b612f588484848461277b565b61081557604051635bff683f60e11b815260048101859052602401610712565b5f612f81612757565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612fba57612fba614f73565b6003811115612fcb57612fcb614f73565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091506130687fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b82608001516130779190615823565b6001600160401b03164210156130ab5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130fb57506020820151613119565b5f858152600985016020526040902080546001600160a01b03191690555b5f80613126838886614053565b9150915061313f8560200151610f548760600151611286565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f8061318f612757565b90505f61319e6102d185613b0b565b90505f6131aa87611d24565b90506131b58761248f565b6131d5576040516330efa98b60e01b815260048101889052602401610712565b6002815160058111156131ea576131ea614f73565b1461320b57805160405163170cc93360e21b8152610712919060040161510b565b5f82826080015161321c9190615823565b905083600201600a9054906101000a90046001600160401b031682604001516132459190615916565b6001600160401b0316816001600160401b0316111561328257604051636d51fe0560e11b81526001600160401b0382166004820152602401610712565b5f8061328e8a846133e4565b915091505f8a836040516020016132bc92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6133d2614100565b6133db8261414b565b611508816141c5565b5f8281525f80516020615d6d833981519152602052604081206002015481905f80516020615d2d83398151915290600160801b90046001600160401b031661342c858261422d565b5f61343687614450565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156134df573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135069190810190615214565b6040518263ffffffff1660e01b81526004016135229190615245565b6020604051808303815f875af115801561353e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135629190615257565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f806135c5612757565b90505f6135d58460400151611d24565b90505f6003825160058111156135ed576135ed614f73565b148061360b575060048251600581111561360957613609614f73565b145b1561361b575060c0810151613658565b60028251600581111561363057613630614f73565b0361363c575042613658565b815160405163170cc93360e21b8152610712919060040161510b565b84608001516001600160401b0316816001600160401b03161161367f57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906136a490611286565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613725573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137499190615257565b95945050505050565b61375a614c95565b5f8281525f80516020615d6d8339815191526020526040808220815160e0810190925280545f80516020615d2d83398151915293929190829060ff1660058111156137a7576137a7614f73565b60058111156137b8576137b8614f73565b81526020016001820180546137cc906150d3565b80601f01602080910402602001604051908101604052809291908181526020018280546137f8906150d3565b80156138435780601f1061381a57610100808354040283529160200191613843565b820191905f5260205f20905b81548152906001019060200180831161382657829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156138b1576138b1614f73565b146138e4575f8481526007830160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561392857613928614f73565b021790555060208201516001820190613941908261541d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139df85826133e4565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b5f5f80516020615d0d83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a91575f80fd5b505af1158015613aa3573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261058691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144c5565b5f610e6e825f80516020615d0d833981519152546001600160a01b031690614526565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613b7257604051637fab81e560e01b815260040160405180910390fd5b5f80516020615d2d83398151915242613b916060860160408701614ed7565b6001600160401b0316111580613bcb5750613baf6202a300426154ec565b613bbf6060860160408701614ed7565b6001600160401b031610155b15613c0557613be06060850160408601614ed7565b604051635879da1360e11b81526001600160401b039091166004820152602401610712565b613c1a613c156060860186615941565b614532565b613c2a613c156080860186615941565b6030613c396020860186615955565b905014613c6b57613c4d6020850185615955565b6040516326475b2f60e11b8152610712925060040190815260200190565b613c758480615955565b90505f03613ca257613c878480615955565b604051633e08a12560e11b8152600401610712929190615997565b5f60088201613cb18680615955565b604051613cbf929190615814565b90815260200160405180910390205414613cf857613cdd8480615955565b60405163a41f772f60e01b8152600401610712929190615997565b613d02835f61422d565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d3f8a80615955565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613d87908b018b615955565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613dd060608b0160408c01614ed7565b6001600160401b03168152602001613deb60608b018b615941565b613df4906159aa565b8152602001613e0660808b018b615941565b613e0f906159aa565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613e3d9190615ad7565b5f60405180830381865af4158015613e57573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e7e9190810190615b8e565b5f82815260068601602052604090209193509150613e9c828261541d565b508160088401613eac8880615955565b604051613eba929190615814565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613ef6908590600401615245565b6020604051808303815f875af1158015613f12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f369190615257565b5f8481526007860160205260409020805460ff191660011790559050613f5c8780615955565b5f858152600787016020526040902060010191613f7a919083615bd1565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613fd98880615955565b604051613fe7929190615814565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b60400160208101906140259190614ed7565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f61405e612757565b5f868152600882016020526040812080549082905591925090819080156140f2575f878152600685016020526040902054612710906140a890600160a01b900461ffff1683615521565b6140b291906156ee565b91508184600a015f8981526020019081526020015f205f8282546140d691906154ec565b909155506140e690508282615c8a565b92506140f28984613a36565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661414957604051631afcd79f60e31b815260040160405180910390fd5b565b614153614100565b61415c8161469b565b6141646146b4565b610f756060820135608083013561418160c0850160a08601614ed7565b61419160e0860160c08701615c9d565b6141a2610100870160e08801615cb6565b6101008701356141ba61014089016101208a0161526e565b8861014001356146c4565b6141cd614100565b5f80516020615d0d8339815191526001600160a01b03821661420d57604051637330680360e01b81526001600160a01b0383166004820152602401610712565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615d2d8339815191525f6001600160401b0380841690851611156142615761425a8385615843565b905061426e565b61426b8484615843565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806142d05750600184015481516142cc916001600160401b0316906154ec565b8210155b156142f6576001600160401b038316606082015281815260408101516020820152614315565b82816060018181516143089190615823565b6001600160401b03169052505b6060810151614325906064615916565b602082015160018601546001600160401b0392909216916143509190600160401b900460ff16615521565b101561438057606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610712565b856001600160401b03168160400181815161439b91906154ec565b9052506040810180516001600160401b03871691906143bb908390615c8a565b905250600184015460408201516064916143e091600160401b90910460ff1690615521565b1015614407578060400151604051635943317f60e01b815260040161071291815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615d6d8339815191526020526040812060020180545f80516020615d2d833981519152919060089061449a90600160401b90046001600160401b0316615cd6565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6144d96001600160a01b038416836148a9565b905080515f141580156144fd5750808060200190518101906144fb9190615cf1565b155b1561058657604051635274afe760e01b81526001600160a01b0384166004820152602401610712565b5f6133c38333846148b6565b61453f6020820182614e32565b63ffffffff1615801561455f575061455a6020820182615289565b151590505b156145a6576145716020820182614e32565b61457e6020830183615289565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610712565b6145b36020820182615289565b90506145c26020830183614e32565b63ffffffff1611156145db576145716020820182614e32565b60015b6145eb6020830183615289565b9050811015611508576146016020830183615289565b61460c600184615c8a565b81811061461b5761461b6152ce565b9050602002016020810190614630919061526e565b6001600160a01b03166146466020840184615289565b83818110614656576146566152ce565b905060200201602081019061466b919061526e565b6001600160a01b0316101561469357604051630dbc8d5f60e31b815260040160405180910390fd5b6001016145de565b6146a3614100565b6146ab614a19565b610f7581614a21565b6146bc614100565b614149614b09565b6146cc614100565b5f6146d5612757565b905061ffff861615806146ed575061271061ffff8716115b1561471157604051635f12e6c360e11b815261ffff87166004820152602401610712565b878911156147355760405163222d164360e21b8152600481018a9052602401610712565b60ff851615806147485750600a60ff8616115b1561476b5760405163170db35960e31b815260ff86166004820152602401610712565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b031610156147d2576040516202a06d60e11b81526001600160401b0388166004820152602401610712565b835f036147f25760405163a733007160e01b815260040160405180910390fd5b8161481357604051632f6bd1db60e01b815260048101839052602401610712565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b60606133c383835f614b11565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149209190615257565b90506149376001600160a01b038616853086614ba0565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa15801561497b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061499f9190615257565b9050818111614a055760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610712565b614a0f8282615c8a565b9695505050505050565b614149614100565b614a29614100565b80355f80516020615d2d8339815191529081556014614a4e6060840160408501615cb6565b60ff161180614a6d5750614a686060830160408401615cb6565b60ff16155b15614aa157614a826060830160408401615cb6565b604051634a59bbff60e11b815260ff9091166004820152602401610712565b614ab16060830160408401615cb6565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614ae26040830160208401614ed7565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dd4614100565b606081471015614b365760405163cd78605960e01b8152306004820152602401610712565b5f80856001600160a01b03168486604051614b5191906153c8565b5f6040518083038185875af1925050503d805f8114614b8b576040519150601f19603f3d011682016040523d82523d5f602084013e614b90565b606091505b5091509150614a0f868383614bd9565b6040516001600160a01b0384811660248301528381166044830152606482018390526108159186918216906323b872dd90608401613ad9565b606082614bee57614be982614c35565b6133c3565b8151158015614c0557506001600160a01b0384163b155b15614c2e57604051639996b31560e01b81526001600160a01b0385166004820152602401610712565b50806133c3565b805115614c455780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c6a906150d3565b5f825580601f10614c79575050565b601f0160209004905f5260205f2090810190610f759190614cd2565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614ce6575f8155600101614cd3565b5090565b8015158114610f75575f80fd5b803563ffffffff81168114614d0a575f80fd5b919050565b5f805f60608486031215614d21575f80fd5b833592506020840135614d3381614cea565b9150614d4160408501614cf7565b90509250925092565b5f60208284031215614d5a575f80fd5b5035919050565b5f8060408385031215614d72575f80fd5b82356001600160401b03811115614d87575f80fd5b830160808186031215614d98575f80fd5b9150614da660208401614cf7565b90509250929050565b5f8060408385031215614dc0575f80fd5b82359150614da660208401614cf7565b6001600160a01b0381168114610f75575f80fd5b5f805f8060808587031215614df7575f80fd5b843593506020850135614e0981614cea565b9250614e1760408601614cf7565b91506060850135614e2781614dd0565b939692955090935050565b5f60208284031215614e42575f80fd5b6133c382614cf7565b803561ffff81168114614d0a575f80fd5b6001600160401b0381168114610f75575f80fd5b5f805f8060808587031215614e83575f80fd5b84356001600160401b03811115614e98575f80fd5b850160a08188031215614ea9575f80fd5b9350614eb760208601614e4b565b92506040850135614ec781614e5c565b9396929550929360600135925050565b5f60208284031215614ee7575f80fd5b81356133c381614e5c565b5f8060408385031215614f03575f80fd5b823591506020830135614f1581614dd0565b809150509250929050565b5f8060408385031215614f31575f80fd5b50508035926020909101359150565b5f80828403610180811215614f53575f80fd5b61016080821215614f62575f80fd5b8493508301359050614f1581614dd0565b634e487b7160e01b5f52602160045260245ffd5b60068110614f9757614f97614f73565b9052565b5f5b83811015614fb5578181015183820152602001614f9d565b50505f910152565b5f8151808452614fd4816020860160208601614f9b565b601f01601f19169290920160200192915050565b60208152614ffa602082018351614f87565b5f602083015160e06040840152615015610100840182614fbd565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215615079575f80fd5b82356001600160401b038082111561508f575f80fd5b818501915085601f8301126150a2575f80fd5b8135818111156150b0575f80fd5b8660208285010111156150c1575f80fd5b60209290920196919550909350505050565b600181811c908216806150e757607f821691505b60208210810361510557634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610e6e8284614f87565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561514f5761514f615119565b60405290565b604080519081016001600160401b038111828210171561514f5761514f615119565b604051601f8201601f191681016001600160401b038111828210171561519f5761519f615119565b604052919050565b5f6001600160401b038211156151bf576151bf615119565b50601f01601f191660200190565b5f82601f8301126151dc575f80fd5b81516151ef6151ea826151a7565b615177565b818152846020838601011115615203575f80fd5b610fa5826020830160208701614f9b565b5f60208284031215615224575f80fd5b81516001600160401b03811115615239575f80fd5b610fa5848285016151cd565b602081525f6133c36020830184614fbd565b5f60208284031215615267575f80fd5b5051919050565b5f6020828403121561527e575f80fd5b81356133c381614dd0565b5f808335601e1984360301811261529e575f80fd5b8301803591506001600160401b038211156152b7575f80fd5b6020019150600581901b36038213156135b4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152f6575f80fd5b9190910192915050565b5f82601f83011261530f575f80fd5b813561531d6151ea826151a7565b818152846020838601011115615331575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6060823603121561535d575f80fd5b61536561512d565b82356001600160401b038082111561537b575f80fd5b61538736838701615300565b8352602085013591508082111561539c575f80fd5b506153a936828601615300565b60208301525060408301356153bd81614e5c565b604082015292915050565b5f82516152f6818460208701614f9b565b601f82111561058657805f5260205f20601f840160051c810160208510156153fe5750805b601f840160051c820191505b81811015610e80575f815560010161540a565b81516001600160401b0381111561543657615436615119565b61544a8161544484546150d3565b846153d9565b602080601f83116001811461547d575f84156154665750858301515b5f19600386901b1c1916600185901b1785556110dd565b5f85815260208120601f198616915b828110156154ab5788860151825594840194600190910190840161548c565b50858210156154c857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610e6e57610e6e6154d8565b5f63ffffffff808316818103615517576155176154d8565b6001019392505050565b8082028115828204841417610e6e57610e6e6154d8565b5f808335601e1984360301811261554d575f80fd5b83016020810192503590506001600160401b0381111561556b575f80fd5b8036038213156135b4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561565657848303601f19018952813536889003605e190181126155dd575f80fd5b870160606155eb8280615538565b8287526155fb8388018284615579565b9250505061560b86830183615538565b8683038888015261561d838284615579565b92505050604080830135925061563283614e5c565b6001600160401b0392909216949091019390935297830197908301906001016155b8565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561568781614dd0565b6001600160a01b031660608381019190915283013536849003601e190181126156ae575f80fd5b83016020810190356001600160401b038111156156c9575f80fd5b8060051b36038213156156da575f80fd5b60808085015261374960a0850182846155a1565b5f8261570857634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061572157615721614f73565b91905290565b5f805f60608486031215615739575f80fd5b83519250602084015161574b81614e5c565b604085015190925061575c81614e5c565b809150509250925092565b5f8060408385031215615778575f80fd5b825191506020830151614f1581614cea565b5f60208083525f845461579c816150d3565b806020870152604060018084165f81146157bd57600181146157d957615806565b60ff19851660408a0152604084151560051b8a01019550615806565b895f5260205f205f5b858110156157fd5781548b82018601529083019088016157e2565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b03818116838216019080821115612488576124886154d8565b6001600160401b03828116828216039080821115612488576124886154d8565b5f8060408385031215615874575f80fd5b82516001600160401b038082111561588a575f80fd5b908401906060828703121561589d575f80fd5b6158a561512d565b8251815260208301516158b781614dd0565b60208201526040830151828111156158cd575f80fd5b6158d9888286016151cd565b6040830152508094505050506020830151614f1581614cea565b5f8060408385031215615904575f80fd5b825191506020830151614f1581614e5c565b6001600160401b03818116838216028082169190828114615939576159396154d8565b505092915050565b5f8235603e198336030181126152f6575f80fd5b5f808335601e1984360301811261596a575f80fd5b8301803591506001600160401b03821115615983575f80fd5b6020019150368190038213156135b4575f80fd5b602081525f610fa5602083018486615579565b5f604082360312156159ba575f80fd5b6159c2615155565b6159cb83614cf7565b81526020808401356001600160401b03808211156159e7575f80fd5b9085019036601f8301126159f9575f80fd5b813581811115615a0b57615a0b615119565b8060051b9150615a1c848301615177565b8181529183018401918481019036841115615a35575f80fd5b938501935b83851015615a5f5784359250615a4f83614dd0565b8282529385019390850190615a3a565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615acc5784516001600160a01b03168252938301936001929092019190830190615aa3565b509695505050505050565b60208152815160208201525f602083015160e06040840152615afd610100840182614fbd565b90506040840151601f1980858403016060860152615b1b8383614fbd565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b4b8383615a71565b925060a08601519150808584030160c086015250615b698282615a71565b91505060c0840151615b8660e08501826001600160401b03169052565b509392505050565b5f8060408385031215615b9f575f80fd5b8251915060208301516001600160401b03811115615bbb575f80fd5b615bc7858286016151cd565b9150509250929050565b6001600160401b03831115615be857615be8615119565b615bfc83615bf683546150d3565b836153d9565b5f601f841160018114615c2d575f8515615c165750838201355b5f19600387901b1c1916600186901b178355610e80565b5f83815260208120601f198716915b82811015615c5c5786850135825560209485019460019092019101615c3c565b5086821015615c78575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610e6e57610e6e6154d8565b5f60208284031215615cad575f80fd5b6133c382614e4b565b5f60208284031215615cc6575f80fd5b813560ff811681146133c3575f80fd5b5f6001600160401b03808316818103615517576155176154d8565b5f60208284031215615d01575f80fd5b81516133c381614cea56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a26469706673582212206cac69af0082ce563641f34c38fe22772649667fc7021c2ea32c70e6a83637ca64736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615f0f380380615f0f83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615dc28061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061023f575f3560e01c806380dd672f11610135578063b771b3bc116100b4578063d5f20ff611610079578063d5f20ff614610516578063df93d8de14610536578063e4a63c4014610540578063fb8b11dd14610554578063fd7ac5e714610567575f80fd5b8063b771b3bc146104ae578063ba3a4b97146104d4578063bc5fbfec146104e7578063bee0a03f146104fb578063c974d1b61461050e575f80fd5b80639e1bc4ef116100fa5780639e1bc4ef1461044e5780639e478eea14610461578063a3a65e4814610474578063a9778a7a146102ee578063afb9809614610487575f80fd5b806380dd672f146103fa5780638280a25a1461040d5780638ef34c981461041557806393e24598146104285780639ae064471461043b575f80fd5b8063467ef06f116101c1578063620658561161018657806362065856146103a757806366435abf146103ba578063732214f8146103cd57806376f78621146103d45780637d8d2f77146103e7575f80fd5b8063467ef06f146103305780634bee0040146103435780635dd6a6cb1461036457806360305d621461037757806360ad778414610394575f80fd5b806325e1c7761161020757806325e1c776146102b05780632e2194d8146102c357806335455ded146102ee57806337b9be8f1461030a5780633a1cfff61461031d575f80fd5b80630118acc4146102435780630322ed9814610258578063151d30d11461026b5780631ec447241461028a57806320d91b7a1461029d575b5f80fd5b610256610251366004614d0f565b61057a565b005b610256610266366004614d4a565b61058b565b610273600a81565b60405160ff90911681526020015b60405180910390f35b610256610298366004614d0f565b61081b565b6102566102ab366004614d61565b610827565b6102566102be366004614daf565b610dac565b6102d66102d1366004614d4a565b610e20565b6040516001600160401b039091168152602001610281565b6102f761271081565b60405161ffff9091168152602001610281565b610256610318366004614de4565b610e74565b61025661032b366004614d0f565b610e87565b61025661033e366004614e32565b610e93565b610356610351366004614e70565b610f78565b604051908152602001610281565b610256610372366004614de4565b610fad565b61037f601481565b60405163ffffffff9091168152602001610281565b6102566103a2366004614daf565b610fb9565b6103566103b5366004614ed7565b611286565b6102d66103c8366004614d4a565b6112a6565b6103565f81565b6102566103e2366004614d0f565b6112ba565b6102566103f5366004614de4565b6112c6565b610256610408366004614daf565b6112d2565b610273603081565b610256610423366004614ef2565b61150c565b610256610436366004614d4a565b6115ee565b610256610449366004614de4565b611682565b61035661045c366004614f20565b61168e565b61025661046f366004614f40565b6116ba565b610256610482366004614e32565b611799565b6103567f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104bc6005600160991b0181565b6040516001600160a01b039091168152602001610281565b6102566104e2366004614d4a565b61198e565b6103565f80516020615d2d83398151915281565b610256610509366004614d4a565b611be7565b610273601481565b610529610524366004614d4a565b611d24565b6040516102819190614fe8565b6102d66202a30081565b6103565f80516020615d0d83398151915281565b610256610562366004614ef2565b611e73565b610356610575366004615068565b611f3a565b6105868383835f611f95565b505050565b5f8181525f80516020615d6d8339815191526020526040808220815160e0810190925280545f80516020615d2d83398151915293929190829060ff1660058111156105d8576105d8614f73565b60058111156105e9576105e9614f73565b81526020016001820180546105fd906150d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610629906150d3565b80156106745780601f1061064b57610100808354040283529160200191610674565b820191905f5260205f20905b81548152906001019060200180831161065757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156106df576106df614f73565b1461071b575f8381526007830160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610792573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107b99190810190615214565b6040518263ffffffff1660e01b81526004016107d59190615245565b6020604051808303815f875af11580156107f1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108159190615257565b50505050565b6108158383835f611fc1565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615d2d8339815191529060ff161561087957604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e09190615257565b836020013514610909576040516372b0a7e760e11b815260208401356004820152602401610712565b3061091a606085016040860161526e565b6001600160a01b03161461095d57610938606084016040850161526e565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610712565b5f61096b6060850185615289565b905090505f805b828163ffffffff161015610bd2575f61098e6060880188615289565b8363ffffffff168181106109a4576109a46152ce565b90506020028101906109b691906152e2565b6109bf9061534d565b80516040519192505f9160088801916109d7916153c8565b90815260200160405180910390205414610a0757805160405163a41f772f60e01b81526107129190600401615245565b5f6002885f013584604051602001610a3692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a50916153c8565b602060405180830381855afa158015610a6b573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a8e9190615257565b90508086600801835f0151604051610aa691906153c8565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610ae6908261541d565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610b6590856154ec565b8251604051919550610b76916153c8565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610bcb906154ff565b9050610972565b50600483018190556001830154606490610bf690600160401b900460ff1683615521565b1015610c1857604051635943317f60e01b815260048101829052602401610712565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c3c87612379565b604001516040518263ffffffff1660e01b8152600401610c5c9190615245565b602060405180830381865af4158015610c77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9b9190615257565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610cd59190615663565b5f60405180830381865af4158015610cef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d169190810190615214565b90505f600282604051610d2991906153c8565b602060405180830381855afa158015610d44573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d679190615257565b9050828114610d935760405163baaea89d60e01b81526004810182905260248101849052604401610712565b5050506009909201805460ff1916600117905550505050565b610db58261248f565b610dd5576040516330efa98b60e01b815260048101839052602401610712565b5f610ddf83611d24565b5190506002816005811115610df657610df6614f73565b14610e16578060405163170cc93360e21b8152600401610712919061510b565b61081583836124b8565b5f80610e2a612757565b60030154610e3890846156ee565b9050801580610e4d57506001600160401b0381115b15610e6e5760405163222d164360e21b815260048101849052602401610712565b92915050565b610e8084848484611fc1565b5050505050565b6108158383835f61277b565b610e9b61299d565b5f610ea4612757565b90505f80610eb1846129d4565b91509150610ebe8261248f565b610eca57505050610f5f565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b03918216911680610f01575080610f1f565b5f848152600b86016020526040902080546001600160a01b03191690555b600483516005811115610f3457610f34614f73565b03610f4357610f438185612d87565b610f5982610f548560400151611286565b612db1565b50505050505b610f7560015f80516020615d4d83398151915255565b50565b5f610f8161299d565b610f8d85858585612de7565b9050610fa560015f80516020615d4d83398151915255565b949350505050565b61081584848484612f4c565b5f610fc2612757565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610ffb57610ffb614f73565b600381111561100c5761100c614f73565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61108282611d24565b905060018351600381111561109957611099614f73565b146110ba578251604051633b0d540d60e21b8152610712919060040161570d565b6004815160058111156110cf576110cf614f73565b036110e5576110dd86612f78565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61110a89612379565b604001516040518263ffffffff1660e01b815260040161112a9190615245565b606060405180830381865af4158015611145573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111699190615727565b509150915081841461119657846040015160405163089938b360e11b815260040161071291815260200190565b806001600160401b031683606001516001600160401b031610806111cf5750806001600160401b03168560a001516001600160401b0316115b156111f857604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61128f612757565b60030154610e6e906001600160401b038416615521565b5f6112b082611d24565b6080015192915050565b6105868383835f612f4c565b610e808484848461277b565b6112da61299d565b5f6112e3612757565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561131c5761131c614f73565b600381111561132d5761132d614f73565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113a6576113a6614f73565b146113c7578051604051633b0d540d60e21b8152610712919060040161570d565b60046113d68260400151611d24565b5160058111156113e8576113e8614f73565b146114e7575f6113f784612379565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016114369190615245565b606060405180830381865af4158015611451573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114759190615727565b5091509150818460400151146114a15760405163089938b360e11b815260048101839052602401610712565b806001600160401b03168460c001516001600160401b031611156114e357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5050505b6114f084612f78565b505061150860015f80516020615d4d83398151915255565b5050565b6001600160a01b03811661153e5760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611547612757565b5f8481526006820160205260409020549091506001600160a01b0316331461159057335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610712565b336001600160a01b038316036115bf575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f6115f7612757565b90505f61160383611d24565b519050600481600581111561161a5761161a614f73565b1461163a578060405163170cc93360e21b8152600401610712919061510b565b5f8381526006830160205260409020546001600160a01b0316331461165f573361156b565b5f838152600683016020526040902054610586906001600160a01b031684612d87565b61081584848484611f95565b5f61169761299d565b6116a2833384613185565b9050610e6e60015f80516020615d4d83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611703575080546001600160401b03808416911610155b156117215760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561174c84846133ca565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615d2d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117cc86612379565b604001516040518263ffffffff1660e01b81526004016117ec9190615245565b6040805180830381865af4158015611806573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061182a9190615767565b915091508061185057604051632d07135360e01b81528115156004820152602401610712565b5f8281526006840160205260409020805461186a906150d3565b90505f0361188e5760405163089938b360e11b815260048101839052602401610712565b60015f83815260078501602052604090205460ff1660058111156118b4576118b4614f73565b146118e7575f8281526007840160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b5f82815260068401602052604081206118ff91614c5e565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611997612757565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119d0576119d0614f73565b60038111156119e1576119e1614f73565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a5a57611a5a614f73565b14158015611a7b5750600381516003811115611a7857611a78614f73565b14155b15611a9c578051604051633b0d540d60e21b8152610712919060040161570d565b5f611aaa8260400151611d24565b905080606001516001600160401b03165f03611adc576040516339b894f960e21b815260048101859052602401610712565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b4a93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b64573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b8b9190810190615214565b6040518263ffffffff1660e01b8152600401611ba79190615245565b6020604051808303815f875af1158015611bc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e809190615257565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615d2d8339815191529190611c2e906150d3565b90505f03611c525760405163089938b360e11b815260048101839052602401610712565b60015f83815260078301602052604090205460ff166005811115611c7857611c78614f73565b14611cab575f8281526007820160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611ce4919060040161578a565b6020604051808303815f875af1158015611d00573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105869190615257565b611d2c614c95565b5f8281525f80516020615d6d833981519152602052604090819020815160e0810190925280545f80516020615d2d833981519152929190829060ff166005811115611d7957611d79614f73565b6005811115611d8a57611d8a614f73565b8152602001600182018054611d9e906150d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611dca906150d3565b8015611e155780601f10611dec57610100808354040283529160200191611e15565b820191905f5260205f20905b815481529060010190602001808311611df857829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611ea55760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611eae612757565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611edc573361156b565b336001600160a01b03831603611f0b575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615d2d833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611f7d9086908690615814565b90815260200160405180910390205491505092915050565b611fa184848484611fc1565b61081557604051631036cf9160e11b815260048101859052602401610712565b5f80611fcb612757565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561200457612004614f73565b600381111561201557612015614f73565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61208b82611d24565b90506002835160038111156120a2576120a2614f73565b146120c3578251604051633b0d540d60e21b8152610712919060040161570d565b60208301516001600160a01b0316331461215f575f8281526006850160205260409020546001600160a01b031633146120fc573361156b565b5f82815260068501602052604090205460a082015161212b91600160b01b90046001600160401b031690615823565b6001600160401b031642101561215f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b60028151600581111561217457612174614f73565b036122dc5760028401546080840151612196916001600160401b031690615823565b6001600160401b03164210156121ca5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b87156121dc576121da82886124b8565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516122159184916122109190615843565b6133e4565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155612256846135bb565b5f8b8152600887016020526040902081905590506001600160a01b038716156122a2575f8a8152600986016020526040902080546001600160a01b0319166001600160a01b0389161790555b60405183908b907f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57905f90a315159450610fa59350505050565b6004815160058111156122f1576122f1614f73565b0361235d576122ff836135bb565b5f8a81526008860160205260409020556001600160a01b03861615612347575f898152600985016020526040902080546001600160a01b0319166001600160a01b0388161790555b61235089612f78565b6001945050505050610fa5565b805160405163170cc93360e21b8152610712919060040161510b565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156123dd573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124049190810190615863565b915091508061242657604051636b2f19e960e01b815260040160405180910390fd5b81511561244c578151604051636ba589a560e01b81526004810191909152602401610712565b60208201516001600160a01b031615612488576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5092915050565b5f80612499612757565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612503573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261252a9190810190615863565b915091508061254c57604051636b2f19e960e01b815260040160405180910390fd5b5f612555612757565b6005810154845191925014612583578251604051636ba589a560e01b81526004810191909152602401610712565b60208301516001600160a01b0316156125bf576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b60208301516001600160a01b0316156125fb576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016126389190615245565b6040805180830381865af4158015612652573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267691906158f3565b9150915081881461269d5760405163089938b360e11b815260048101899052602401610712565b5f8881526006840160205260409020600101546001600160401b03908116908216111561272e575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261274c565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f80612785612757565b90505f61279187613752565b905061279c8761248f565b6127ab57600192505050610fa5565b5f8781526006830160205260409020546001600160a01b031633146127d0573361156b565b5f87815260068301602052604090205460a08201516127ff91600160b01b90046001600160401b031690615823565b6001600160401b03168160c001516001600160401b031610156128465760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610712565b5f861561285e5761285788876124b8565b905061287c565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128a190611286565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561290a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061292e9190615257565b90508084600a015f8b81526020019081526020015f205f82825461295291906154ec565b90915550506001600160a01b0386161561298f575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615d4d8339815191528054600119016129ce57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f6129dd614c95565b5f80516020615d2d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612a1088612379565b604001516040518263ffffffff1660e01b8152600401612a309190615245565b6040805180830381865af4158015612a4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a6e9190615767565b915091508015612a9557604051632d07135360e01b81528115156004820152602401610712565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612ac657612ac6614f73565b6005811115612ad757612ad7614f73565b8152602001600182018054612aeb906150d3565b80601f0160208091040260200160405190810160405280929190818152602001828054612b17906150d3565b8015612b625780601f10612b3957610100808354040283529160200191612b62565b820191905f5260205f20905b815481529060010190602001808311612b4557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612bcd57612bcd614f73565b14158015612bee5750600181516005811115612beb57612beb614f73565b14155b15612c0f57805160405163170cc93360e21b8152610712919060040161510b565b600381516005811115612c2457612c24614f73565b03612c325760048152612c37565b600581525b836008018160200151604051612c4d91906153c8565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612c9157612c91614f73565b021790555060208201516001820190612caa908261541d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612d5057612d50614f73565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d90612757565b5f838152600a82016020526040812080549190559091506108158482613a36565b5f80516020615d0d83398151915254611508906001600160a01b03168383613aac565b60015f80516020615d4d83398151915255565b5f80612df1612757565b600281015490915061ffff600160401b90910481169086161080612e1a575061271061ffff8616115b15612e3e57604051635f12e6c360e11b815261ffff86166004820152602401610712565b60028101546001600160401b039081169085161015612e7a576040516202a06d60e11b81526001600160401b0385166004820152602401610712565b8054831080612e8c5750806001015483115b15612ead5760405163222d164360e21b815260048101849052602401610712565b5f612eb784613b0b565b90505f612ec382610e20565b90505f612ed08983613b2e565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b612f588484848461277b565b61081557604051635bff683f60e11b815260048101859052602401610712565b5f612f81612757565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612fba57612fba614f73565b6003811115612fcb57612fcb614f73565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091506130687fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b82608001516130779190615823565b6001600160401b03164210156130ab5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130fb57506020820151613119565b5f858152600985016020526040902080546001600160a01b03191690555b5f80613126838886614053565b9150915061313f8560200151610f548760600151611286565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f8061318f612757565b90505f61319e6102d185613b0b565b90505f6131aa87611d24565b90506131b58761248f565b6131d5576040516330efa98b60e01b815260048101889052602401610712565b6002815160058111156131ea576131ea614f73565b1461320b57805160405163170cc93360e21b8152610712919060040161510b565b5f82826080015161321c9190615823565b905083600201600a9054906101000a90046001600160401b031682604001516132459190615916565b6001600160401b0316816001600160401b0316111561328257604051636d51fe0560e11b81526001600160401b0382166004820152602401610712565b5f8061328e8a846133e4565b915091505f8a836040516020016132bc92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6133d2614100565b6133db8261414b565b611508816141c5565b5f8281525f80516020615d6d833981519152602052604081206002015481905f80516020615d2d83398151915290600160801b90046001600160401b031661342c858261422d565b5f61343687614450565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156134df573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135069190810190615214565b6040518263ffffffff1660e01b81526004016135229190615245565b6020604051808303815f875af115801561353e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135629190615257565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f806135c5612757565b90505f6135d58460400151611d24565b90505f6003825160058111156135ed576135ed614f73565b148061360b575060048251600581111561360957613609614f73565b145b1561361b575060c0810151613658565b60028251600581111561363057613630614f73565b0361363c575042613658565b815160405163170cc93360e21b8152610712919060040161510b565b84608001516001600160401b0316816001600160401b03161161367f57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906136a490611286565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613725573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137499190615257565b95945050505050565b61375a614c95565b5f8281525f80516020615d6d8339815191526020526040808220815160e0810190925280545f80516020615d2d83398151915293929190829060ff1660058111156137a7576137a7614f73565b60058111156137b8576137b8614f73565b81526020016001820180546137cc906150d3565b80601f01602080910402602001604051908101604052809291908181526020018280546137f8906150d3565b80156138435780601f1061381a57610100808354040283529160200191613843565b820191905f5260205f20905b81548152906001019060200180831161382657829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156138b1576138b1614f73565b146138e4575f8481526007830160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561392857613928614f73565b021790555060208201516001820190613941908261541d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139df85826133e4565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b5f5f80516020615d0d83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a91575f80fd5b505af1158015613aa3573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261058691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144c5565b5f610e6e825f80516020615d0d833981519152546001600160a01b031690614526565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613b7257604051637fab81e560e01b815260040160405180910390fd5b5f80516020615d2d83398151915242613b916060860160408701614ed7565b6001600160401b0316111580613bcb5750613baf6202a300426154ec565b613bbf6060860160408701614ed7565b6001600160401b031610155b15613c0557613be06060850160408601614ed7565b604051635879da1360e11b81526001600160401b039091166004820152602401610712565b613c1a613c156060860186615941565b614532565b613c2a613c156080860186615941565b6030613c396020860186615955565b905014613c6b57613c4d6020850185615955565b6040516326475b2f60e11b8152610712925060040190815260200190565b613c758480615955565b90505f03613ca257613c878480615955565b604051633e08a12560e11b8152600401610712929190615997565b5f60088201613cb18680615955565b604051613cbf929190615814565b90815260200160405180910390205414613cf857613cdd8480615955565b60405163a41f772f60e01b8152600401610712929190615997565b613d02835f61422d565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d3f8a80615955565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613d87908b018b615955565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613dd060608b0160408c01614ed7565b6001600160401b03168152602001613deb60608b018b615941565b613df4906159aa565b8152602001613e0660808b018b615941565b613e0f906159aa565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613e3d9190615ad7565b5f60405180830381865af4158015613e57573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e7e9190810190615b8e565b5f82815260068601602052604090209193509150613e9c828261541d565b508160088401613eac8880615955565b604051613eba929190615814565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613ef6908590600401615245565b6020604051808303815f875af1158015613f12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f369190615257565b5f8481526007860160205260409020805460ff191660011790559050613f5c8780615955565b5f858152600787016020526040902060010191613f7a919083615bd1565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613fd98880615955565b604051613fe7929190615814565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b60400160208101906140259190614ed7565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f61405e612757565b5f868152600882016020526040812080549082905591925090819080156140f2575f878152600685016020526040902054612710906140a890600160a01b900461ffff1683615521565b6140b291906156ee565b91508184600a015f8981526020019081526020015f205f8282546140d691906154ec565b909155506140e690508282615c8a565b92506140f28984613a36565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661414957604051631afcd79f60e31b815260040160405180910390fd5b565b614153614100565b61415c8161469b565b6141646146b4565b610f756060820135608083013561418160c0850160a08601614ed7565b61419160e0860160c08701615c9d565b6141a2610100870160e08801615cb6565b6101008701356141ba61014089016101208a0161526e565b8861014001356146c4565b6141cd614100565b5f80516020615d0d8339815191526001600160a01b03821661420d57604051637330680360e01b81526001600160a01b0383166004820152602401610712565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615d2d8339815191525f6001600160401b0380841690851611156142615761425a8385615843565b905061426e565b61426b8484615843565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806142d05750600184015481516142cc916001600160401b0316906154ec565b8210155b156142f6576001600160401b038316606082015281815260408101516020820152614315565b82816060018181516143089190615823565b6001600160401b03169052505b6060810151614325906064615916565b602082015160018601546001600160401b0392909216916143509190600160401b900460ff16615521565b101561438057606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610712565b856001600160401b03168160400181815161439b91906154ec565b9052506040810180516001600160401b03871691906143bb908390615c8a565b905250600184015460408201516064916143e091600160401b90910460ff1690615521565b1015614407578060400151604051635943317f60e01b815260040161071291815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615d6d8339815191526020526040812060020180545f80516020615d2d833981519152919060089061449a90600160401b90046001600160401b0316615cd6565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6144d96001600160a01b038416836148a9565b905080515f141580156144fd5750808060200190518101906144fb9190615cf1565b155b1561058657604051635274afe760e01b81526001600160a01b0384166004820152602401610712565b5f6133c38333846148b6565b61453f6020820182614e32565b63ffffffff1615801561455f575061455a6020820182615289565b151590505b156145a6576145716020820182614e32565b61457e6020830183615289565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610712565b6145b36020820182615289565b90506145c26020830183614e32565b63ffffffff1611156145db576145716020820182614e32565b60015b6145eb6020830183615289565b9050811015611508576146016020830183615289565b61460c600184615c8a565b81811061461b5761461b6152ce565b9050602002016020810190614630919061526e565b6001600160a01b03166146466020840184615289565b83818110614656576146566152ce565b905060200201602081019061466b919061526e565b6001600160a01b0316101561469357604051630dbc8d5f60e31b815260040160405180910390fd5b6001016145de565b6146a3614100565b6146ab614a19565b610f7581614a21565b6146bc614100565b614149614b09565b6146cc614100565b5f6146d5612757565b905061ffff861615806146ed575061271061ffff8716115b1561471157604051635f12e6c360e11b815261ffff87166004820152602401610712565b878911156147355760405163222d164360e21b8152600481018a9052602401610712565b60ff851615806147485750600a60ff8616115b1561476b5760405163170db35960e31b815260ff86166004820152602401610712565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b031610156147d2576040516202a06d60e11b81526001600160401b0388166004820152602401610712565b835f036147f25760405163a733007160e01b815260040160405180910390fd5b8161481357604051632f6bd1db60e01b815260048101839052602401610712565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b60606133c383835f614b11565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149209190615257565b90506149376001600160a01b038616853086614ba0565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa15801561497b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061499f9190615257565b9050818111614a055760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610712565b614a0f8282615c8a565b9695505050505050565b614149614100565b614a29614100565b80355f80516020615d2d8339815191529081556014614a4e6060840160408501615cb6565b60ff161180614a6d5750614a686060830160408401615cb6565b60ff16155b15614aa157614a826060830160408401615cb6565b604051634a59bbff60e11b815260ff9091166004820152602401610712565b614ab16060830160408401615cb6565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614ae26040830160208401614ed7565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dd4614100565b606081471015614b365760405163cd78605960e01b8152306004820152602401610712565b5f80856001600160a01b03168486604051614b5191906153c8565b5f6040518083038185875af1925050503d805f8114614b8b576040519150601f19603f3d011682016040523d82523d5f602084013e614b90565b606091505b5091509150614a0f868383614bd9565b6040516001600160a01b0384811660248301528381166044830152606482018390526108159186918216906323b872dd90608401613ad9565b606082614bee57614be982614c35565b6133c3565b8151158015614c0557506001600160a01b0384163b155b15614c2e57604051639996b31560e01b81526001600160a01b0385166004820152602401610712565b50806133c3565b805115614c455780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c6a906150d3565b5f825580601f10614c79575050565b601f0160209004905f5260205f2090810190610f759190614cd2565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614ce6575f8155600101614cd3565b5090565b8015158114610f75575f80fd5b803563ffffffff81168114614d0a575f80fd5b919050565b5f805f60608486031215614d21575f80fd5b833592506020840135614d3381614cea565b9150614d4160408501614cf7565b90509250925092565b5f60208284031215614d5a575f80fd5b5035919050565b5f8060408385031215614d72575f80fd5b82356001600160401b03811115614d87575f80fd5b830160808186031215614d98575f80fd5b9150614da660208401614cf7565b90509250929050565b5f8060408385031215614dc0575f80fd5b82359150614da660208401614cf7565b6001600160a01b0381168114610f75575f80fd5b5f805f8060808587031215614df7575f80fd5b843593506020850135614e0981614cea565b9250614e1760408601614cf7565b91506060850135614e2781614dd0565b939692955090935050565b5f60208284031215614e42575f80fd5b6133c382614cf7565b803561ffff81168114614d0a575f80fd5b6001600160401b0381168114610f75575f80fd5b5f805f8060808587031215614e83575f80fd5b84356001600160401b03811115614e98575f80fd5b850160a08188031215614ea9575f80fd5b9350614eb760208601614e4b565b92506040850135614ec781614e5c565b9396929550929360600135925050565b5f60208284031215614ee7575f80fd5b81356133c381614e5c565b5f8060408385031215614f03575f80fd5b823591506020830135614f1581614dd0565b809150509250929050565b5f8060408385031215614f31575f80fd5b50508035926020909101359150565b5f80828403610180811215614f53575f80fd5b61016080821215614f62575f80fd5b8493508301359050614f1581614dd0565b634e487b7160e01b5f52602160045260245ffd5b60068110614f9757614f97614f73565b9052565b5f5b83811015614fb5578181015183820152602001614f9d565b50505f910152565b5f8151808452614fd4816020860160208601614f9b565b601f01601f19169290920160200192915050565b60208152614ffa602082018351614f87565b5f602083015160e06040840152615015610100840182614fbd565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215615079575f80fd5b82356001600160401b038082111561508f575f80fd5b818501915085601f8301126150a2575f80fd5b8135818111156150b0575f80fd5b8660208285010111156150c1575f80fd5b60209290920196919550909350505050565b600181811c908216806150e757607f821691505b60208210810361510557634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610e6e8284614f87565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561514f5761514f615119565b60405290565b604080519081016001600160401b038111828210171561514f5761514f615119565b604051601f8201601f191681016001600160401b038111828210171561519f5761519f615119565b604052919050565b5f6001600160401b038211156151bf576151bf615119565b50601f01601f191660200190565b5f82601f8301126151dc575f80fd5b81516151ef6151ea826151a7565b615177565b818152846020838601011115615203575f80fd5b610fa5826020830160208701614f9b565b5f60208284031215615224575f80fd5b81516001600160401b03811115615239575f80fd5b610fa5848285016151cd565b602081525f6133c36020830184614fbd565b5f60208284031215615267575f80fd5b5051919050565b5f6020828403121561527e575f80fd5b81356133c381614dd0565b5f808335601e1984360301811261529e575f80fd5b8301803591506001600160401b038211156152b7575f80fd5b6020019150600581901b36038213156135b4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152f6575f80fd5b9190910192915050565b5f82601f83011261530f575f80fd5b813561531d6151ea826151a7565b818152846020838601011115615331575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6060823603121561535d575f80fd5b61536561512d565b82356001600160401b038082111561537b575f80fd5b61538736838701615300565b8352602085013591508082111561539c575f80fd5b506153a936828601615300565b60208301525060408301356153bd81614e5c565b604082015292915050565b5f82516152f6818460208701614f9b565b601f82111561058657805f5260205f20601f840160051c810160208510156153fe5750805b601f840160051c820191505b81811015610e80575f815560010161540a565b81516001600160401b0381111561543657615436615119565b61544a8161544484546150d3565b846153d9565b602080601f83116001811461547d575f84156154665750858301515b5f19600386901b1c1916600185901b1785556110dd565b5f85815260208120601f198616915b828110156154ab5788860151825594840194600190910190840161548c565b50858210156154c857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610e6e57610e6e6154d8565b5f63ffffffff808316818103615517576155176154d8565b6001019392505050565b8082028115828204841417610e6e57610e6e6154d8565b5f808335601e1984360301811261554d575f80fd5b83016020810192503590506001600160401b0381111561556b575f80fd5b8036038213156135b4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561565657848303601f19018952813536889003605e190181126155dd575f80fd5b870160606155eb8280615538565b8287526155fb8388018284615579565b9250505061560b86830183615538565b8683038888015261561d838284615579565b92505050604080830135925061563283614e5c565b6001600160401b0392909216949091019390935297830197908301906001016155b8565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561568781614dd0565b6001600160a01b031660608381019190915283013536849003601e190181126156ae575f80fd5b83016020810190356001600160401b038111156156c9575f80fd5b8060051b36038213156156da575f80fd5b60808085015261374960a0850182846155a1565b5f8261570857634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061572157615721614f73565b91905290565b5f805f60608486031215615739575f80fd5b83519250602084015161574b81614e5c565b604085015190925061575c81614e5c565b809150509250925092565b5f8060408385031215615778575f80fd5b825191506020830151614f1581614cea565b5f60208083525f845461579c816150d3565b806020870152604060018084165f81146157bd57600181146157d957615806565b60ff19851660408a0152604084151560051b8a01019550615806565b895f5260205f205f5b858110156157fd5781548b82018601529083019088016157e2565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b03818116838216019080821115612488576124886154d8565b6001600160401b03828116828216039080821115612488576124886154d8565b5f8060408385031215615874575f80fd5b82516001600160401b038082111561588a575f80fd5b908401906060828703121561589d575f80fd5b6158a561512d565b8251815260208301516158b781614dd0565b60208201526040830151828111156158cd575f80fd5b6158d9888286016151cd565b6040830152508094505050506020830151614f1581614cea565b5f8060408385031215615904575f80fd5b825191506020830151614f1581614e5c565b6001600160401b03818116838216028082169190828114615939576159396154d8565b505092915050565b5f8235603e198336030181126152f6575f80fd5b5f808335601e1984360301811261596a575f80fd5b8301803591506001600160401b03821115615983575f80fd5b6020019150368190038213156135b4575f80fd5b602081525f610fa5602083018486615579565b5f604082360312156159ba575f80fd5b6159c2615155565b6159cb83614cf7565b81526020808401356001600160401b03808211156159e7575f80fd5b9085019036601f8301126159f9575f80fd5b813581811115615a0b57615a0b615119565b8060051b9150615a1c848301615177565b8181529183018401918481019036841115615a35575f80fd5b938501935b83851015615a5f5784359250615a4f83614dd0565b8282529385019390850190615a3a565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615acc5784516001600160a01b03168252938301936001929092019190830190615aa3565b509695505050505050565b60208152815160208201525f602083015160e06040840152615afd610100840182614fbd565b90506040840151601f1980858403016060860152615b1b8383614fbd565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b4b8383615a71565b925060a08601519150808584030160c086015250615b698282615a71565b91505060c0840151615b8660e08501826001600160401b03169052565b509392505050565b5f8060408385031215615b9f575f80fd5b8251915060208301516001600160401b03811115615bbb575f80fd5b615bc7858286016151cd565b9150509250929050565b6001600160401b03831115615be857615be8615119565b615bfc83615bf683546150d3565b836153d9565b5f601f841160018114615c2d575f8515615c165750838201355b5f19600387901b1c1916600186901b178355610e80565b5f83815260208120601f198716915b82811015615c5c5786850135825560209485019460019092019101615c3c565b5086821015615c78575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610e6e57610e6e6154d8565b5f60208284031215615cad575f80fd5b6133c382614e4b565b5f60208284031215615cc6575f80fd5b813560ff811681146133c3575f80fd5b5f6001600160401b03808316818103615517576155176154d8565b5f60208284031215615d01575f80fd5b81516133c381614cea56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a264697066735822122046bf6da6733da82f4e6586c7194c2d90125285923c45e6bca3afb9b35075888864736f6c63430008190033", } // 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 133c61850..05f59cb0d 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -104,7 +104,7 @@ type ValidatorRegistrationInput 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\":\"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\":[{\"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\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"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\":\"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\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"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\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"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\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"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\":\"DelegatorAdded\",\"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\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"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\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"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_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndValidation\",\"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\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"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\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndValidation\",\"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\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"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\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"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\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"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: "0x608060405234801561000f575f80fd5b50604051615c6e380380615c6e83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615b218061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614afc565b610724565b005b348015610263575f80fd5b50610256610272366004614b37565b610735565b348015610282575f80fd5b50610256610291366004614b4e565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614afc565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614b65565b610aae565b34801561030a575f80fd5b50610256610319366004614bb3565b611033565b348015610329575f80fd5b5061033d610338366004614b37565b6110a7565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614be8565b6110fb565b3480156103d9575f80fd5b506102566103e8366004614afc565b61110e565b3480156103f8575f80fd5b50610256610407366004614c36565b61111a565b348015610417575f80fd5b50610256610426366004614be8565b6111ff565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614bb3565b61120b565b34801561047e575f80fd5b5061049261048d366004614c63565b6114d8565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614b37565b6114f8565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614afc565b61150c565b3480156104fc575f80fd5b5061025661050b366004614be8565b611518565b34801561051b575f80fd5b5061025661052a366004614bb3565b611524565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614c7e565b61175e565b34801561056d575f80fd5b5061025661057c366004614b37565b611840565b34801561058c575f80fd5b5061025661059b366004614be8565b6118d4565b3480156105ab575f80fd5b506102566105ba366004614c36565b6118e0565b6104926105cd366004614cbd565b611ad5565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614b37565b611b09565b348015610649575f80fd5b506104925f80516020615a8c83398151915281565b348015610669575f80fd5b50610256610678366004614b37565b611d62565b61049261068b366004614b37565b611e9f565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614b37565b611ed0565b6040516102b89190614d93565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614c7e565b61201f565b348015610710575f80fd5b5061049261071f366004614e13565b6120e6565b6107308383835f612141565b505050565b5f8181525f80516020615acc8339815191526020526040808220815160e0810190925280545f80516020615a8c83398151915293929190829060ff16600581111561078257610782614d1e565b600581111561079357610793614d1e565b81526020016001820180546107a790614e7e565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614e7e565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614d1e565b146108c5575f8381526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190614fb9565b6040518263ffffffff1660e01b815260040161097f9190614fea565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf9190614ffc565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a568361216d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f61217e565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615a8c8339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b679190614ffc565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba16060850160408601615013565b6001600160a01b031614610be457610bbf6060840160408501615013565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf2606085018561502e565b905090505f805b828163ffffffff161015610e59575f610c15606088018861502e565b8363ffffffff16818110610c2b57610c2b615073565b9050602002810190610c3d9190615087565b610c46906150f2565b80516040519192505f916008880191610c5e9161516d565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc9190600401614fea565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd79161516d565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d159190614ffc565b90508086600801835f0151604051610d2d919061516d565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610d6d90826151c2565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610dec9085615291565b8251604051919550610dfd9161516d565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610e52906152a4565b9050610bf9565b50600483018190556001830154606490610e7d90600160401b900460ff16836152c6565b1015610e9f57604051635943317f60e01b8152600481018290526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ec38761253e565b604001516040518263ffffffff1660e01b8152600401610ee39190614fea565b602060405180830381865af4158015610efe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f229190614ffc565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f5c9190615408565b5f60405180830381865af4158015610f76573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f9d9190810190614fb9565b90505f600282604051610fb0919061516d565b602060405180830381855afa158015610fcb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610fee9190614ffc565b905082811461101a5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506009909201805460ff1916600117905550505050565b61103c82612654565b61105c576040516330efa98b60e01b8152600481018390526024016108bc565b5f61106683611ed0565b519050600281600581111561107d5761107d614d1e565b1461109d578060405163170cc93360e21b81526004016108bc9190614eb0565b6109bf838361267d565b5f806110b161291c565b600301546110bf9084615493565b90508015806110d457506001600160401b0381115b156110f55760405163222d164360e21b8152600481018490526024016108bc565b92915050565b6111078484848461217e565b5050505050565b6109bf8383835f612940565b611122612b62565b5f61112b61291c565b90505f8061113884612b99565b9150915061114582612654565b611151575050506111e6565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b039182169116806111885750806111a6565b5f848152600b86016020526040902080546001600160a01b03191690555b6004835160058111156111bb576111bb614d1e565b036111ca576111ca8185612f4c565b6111e0826111db85604001516114d8565b612f76565b50505050505b6111fc60015f80516020615aac83398151915255565b50565b6109bf84848484612f9c565b5f61121461291c565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561124d5761124d614d1e565b600381111561125e5761125e614d1e565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112d482611ed0565b90506001835160038111156112eb576112eb614d1e565b1461130c578251604051633b0d540d60e21b81526108bc91906004016154b2565b60048151600581111561132157611321614d1e565b036113375761132f86612fc8565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61135c8961253e565b604001516040518263ffffffff1660e01b815260040161137c9190614fea565b606060405180830381865af4158015611397573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113bb91906154cc565b50915091508184146113e857846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b031610806114215750806001600160401b03168560a001516001600160401b0316115b1561144a57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114e161291c565b600301546110f5906001600160401b0384166152c6565b5f61150282611ed0565b6080015192915050565b6107308383835f612f9c565b61110784848484612940565b61152c612b62565b5f61153561291c565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561156e5761156e614d1e565b600381111561157f5761157f614d1e565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156115f8576115f8614d1e565b14611619578051604051633b0d540d60e21b81526108bc91906004016154b2565b60046116288260400151611ed0565b51600581111561163a5761163a614d1e565b14611739575f6116498461253e565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116889190614fea565b606060405180830381865af41580156116a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c791906154cc565b5091509150818460400151146116f35760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561173557604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61174284612fc8565b505061175a60015f80516020615aac83398151915255565b5050565b6001600160a01b0381166117905760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f61179961291c565b5f8481526006820160205260409020549091506001600160a01b031633146117e257335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b336001600160a01b03831603611811575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f61184961291c565b90505f61185583611ed0565b519050600481600581111561186c5761186c614d1e565b1461188c578060405163170cc93360e21b81526004016108bc9190614eb0565b5f8381526006830160205260409020546001600160a01b031633146118b157336117bd565b5f838152600683016020526040902054610730906001600160a01b031684612f4c565b6109bf84848484612141565b5f80516020615a8c8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6119138661253e565b604001516040518263ffffffff1660e01b81526004016119339190614fea565b6040805180830381865af415801561194d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119719190615501565b915091508061199757604051632d07135360e01b815281151560048201526024016108bc565b5f828152600684016020526040902080546119b190614e7e565b90505f036119d55760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078501602052604090205460ff1660058111156119fb576119fb614d1e565b14611a2e575f8281526007840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b5f8281526006840160205260408120611a4691614a50565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611ade612b62565b611aea848484346131d5565b9050611b0260015f80516020615aac83398151915255565b9392505050565b5f611b1261291c565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b4b57611b4b614d1e565b6003811115611b5c57611b5c614d1e565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611bd557611bd5614d1e565b14158015611bf65750600381516003811115611bf357611bf3614d1e565b14155b15611c17578051604051633b0d540d60e21b81526108bc91906004016154b2565b5f611c258260400151611ed0565b905080606001516001600160401b03165f03611c57576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611cc593906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611cdf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d069190810190614fb9565b6040518263ffffffff1660e01b8152600401611d229190614fea565b6020604051808303815f875af1158015611d3e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111079190614ffc565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615a8c8339815191529190611da990614e7e565b90505f03611dcd5760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078301602052604090205460ff166005811115611df357611df3614d1e565b14611e26575f8281526007820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611e5f9190600401615524565b6020604051808303815f875af1158015611e7b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107309190614ffc565b5f611ea8612b62565b611eb382333461332f565b9050611ecb60015f80516020615aac83398151915255565b919050565b611ed8614a87565b5f8281525f80516020615acc833981519152602052604090819020815160e0810190925280545f80516020615a8c833981519152929190829060ff166005811115611f2557611f25614d1e565b6005811115611f3657611f36614d1e565b8152602001600182018054611f4a90614e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7690614e7e565b8015611fc15780601f10611f9857610100808354040283529160200191611fc1565b820191905f5260205f20905b815481529060010190602001808311611fa457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b0381166120515760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f61205a61291c565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461208857336117bd565b336001600160a01b038316036120b7575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615a8c833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb089061212990869086906155ae565b90815260200160405180910390205491505092915050565b61214d8484848461217e565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b61217561356f565b6111fc816135ba565b5f8061218861291c565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156121c1576121c1614d1e565b60038111156121d2576121d2614d1e565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61224882611ed0565b905060028351600381111561225f5761225f614d1e565b14612280578251604051633b0d540d60e21b81526108bc91906004016154b2565b60208301516001600160a01b0316331461231c575f8281526006850160205260409020546001600160a01b031633146122b957336117bd565b5f82815260068501602052604090205460a08201516122e891600160b01b90046001600160401b0316906155bd565b6001600160401b031642101561231c5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b60028151600581111561233157612331614d1e565b036124995760028401546080840151612353916001600160401b0316906155bd565b6001600160401b03164210156123875760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b871561239957612397828861267d565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516123d29184916123cd91906155dd565b613634565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124138461380b565b5f8b8152600887016020526040902081905590506001600160a01b0387161561245f575f8a8152600986016020526040902080546001600160a01b0319166001600160a01b0389161790555b60405183908b907f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57905f90a3151594506125369350505050565b6004815160058111156124ae576124ae614d1e565b0361251a576124bc8361380b565b5f8a81526008860160205260409020556001600160a01b03861615612504575f898152600985016020526040902080546001600160a01b0319166001600160a01b0388161790555b61250d89612fc8565b6001945050505050612536565b805160405163170cc93360e21b81526108bc9190600401614eb0565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125a2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125c991908101906155fd565b91509150806125eb57604051636b2f19e960e01b815260040160405180910390fd5b815115612611578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b03161561264d576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f8061265e61291c565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126c8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126ef91908101906155fd565b915091508061271157604051636b2f19e960e01b815260040160405180910390fd5b5f61271a61291c565b6005810154845191925014612748578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b031615612784576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b0316156127c0576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016127fd9190614fea565b6040805180830381865af4158015612817573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061283b919061568d565b915091508188146128625760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b0390811690821611156128f3575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612911565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061294a61291c565b90505f612956876139a2565b905061296187612654565b61297057600192505050612536565b5f8781526006830160205260409020546001600160a01b0316331461299557336117bd565b5f87815260068301602052604090205460a08201516129c491600160b01b90046001600160401b0316906155bd565b6001600160401b03168160c001516001600160401b03161015612a0b5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f8615612a2357612a1c888761267d565b9050612a41565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a66906114d8565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612acf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612af39190614ffc565b90508084600a015f8b81526020019081526020015f205f828254612b179190615291565b90915550506001600160a01b03861615612b54575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615aac833981519152805460011901612b9357604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612ba2614a87565b5f80516020615a8c8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612bd58861253e565b604001516040518263ffffffff1660e01b8152600401612bf59190614fea565b6040805180830381865af4158015612c0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c339190615501565b915091508015612c5a57604051632d07135360e01b815281151560048201526024016108bc565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612c8b57612c8b614d1e565b6005811115612c9c57612c9c614d1e565b8152602001600182018054612cb090614e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054612cdc90614e7e565b8015612d275780601f10612cfe57610100808354040283529160200191612d27565b820191905f5260205f20905b815481529060010190602001808311612d0a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612d9257612d92614d1e565b14158015612db35750600181516005811115612db057612db0614d1e565b14155b15612dd457805160405163170cc93360e21b81526108bc9190600401614eb0565b600381516005811115612de957612de9614d1e565b03612df75760048152612dfc565b600581525b836008018160200151604051612e12919061516d565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612e5657612e56614d1e565b021790555060208201516001820190612e6f90826151c2565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612f1557612f15614d1e565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612f5561291c565b5f838152600a82016020526040812080549190559091506109bf8482613c86565b61175a6001600160a01b03831682613ce4565b60015f80516020615aac83398151915255565b612fa884848484612940565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612fd161291c565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561300a5761300a614d1e565b600381111561301b5761301b614d1e565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091506130b87fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b82608001516130c791906155bd565b6001600160401b03164210156130fb5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b03168061314b57506020820151613169565b5f858152600985016020526040902080546001600160a01b03191690555b5f80613176838886613d77565b9150915061318f85602001516111db87606001516114d8565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131df61291c565b600281015490915061ffff600160401b90910481169086161080613208575061271061ffff8616115b1561322c57604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b039081169085161015613268576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b805483108061327a5750806001015483115b1561329b5760405163222d164360e21b8152600481018490526024016108bc565b825f6132a6826110a7565b90505f6132b38983613e24565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f8061333961291c565b90505f613345846110a7565b90505f61335187611ed0565b905061335c87612654565b61337c576040516330efa98b60e01b8152600481018890526024016108bc565b60028151600581111561339157613391614d1e565b146133b257805160405163170cc93360e21b81526108bc9190600401614eb0565b5f8282608001516133c391906155bd565b905083600201600a9054906101000a90046001600160401b031682604001516133ec91906156b0565b6001600160401b0316816001600160401b0316111561342957604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f806134358a84613634565b915091505f8a8360405160200161346392919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166135b857604051631afcd79f60e31b815260040160405180910390fd5b565b6135c261356f565b6135cb81614349565b6135d3614362565b6111fc606082013560808301356135f060c0850160a08601614c63565b61360060e0860160c087016156db565b613611610100870160e088016156f4565b61010087013561362961014089016101208a01615013565b886101400135614372565b5f8281525f80516020615acc833981519152602052604081206002015481905f80516020615a8c83398151915290600160801b90046001600160401b031661367c8582614557565b5f6136868761477a565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561372f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526137569190810190614fb9565b6040518263ffffffff1660e01b81526004016137729190614fea565b6020604051808303815f875af115801561378e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137b29190614ffc565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061381561291c565b90505f6138258460400151611ed0565b90505f60038251600581111561383d5761383d614d1e565b148061385b575060048251600581111561385957613859614d1e565b145b1561386b575060c08101516138a8565b60028251600581111561388057613880614d1e565b0361388c5750426138a8565b815160405163170cc93360e21b81526108bc9190600401614eb0565b84608001516001600160401b0316816001600160401b0316116138cf57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906138f4906114d8565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613975573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139999190614ffc565b95945050505050565b6139aa614a87565b5f8281525f80516020615acc8339815191526020526040808220815160e0810190925280545f80516020615a8c83398151915293929190829060ff1660058111156139f7576139f7614d1e565b6005811115613a0857613a08614d1e565b8152602001600182018054613a1c90614e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054613a4890614e7e565b8015613a935780601f10613a6a57610100808354040283529160200191613a93565b820191905f5260205f20905b815481529060010190602001808311613a7657829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613b0157613b01614d1e565b14613b34575f8481526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613b7857613b78614d1e565b021790555060208201516001820190613b9190826151c2565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613c2f8582613634565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613cd2575f80fd5b505af115801561132f573d5f803e3d5ffd5b80471015613d075760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613d50576040519150601f19603f3d011682016040523d82523d5f602084013e613d55565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d8261291c565b5f86815260088201602052604081208054908290559192509081908015613e16575f87815260068501602052604090205461271090613dcc90600160a01b900461ffff16836152c6565b613dd69190615493565b91508184600a015f8981526020019081526020015f205f828254613dfa9190615291565b90915550613e0a90508282615714565b9250613e168984613c86565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613e6857604051637fab81e560e01b815260040160405180910390fd5b5f80516020615a8c83398151915242613e876060860160408701614c63565b6001600160401b0316111580613ec15750613ea56202a30042615291565b613eb56060860160408701614c63565b6001600160401b031610155b15613efb57613ed66060850160408601614c63565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b613f10613f0b6060860186615727565b6147ef565b613f20613f0b6080860186615727565b6030613f2f602086018661573b565b905014613f6157613f43602085018561573b565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613f6b848061573b565b90505f03613f9857613f7d848061573b565b604051633e08a12560e11b81526004016108bc92919061577d565b5f60088201613fa7868061573b565b604051613fb59291906155ae565b90815260200160405180910390205414613fee57613fd3848061573b565b60405163a41f772f60e01b81526004016108bc92919061577d565b613ff8835f614557565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce5190602081016140358a8061573b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060209081019061407d908b018b61573b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020016140c660608b0160408c01614c63565b6001600160401b031681526020016140e160608b018b615727565b6140ea90615790565b81526020016140fc60808b018b615727565b61410590615790565b8152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161413391906158bd565b5f60405180830381865af415801561414d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141749190810190615974565b5f8281526006860160205260409020919350915061419282826151c2565b5081600884016141a2888061573b565b6040516141b09291906155ae565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141ec908590600401614fea565b6020604051808303815f875af1158015614208573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061422c9190614ffc565b5f8481526007860160205260409020805460ff191660011790559050614252878061573b565b5f8581526007870160205260409020600101916142709190836159b7565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806142cf888061573b565b6040516142dd9291906155ae565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b604001602081019061431b9190614c63565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b61435161356f565b614359614958565b6111fc81614960565b61436a61356f565b6135b8614a48565b61437a61356f565b5f61438361291c565b905061ffff8616158061439b575061271061ffff8716115b156143bf57604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156143e35760405163222d164360e21b8152600481018a90526024016108bc565b60ff851615806143f65750600a60ff8616115b156144195760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614480576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f036144a05760405163a733007160e01b815260040160405180910390fd5b816144c157604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615a8c8339815191525f6001600160401b03808416908516111561458b5761458483856155dd565b9050614598565b61459584846155dd565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806145fa5750600184015481516145f6916001600160401b031690615291565b8210155b15614620576001600160401b03831660608201528181526040810151602082015261463f565b828160600181815161463291906155bd565b6001600160401b03169052505b606081015161464f9060646156b0565b602082015160018601546001600160401b03929092169161467a9190600160401b900460ff166152c6565b10156146aa57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b856001600160401b0316816040018181516146c59190615291565b9052506040810180516001600160401b03871691906146e5908390615714565b9052506001840154604082015160649161470a91600160401b90910460ff16906152c6565b1015614731578060400151604051635943317f60e01b81526004016108bc91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615acc8339815191526020526040812060020180545f80516020615a8c83398151915291906008906147c490600160401b90046001600160401b0316615a70565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6147fc6020820182614c36565b63ffffffff1615801561481c5750614817602082018261502e565b151590505b156148635761482e6020820182614c36565b61483b602083018361502e565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b614870602082018261502e565b905061487f6020830183614c36565b63ffffffff1611156148985761482e6020820182614c36565b60015b6148a8602083018361502e565b905081101561175a576148be602083018361502e565b6148c9600184615714565b8181106148d8576148d8615073565b90506020020160208101906148ed9190615013565b6001600160a01b0316614903602084018461502e565b8381811061491357614913615073565b90506020020160208101906149289190615013565b6001600160a01b0316101561495057604051630dbc8d5f60e31b815260040160405180910390fd5b60010161489b565b6135b861356f565b61496861356f565b80355f80516020615a8c833981519152908155601461498d60608401604085016156f4565b60ff1611806149ac57506149a760608301604084016156f4565b60ff16155b156149e0576149c160608301604084016156f4565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b6149f060608301604084016156f4565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614a216040830160208401614c63565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612f8961356f565b508054614a5c90614e7e565b5f825580601f10614a6b575050565b601f0160209004905f5260205f20908101906111fc9190614ac4565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614ad8575f8155600101614ac5565b5090565b80151581146111fc575f80fd5b803563ffffffff81168114611ecb575f80fd5b5f805f60608486031215614b0e575f80fd5b833592506020840135614b2081614adc565b9150614b2e60408501614ae9565b90509250925092565b5f60208284031215614b47575f80fd5b5035919050565b5f6101608284031215614b5f575f80fd5b50919050565b5f8060408385031215614b76575f80fd5b82356001600160401b03811115614b8b575f80fd5b830160808186031215614b9c575f80fd5b9150614baa60208401614ae9565b90509250929050565b5f8060408385031215614bc4575f80fd5b82359150614baa60208401614ae9565b6001600160a01b03811681146111fc575f80fd5b5f805f8060808587031215614bfb575f80fd5b843593506020850135614c0d81614adc565b9250614c1b60408601614ae9565b91506060850135614c2b81614bd4565b939692955090935050565b5f60208284031215614c46575f80fd5b611b0282614ae9565b6001600160401b03811681146111fc575f80fd5b5f60208284031215614c73575f80fd5b8135611b0281614c4f565b5f8060408385031215614c8f575f80fd5b823591506020830135614ca181614bd4565b809150509250929050565b803561ffff81168114611ecb575f80fd5b5f805f60608486031215614ccf575f80fd5b83356001600160401b03811115614ce4575f80fd5b840160a08187031215614cf5575f80fd5b9250614d0360208501614cac565b91506040840135614d1381614c4f565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d4257614d42614d1e565b9052565b5f5b83811015614d60578181015183820152602001614d48565b50505f910152565b5f8151808452614d7f816020860160208601614d46565b601f01601f19169290920160200192915050565b60208152614da5602082018351614d32565b5f602083015160e06040840152614dc0610100840182614d68565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614e24575f80fd5b82356001600160401b0380821115614e3a575f80fd5b818501915085601f830112614e4d575f80fd5b813581811115614e5b575f80fd5b866020828501011115614e6c575f80fd5b60209290920196919550909350505050565b600181811c90821680614e9257607f821691505b602082108103614b5f57634e487b7160e01b5f52602260045260245ffd5b602081016110f58284614d32565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ef457614ef4614ebe565b60405290565b604080519081016001600160401b0381118282101715614ef457614ef4614ebe565b604051601f8201601f191681016001600160401b0381118282101715614f4457614f44614ebe565b604052919050565b5f6001600160401b03821115614f6457614f64614ebe565b50601f01601f191660200190565b5f82601f830112614f81575f80fd5b8151614f94614f8f82614f4c565b614f1c565b818152846020838601011115614fa8575f80fd5b612536826020830160208701614d46565b5f60208284031215614fc9575f80fd5b81516001600160401b03811115614fde575f80fd5b61253684828501614f72565b602081525f611b026020830184614d68565b5f6020828403121561500c575f80fd5b5051919050565b5f60208284031215615023575f80fd5b8135611b0281614bd4565b5f808335601e19843603018112615043575f80fd5b8301803591506001600160401b0382111561505c575f80fd5b6020019150600581901b3603821315613804575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261509b575f80fd5b9190910192915050565b5f82601f8301126150b4575f80fd5b81356150c2614f8f82614f4c565b8181528460208386010111156150d6575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615102575f80fd5b61510a614ed2565b82356001600160401b0380821115615120575f80fd5b61512c368387016150a5565b83526020850135915080821115615141575f80fd5b5061514e368286016150a5565b602083015250604083013561516281614c4f565b604082015292915050565b5f825161509b818460208701614d46565b601f82111561073057805f5260205f20601f840160051c810160208510156151a35750805b601f840160051c820191505b81811015611107575f81556001016151af565b81516001600160401b038111156151db576151db614ebe565b6151ef816151e98454614e7e565b8461517e565b602080601f831160018114615222575f841561520b5750858301515b5f19600386901b1c1916600185901b17855561132f565b5f85815260208120601f198616915b8281101561525057888601518255948401946001909101908401615231565b508582101561526d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808201808211156110f5576110f561527d565b5f63ffffffff8083168181036152bc576152bc61527d565b6001019392505050565b80820281158282048414176110f5576110f561527d565b5f808335601e198436030181126152f2575f80fd5b83016020810192503590506001600160401b03811115615310575f80fd5b803603821315613804575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156153fb57848303601f19018952813536889003605e19018112615382575f80fd5b8701606061539082806152dd565b8287526153a0838801828461531e565b925050506153b0868301836152dd565b868303888801526153c283828461531e565b9250505060408083013592506153d783614c4f565b6001600160401b03929092169490910193909352978301979083019060010161535d565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561542c81614bd4565b6001600160a01b031660608381019190915283013536849003601e19018112615453575f80fd5b83016020810190356001600160401b0381111561546e575f80fd5b8060051b360382131561547f575f80fd5b60808085015261399960a085018284615346565b5f826154ad57634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106154c6576154c6614d1e565b91905290565b5f805f606084860312156154de575f80fd5b8351925060208401516154f081614c4f565b6040850151909250614d1381614c4f565b5f8060408385031215615512575f80fd5b825191506020830151614ca181614adc565b5f60208083525f845461553681614e7e565b806020870152604060018084165f81146155575760018114615573576155a0565b60ff19851660408a0152604084151560051b8a010195506155a0565b895f5260205f205f5b858110156155975781548b820186015290830190880161557c565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0381811683821601908082111561264d5761264d61527d565b6001600160401b0382811682821603908082111561264d5761264d61527d565b5f806040838503121561560e575f80fd5b82516001600160401b0380821115615624575f80fd5b9084019060608287031215615637575f80fd5b61563f614ed2565b82518152602083015161565181614bd4565b6020820152604083015182811115615667575f80fd5b61567388828601614f72565b6040830152508094505050506020830151614ca181614adc565b5f806040838503121561569e575f80fd5b825191506020830151614ca181614c4f565b6001600160401b038181168382160280821691908281146156d3576156d361527d565b505092915050565b5f602082840312156156eb575f80fd5b611b0282614cac565b5f60208284031215615704575f80fd5b813560ff81168114611b02575f80fd5b818103818111156110f5576110f561527d565b5f8235603e1983360301811261509b575f80fd5b5f808335601e19843603018112615750575f80fd5b8301803591506001600160401b03821115615769575f80fd5b602001915036819003821315613804575f80fd5b602081525f61253660208301848661531e565b5f604082360312156157a0575f80fd5b6157a8614efa565b6157b183614ae9565b81526020808401356001600160401b03808211156157cd575f80fd5b9085019036601f8301126157df575f80fd5b8135818111156157f1576157f1614ebe565b8060051b9150615802848301614f1c565b818152918301840191848101903684111561581b575f80fd5b938501935b83851015615845578435925061583583614bd4565b8282529385019390850190615820565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158b25784516001600160a01b03168252938301936001929092019190830190615889565b509695505050505050565b60208152815160208201525f602083015160e060408401526158e3610100840182614d68565b90506040840151601f19808584030160608601526159018383614d68565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159318383615857565b925060a08601519150808584030160c08601525061594f8282615857565b91505060c084015161596c60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615985575f80fd5b8251915060208301516001600160401b038111156159a1575f80fd5b6159ad85828601614f72565b9150509250929050565b6001600160401b038311156159ce576159ce614ebe565b6159e2836159dc8354614e7e565b8361517e565b5f601f841160018114615a13575f85156159fc5750838201355b5f19600387901b1c1916600186901b178355611107565b5f83815260208120601f198716915b82811015615a425786850135825560209485019460019092019101615a22565b5086821015615a5e575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b038083168181036152bc576152bc61527d56fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220f60ff755119b5eb67df88cd80a0bc383121eaa82cbbb7c04a05b3eaf757511dc64736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615c6e380380615c6e83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615b218061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614afc565b610724565b005b348015610263575f80fd5b50610256610272366004614b37565b610735565b348015610282575f80fd5b50610256610291366004614b4e565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614afc565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614b65565b610aae565b34801561030a575f80fd5b50610256610319366004614bb3565b611033565b348015610329575f80fd5b5061033d610338366004614b37565b6110a7565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614be8565b6110fb565b3480156103d9575f80fd5b506102566103e8366004614afc565b61110e565b3480156103f8575f80fd5b50610256610407366004614c36565b61111a565b348015610417575f80fd5b50610256610426366004614be8565b6111ff565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614bb3565b61120b565b34801561047e575f80fd5b5061049261048d366004614c63565b6114d8565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614b37565b6114f8565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614afc565b61150c565b3480156104fc575f80fd5b5061025661050b366004614be8565b611518565b34801561051b575f80fd5b5061025661052a366004614bb3565b611524565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614c7e565b61175e565b34801561056d575f80fd5b5061025661057c366004614b37565b611840565b34801561058c575f80fd5b5061025661059b366004614be8565b6118d4565b3480156105ab575f80fd5b506102566105ba366004614c36565b6118e0565b6104926105cd366004614cbd565b611ad5565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614b37565b611b09565b348015610649575f80fd5b506104925f80516020615a8c83398151915281565b348015610669575f80fd5b50610256610678366004614b37565b611d62565b61049261068b366004614b37565b611e9f565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614b37565b611ed0565b6040516102b89190614d93565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614c7e565b61201f565b348015610710575f80fd5b5061049261071f366004614e13565b6120e6565b6107308383835f612141565b505050565b5f8181525f80516020615acc8339815191526020526040808220815160e0810190925280545f80516020615a8c83398151915293929190829060ff16600581111561078257610782614d1e565b600581111561079357610793614d1e565b81526020016001820180546107a790614e7e565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614e7e565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614d1e565b146108c5575f8381526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190614fb9565b6040518263ffffffff1660e01b815260040161097f9190614fea565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf9190614ffc565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a568361216d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f61217e565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615a8c8339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b679190614ffc565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba16060850160408601615013565b6001600160a01b031614610be457610bbf6060840160408501615013565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf2606085018561502e565b905090505f805b828163ffffffff161015610e59575f610c15606088018861502e565b8363ffffffff16818110610c2b57610c2b615073565b9050602002810190610c3d9190615087565b610c46906150f2565b80516040519192505f916008880191610c5e9161516d565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc9190600401614fea565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd79161516d565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d159190614ffc565b90508086600801835f0151604051610d2d919061516d565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610d6d90826151c2565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610dec9085615291565b8251604051919550610dfd9161516d565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610e52906152a4565b9050610bf9565b50600483018190556001830154606490610e7d90600160401b900460ff16836152c6565b1015610e9f57604051635943317f60e01b8152600481018290526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ec38761253e565b604001516040518263ffffffff1660e01b8152600401610ee39190614fea565b602060405180830381865af4158015610efe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f229190614ffc565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f5c9190615408565b5f60405180830381865af4158015610f76573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f9d9190810190614fb9565b90505f600282604051610fb0919061516d565b602060405180830381855afa158015610fcb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610fee9190614ffc565b905082811461101a5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506009909201805460ff1916600117905550505050565b61103c82612654565b61105c576040516330efa98b60e01b8152600481018390526024016108bc565b5f61106683611ed0565b519050600281600581111561107d5761107d614d1e565b1461109d578060405163170cc93360e21b81526004016108bc9190614eb0565b6109bf838361267d565b5f806110b161291c565b600301546110bf9084615493565b90508015806110d457506001600160401b0381115b156110f55760405163222d164360e21b8152600481018490526024016108bc565b92915050565b6111078484848461217e565b5050505050565b6109bf8383835f612940565b611122612b62565b5f61112b61291c565b90505f8061113884612b99565b9150915061114582612654565b611151575050506111e6565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b039182169116806111885750806111a6565b5f848152600b86016020526040902080546001600160a01b03191690555b6004835160058111156111bb576111bb614d1e565b036111ca576111ca8185612f4c565b6111e0826111db85604001516114d8565b612f76565b50505050505b6111fc60015f80516020615aac83398151915255565b50565b6109bf84848484612f9c565b5f61121461291c565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561124d5761124d614d1e565b600381111561125e5761125e614d1e565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112d482611ed0565b90506001835160038111156112eb576112eb614d1e565b1461130c578251604051633b0d540d60e21b81526108bc91906004016154b2565b60048151600581111561132157611321614d1e565b036113375761132f86612fc8565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61135c8961253e565b604001516040518263ffffffff1660e01b815260040161137c9190614fea565b606060405180830381865af4158015611397573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113bb91906154cc565b50915091508184146113e857846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b031610806114215750806001600160401b03168560a001516001600160401b0316115b1561144a57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114e161291c565b600301546110f5906001600160401b0384166152c6565b5f61150282611ed0565b6080015192915050565b6107308383835f612f9c565b61110784848484612940565b61152c612b62565b5f61153561291c565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561156e5761156e614d1e565b600381111561157f5761157f614d1e565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156115f8576115f8614d1e565b14611619578051604051633b0d540d60e21b81526108bc91906004016154b2565b60046116288260400151611ed0565b51600581111561163a5761163a614d1e565b14611739575f6116498461253e565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116889190614fea565b606060405180830381865af41580156116a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c791906154cc565b5091509150818460400151146116f35760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561173557604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61174284612fc8565b505061175a60015f80516020615aac83398151915255565b5050565b6001600160a01b0381166117905760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f61179961291c565b5f8481526006820160205260409020549091506001600160a01b031633146117e257335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b336001600160a01b03831603611811575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f61184961291c565b90505f61185583611ed0565b519050600481600581111561186c5761186c614d1e565b1461188c578060405163170cc93360e21b81526004016108bc9190614eb0565b5f8381526006830160205260409020546001600160a01b031633146118b157336117bd565b5f838152600683016020526040902054610730906001600160a01b031684612f4c565b6109bf84848484612141565b5f80516020615a8c8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6119138661253e565b604001516040518263ffffffff1660e01b81526004016119339190614fea565b6040805180830381865af415801561194d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119719190615501565b915091508061199757604051632d07135360e01b815281151560048201526024016108bc565b5f828152600684016020526040902080546119b190614e7e565b90505f036119d55760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078501602052604090205460ff1660058111156119fb576119fb614d1e565b14611a2e575f8281526007840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b5f8281526006840160205260408120611a4691614a50565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611ade612b62565b611aea848484346131d5565b9050611b0260015f80516020615aac83398151915255565b9392505050565b5f611b1261291c565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b4b57611b4b614d1e565b6003811115611b5c57611b5c614d1e565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611bd557611bd5614d1e565b14158015611bf65750600381516003811115611bf357611bf3614d1e565b14155b15611c17578051604051633b0d540d60e21b81526108bc91906004016154b2565b5f611c258260400151611ed0565b905080606001516001600160401b03165f03611c57576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611cc593906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611cdf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d069190810190614fb9565b6040518263ffffffff1660e01b8152600401611d229190614fea565b6020604051808303815f875af1158015611d3e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111079190614ffc565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615a8c8339815191529190611da990614e7e565b90505f03611dcd5760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078301602052604090205460ff166005811115611df357611df3614d1e565b14611e26575f8281526007820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611e5f9190600401615524565b6020604051808303815f875af1158015611e7b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107309190614ffc565b5f611ea8612b62565b611eb382333461332f565b9050611ecb60015f80516020615aac83398151915255565b919050565b611ed8614a87565b5f8281525f80516020615acc833981519152602052604090819020815160e0810190925280545f80516020615a8c833981519152929190829060ff166005811115611f2557611f25614d1e565b6005811115611f3657611f36614d1e565b8152602001600182018054611f4a90614e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7690614e7e565b8015611fc15780601f10611f9857610100808354040283529160200191611fc1565b820191905f5260205f20905b815481529060010190602001808311611fa457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b0381166120515760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f61205a61291c565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461208857336117bd565b336001600160a01b038316036120b7575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615a8c833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb089061212990869086906155ae565b90815260200160405180910390205491505092915050565b61214d8484848461217e565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b61217561356f565b6111fc816135ba565b5f8061218861291c565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156121c1576121c1614d1e565b60038111156121d2576121d2614d1e565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61224882611ed0565b905060028351600381111561225f5761225f614d1e565b14612280578251604051633b0d540d60e21b81526108bc91906004016154b2565b60208301516001600160a01b0316331461231c575f8281526006850160205260409020546001600160a01b031633146122b957336117bd565b5f82815260068501602052604090205460a08201516122e891600160b01b90046001600160401b0316906155bd565b6001600160401b031642101561231c5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b60028151600581111561233157612331614d1e565b036124995760028401546080840151612353916001600160401b0316906155bd565b6001600160401b03164210156123875760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b871561239957612397828861267d565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516123d29184916123cd91906155dd565b613634565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124138461380b565b5f8b8152600887016020526040902081905590506001600160a01b0387161561245f575f8a8152600986016020526040902080546001600160a01b0319166001600160a01b0389161790555b60405183908b907f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57905f90a3151594506125369350505050565b6004815160058111156124ae576124ae614d1e565b0361251a576124bc8361380b565b5f8a81526008860160205260409020556001600160a01b03861615612504575f898152600985016020526040902080546001600160a01b0319166001600160a01b0388161790555b61250d89612fc8565b6001945050505050612536565b805160405163170cc93360e21b81526108bc9190600401614eb0565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125a2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125c991908101906155fd565b91509150806125eb57604051636b2f19e960e01b815260040160405180910390fd5b815115612611578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b03161561264d576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f8061265e61291c565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126c8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126ef91908101906155fd565b915091508061271157604051636b2f19e960e01b815260040160405180910390fd5b5f61271a61291c565b6005810154845191925014612748578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b031615612784576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b0316156127c0576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016127fd9190614fea565b6040805180830381865af4158015612817573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061283b919061568d565b915091508188146128625760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b0390811690821611156128f3575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612911565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061294a61291c565b90505f612956876139a2565b905061296187612654565b61297057600192505050612536565b5f8781526006830160205260409020546001600160a01b0316331461299557336117bd565b5f87815260068301602052604090205460a08201516129c491600160b01b90046001600160401b0316906155bd565b6001600160401b03168160c001516001600160401b03161015612a0b5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f8615612a2357612a1c888761267d565b9050612a41565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a66906114d8565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612acf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612af39190614ffc565b90508084600a015f8b81526020019081526020015f205f828254612b179190615291565b90915550506001600160a01b03861615612b54575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615aac833981519152805460011901612b9357604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612ba2614a87565b5f80516020615a8c8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612bd58861253e565b604001516040518263ffffffff1660e01b8152600401612bf59190614fea565b6040805180830381865af4158015612c0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c339190615501565b915091508015612c5a57604051632d07135360e01b815281151560048201526024016108bc565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612c8b57612c8b614d1e565b6005811115612c9c57612c9c614d1e565b8152602001600182018054612cb090614e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054612cdc90614e7e565b8015612d275780601f10612cfe57610100808354040283529160200191612d27565b820191905f5260205f20905b815481529060010190602001808311612d0a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612d9257612d92614d1e565b14158015612db35750600181516005811115612db057612db0614d1e565b14155b15612dd457805160405163170cc93360e21b81526108bc9190600401614eb0565b600381516005811115612de957612de9614d1e565b03612df75760048152612dfc565b600581525b836008018160200151604051612e12919061516d565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612e5657612e56614d1e565b021790555060208201516001820190612e6f90826151c2565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612f1557612f15614d1e565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612f5561291c565b5f838152600a82016020526040812080549190559091506109bf8482613c86565b61175a6001600160a01b03831682613ce4565b60015f80516020615aac83398151915255565b612fa884848484612940565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612fd161291c565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561300a5761300a614d1e565b600381111561301b5761301b614d1e565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091506130b87fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b82608001516130c791906155bd565b6001600160401b03164210156130fb5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b03168061314b57506020820151613169565b5f858152600985016020526040902080546001600160a01b03191690555b5f80613176838886613d77565b9150915061318f85602001516111db87606001516114d8565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131df61291c565b600281015490915061ffff600160401b90910481169086161080613208575061271061ffff8616115b1561322c57604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b039081169085161015613268576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b805483108061327a5750806001015483115b1561329b5760405163222d164360e21b8152600481018490526024016108bc565b825f6132a6826110a7565b90505f6132b38983613e24565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f8061333961291c565b90505f613345846110a7565b90505f61335187611ed0565b905061335c87612654565b61337c576040516330efa98b60e01b8152600481018890526024016108bc565b60028151600581111561339157613391614d1e565b146133b257805160405163170cc93360e21b81526108bc9190600401614eb0565b5f8282608001516133c391906155bd565b905083600201600a9054906101000a90046001600160401b031682604001516133ec91906156b0565b6001600160401b0316816001600160401b0316111561342957604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f806134358a84613634565b915091505f8a8360405160200161346392919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166135b857604051631afcd79f60e31b815260040160405180910390fd5b565b6135c261356f565b6135cb81614349565b6135d3614362565b6111fc606082013560808301356135f060c0850160a08601614c63565b61360060e0860160c087016156db565b613611610100870160e088016156f4565b61010087013561362961014089016101208a01615013565b886101400135614372565b5f8281525f80516020615acc833981519152602052604081206002015481905f80516020615a8c83398151915290600160801b90046001600160401b031661367c8582614557565b5f6136868761477a565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561372f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526137569190810190614fb9565b6040518263ffffffff1660e01b81526004016137729190614fea565b6020604051808303815f875af115801561378e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137b29190614ffc565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061381561291c565b90505f6138258460400151611ed0565b90505f60038251600581111561383d5761383d614d1e565b148061385b575060048251600581111561385957613859614d1e565b145b1561386b575060c08101516138a8565b60028251600581111561388057613880614d1e565b0361388c5750426138a8565b815160405163170cc93360e21b81526108bc9190600401614eb0565b84608001516001600160401b0316816001600160401b0316116138cf57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906138f4906114d8565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613975573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139999190614ffc565b95945050505050565b6139aa614a87565b5f8281525f80516020615acc8339815191526020526040808220815160e0810190925280545f80516020615a8c83398151915293929190829060ff1660058111156139f7576139f7614d1e565b6005811115613a0857613a08614d1e565b8152602001600182018054613a1c90614e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054613a4890614e7e565b8015613a935780601f10613a6a57610100808354040283529160200191613a93565b820191905f5260205f20905b815481529060010190602001808311613a7657829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613b0157613b01614d1e565b14613b34575f8481526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613b7857613b78614d1e565b021790555060208201516001820190613b9190826151c2565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613c2f8582613634565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613cd2575f80fd5b505af115801561132f573d5f803e3d5ffd5b80471015613d075760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613d50576040519150601f19603f3d011682016040523d82523d5f602084013e613d55565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d8261291c565b5f86815260088201602052604081208054908290559192509081908015613e16575f87815260068501602052604090205461271090613dcc90600160a01b900461ffff16836152c6565b613dd69190615493565b91508184600a015f8981526020019081526020015f205f828254613dfa9190615291565b90915550613e0a90508282615714565b9250613e168984613c86565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613e6857604051637fab81e560e01b815260040160405180910390fd5b5f80516020615a8c83398151915242613e876060860160408701614c63565b6001600160401b0316111580613ec15750613ea56202a30042615291565b613eb56060860160408701614c63565b6001600160401b031610155b15613efb57613ed66060850160408601614c63565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b613f10613f0b6060860186615727565b6147ef565b613f20613f0b6080860186615727565b6030613f2f602086018661573b565b905014613f6157613f43602085018561573b565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613f6b848061573b565b90505f03613f9857613f7d848061573b565b604051633e08a12560e11b81526004016108bc92919061577d565b5f60088201613fa7868061573b565b604051613fb59291906155ae565b90815260200160405180910390205414613fee57613fd3848061573b565b60405163a41f772f60e01b81526004016108bc92919061577d565b613ff8835f614557565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce5190602081016140358a8061573b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060209081019061407d908b018b61573b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020016140c660608b0160408c01614c63565b6001600160401b031681526020016140e160608b018b615727565b6140ea90615790565b81526020016140fc60808b018b615727565b61410590615790565b8152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161413391906158bd565b5f60405180830381865af415801561414d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141749190810190615974565b5f8281526006860160205260409020919350915061419282826151c2565b5081600884016141a2888061573b565b6040516141b09291906155ae565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141ec908590600401614fea565b6020604051808303815f875af1158015614208573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061422c9190614ffc565b5f8481526007860160205260409020805460ff191660011790559050614252878061573b565b5f8581526007870160205260409020600101916142709190836159b7565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806142cf888061573b565b6040516142dd9291906155ae565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b604001602081019061431b9190614c63565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b61435161356f565b614359614958565b6111fc81614960565b61436a61356f565b6135b8614a48565b61437a61356f565b5f61438361291c565b905061ffff8616158061439b575061271061ffff8716115b156143bf57604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156143e35760405163222d164360e21b8152600481018a90526024016108bc565b60ff851615806143f65750600a60ff8616115b156144195760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614480576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f036144a05760405163a733007160e01b815260040160405180910390fd5b816144c157604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615a8c8339815191525f6001600160401b03808416908516111561458b5761458483856155dd565b9050614598565b61459584846155dd565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806145fa5750600184015481516145f6916001600160401b031690615291565b8210155b15614620576001600160401b03831660608201528181526040810151602082015261463f565b828160600181815161463291906155bd565b6001600160401b03169052505b606081015161464f9060646156b0565b602082015160018601546001600160401b03929092169161467a9190600160401b900460ff166152c6565b10156146aa57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b856001600160401b0316816040018181516146c59190615291565b9052506040810180516001600160401b03871691906146e5908390615714565b9052506001840154604082015160649161470a91600160401b90910460ff16906152c6565b1015614731578060400151604051635943317f60e01b81526004016108bc91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615acc8339815191526020526040812060020180545f80516020615a8c83398151915291906008906147c490600160401b90046001600160401b0316615a70565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6147fc6020820182614c36565b63ffffffff1615801561481c5750614817602082018261502e565b151590505b156148635761482e6020820182614c36565b61483b602083018361502e565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b614870602082018261502e565b905061487f6020830183614c36565b63ffffffff1611156148985761482e6020820182614c36565b60015b6148a8602083018361502e565b905081101561175a576148be602083018361502e565b6148c9600184615714565b8181106148d8576148d8615073565b90506020020160208101906148ed9190615013565b6001600160a01b0316614903602084018461502e565b8381811061491357614913615073565b90506020020160208101906149289190615013565b6001600160a01b0316101561495057604051630dbc8d5f60e31b815260040160405180910390fd5b60010161489b565b6135b861356f565b61496861356f565b80355f80516020615a8c833981519152908155601461498d60608401604085016156f4565b60ff1611806149ac57506149a760608301604084016156f4565b60ff16155b156149e0576149c160608301604084016156f4565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b6149f060608301604084016156f4565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614a216040830160208401614c63565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612f8961356f565b508054614a5c90614e7e565b5f825580601f10614a6b575050565b601f0160209004905f5260205f20908101906111fc9190614ac4565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614ad8575f8155600101614ac5565b5090565b80151581146111fc575f80fd5b803563ffffffff81168114611ecb575f80fd5b5f805f60608486031215614b0e575f80fd5b833592506020840135614b2081614adc565b9150614b2e60408501614ae9565b90509250925092565b5f60208284031215614b47575f80fd5b5035919050565b5f6101608284031215614b5f575f80fd5b50919050565b5f8060408385031215614b76575f80fd5b82356001600160401b03811115614b8b575f80fd5b830160808186031215614b9c575f80fd5b9150614baa60208401614ae9565b90509250929050565b5f8060408385031215614bc4575f80fd5b82359150614baa60208401614ae9565b6001600160a01b03811681146111fc575f80fd5b5f805f8060808587031215614bfb575f80fd5b843593506020850135614c0d81614adc565b9250614c1b60408601614ae9565b91506060850135614c2b81614bd4565b939692955090935050565b5f60208284031215614c46575f80fd5b611b0282614ae9565b6001600160401b03811681146111fc575f80fd5b5f60208284031215614c73575f80fd5b8135611b0281614c4f565b5f8060408385031215614c8f575f80fd5b823591506020830135614ca181614bd4565b809150509250929050565b803561ffff81168114611ecb575f80fd5b5f805f60608486031215614ccf575f80fd5b83356001600160401b03811115614ce4575f80fd5b840160a08187031215614cf5575f80fd5b9250614d0360208501614cac565b91506040840135614d1381614c4f565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d4257614d42614d1e565b9052565b5f5b83811015614d60578181015183820152602001614d48565b50505f910152565b5f8151808452614d7f816020860160208601614d46565b601f01601f19169290920160200192915050565b60208152614da5602082018351614d32565b5f602083015160e06040840152614dc0610100840182614d68565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614e24575f80fd5b82356001600160401b0380821115614e3a575f80fd5b818501915085601f830112614e4d575f80fd5b813581811115614e5b575f80fd5b866020828501011115614e6c575f80fd5b60209290920196919550909350505050565b600181811c90821680614e9257607f821691505b602082108103614b5f57634e487b7160e01b5f52602260045260245ffd5b602081016110f58284614d32565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ef457614ef4614ebe565b60405290565b604080519081016001600160401b0381118282101715614ef457614ef4614ebe565b604051601f8201601f191681016001600160401b0381118282101715614f4457614f44614ebe565b604052919050565b5f6001600160401b03821115614f6457614f64614ebe565b50601f01601f191660200190565b5f82601f830112614f81575f80fd5b8151614f94614f8f82614f4c565b614f1c565b818152846020838601011115614fa8575f80fd5b612536826020830160208701614d46565b5f60208284031215614fc9575f80fd5b81516001600160401b03811115614fde575f80fd5b61253684828501614f72565b602081525f611b026020830184614d68565b5f6020828403121561500c575f80fd5b5051919050565b5f60208284031215615023575f80fd5b8135611b0281614bd4565b5f808335601e19843603018112615043575f80fd5b8301803591506001600160401b0382111561505c575f80fd5b6020019150600581901b3603821315613804575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261509b575f80fd5b9190910192915050565b5f82601f8301126150b4575f80fd5b81356150c2614f8f82614f4c565b8181528460208386010111156150d6575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615102575f80fd5b61510a614ed2565b82356001600160401b0380821115615120575f80fd5b61512c368387016150a5565b83526020850135915080821115615141575f80fd5b5061514e368286016150a5565b602083015250604083013561516281614c4f565b604082015292915050565b5f825161509b818460208701614d46565b601f82111561073057805f5260205f20601f840160051c810160208510156151a35750805b601f840160051c820191505b81811015611107575f81556001016151af565b81516001600160401b038111156151db576151db614ebe565b6151ef816151e98454614e7e565b8461517e565b602080601f831160018114615222575f841561520b5750858301515b5f19600386901b1c1916600185901b17855561132f565b5f85815260208120601f198616915b8281101561525057888601518255948401946001909101908401615231565b508582101561526d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808201808211156110f5576110f561527d565b5f63ffffffff8083168181036152bc576152bc61527d565b6001019392505050565b80820281158282048414176110f5576110f561527d565b5f808335601e198436030181126152f2575f80fd5b83016020810192503590506001600160401b03811115615310575f80fd5b803603821315613804575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156153fb57848303601f19018952813536889003605e19018112615382575f80fd5b8701606061539082806152dd565b8287526153a0838801828461531e565b925050506153b0868301836152dd565b868303888801526153c283828461531e565b9250505060408083013592506153d783614c4f565b6001600160401b03929092169490910193909352978301979083019060010161535d565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561542c81614bd4565b6001600160a01b031660608381019190915283013536849003601e19018112615453575f80fd5b83016020810190356001600160401b0381111561546e575f80fd5b8060051b360382131561547f575f80fd5b60808085015261399960a085018284615346565b5f826154ad57634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106154c6576154c6614d1e565b91905290565b5f805f606084860312156154de575f80fd5b8351925060208401516154f081614c4f565b6040850151909250614d1381614c4f565b5f8060408385031215615512575f80fd5b825191506020830151614ca181614adc565b5f60208083525f845461553681614e7e565b806020870152604060018084165f81146155575760018114615573576155a0565b60ff19851660408a0152604084151560051b8a010195506155a0565b895f5260205f205f5b858110156155975781548b820186015290830190880161557c565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0381811683821601908082111561264d5761264d61527d565b6001600160401b0382811682821603908082111561264d5761264d61527d565b5f806040838503121561560e575f80fd5b82516001600160401b0380821115615624575f80fd5b9084019060608287031215615637575f80fd5b61563f614ed2565b82518152602083015161565181614bd4565b6020820152604083015182811115615667575f80fd5b61567388828601614f72565b6040830152508094505050506020830151614ca181614adc565b5f806040838503121561569e575f80fd5b825191506020830151614ca181614c4f565b6001600160401b038181168382160280821691908281146156d3576156d361527d565b505092915050565b5f602082840312156156eb575f80fd5b611b0282614cac565b5f60208284031215615704575f80fd5b813560ff81168114611b02575f80fd5b818103818111156110f5576110f561527d565b5f8235603e1983360301811261509b575f80fd5b5f808335601e19843603018112615750575f80fd5b8301803591506001600160401b03821115615769575f80fd5b602001915036819003821315613804575f80fd5b602081525f61253660208301848661531e565b5f604082360312156157a0575f80fd5b6157a8614efa565b6157b183614ae9565b81526020808401356001600160401b03808211156157cd575f80fd5b9085019036601f8301126157df575f80fd5b8135818111156157f1576157f1614ebe565b8060051b9150615802848301614f1c565b818152918301840191848101903684111561581b575f80fd5b938501935b83851015615845578435925061583583614bd4565b8282529385019390850190615820565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158b25784516001600160a01b03168252938301936001929092019190830190615889565b509695505050505050565b60208152815160208201525f602083015160e060408401526158e3610100840182614d68565b90506040840151601f19808584030160608601526159018383614d68565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159318383615857565b925060a08601519150808584030160c08601525061594f8282615857565b91505060c084015161596c60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615985575f80fd5b8251915060208301516001600160401b038111156159a1575f80fd5b6159ad85828601614f72565b9150509250929050565b6001600160401b038311156159ce576159ce614ebe565b6159e2836159dc8354614e7e565b8361517e565b5f601f841160018114615a13575f85156159fc5750838201355b5f19600387901b1c1916600186901b178355611107565b5f83815260208120601f198716915b82811015615a425786850135825560209485019460019092019101615a22565b5086821015615a5e575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b038083168181036152bc576152bc61527d56fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a26469706673582212200a0df08e1f6df80bf8b34539f8a8bc8bcad8d57344386c0d78bd78c2e37d877d64736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index 4ca08a0c3..d26c9f763 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -628,7 +628,7 @@ abstract contract PoSValidatorManager is bool includeUptimeProof, uint32 messageIndex ) external { - _initializeEndDeleationWithCheck(delegationID, includeUptimeProof, messageIndex, address(0)); + _initializeEndDelegationWithCheck(delegationID, includeUptimeProof, messageIndex, address(0)); } /** @@ -640,12 +640,12 @@ abstract contract PoSValidatorManager is uint32 messageIndex, address rewardRecipient ) external { - _initializeEndDeleationWithCheck( + _initializeEndDelegationWithCheck( delegationID, includeUptimeProof, messageIndex, rewardRecipient ); } - function _initializeEndDeleationWithCheck( + function _initializeEndDelegationWithCheck( bytes32 delegationID, bool includeUptimeProof, uint32 messageIndex, From efca4e7e092b129f6557aec8aef27ffda993c6bd Mon Sep 17 00:00:00 2001 From: Richard Pringle Date: Thu, 21 Nov 2024 12:01:46 -0500 Subject: [PATCH 08/10] Consolidate repeated delegator reward functionality --- .../ERC20TokenStakingManager.go | 2 +- .../NativeTokenStakingManager.go | 2 +- .../validator-manager/PoSValidatorManager.sol | 38 ++++++++++--------- 3 files changed, 23 insertions(+), 19 deletions(-) diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index fd5b7b783..bb000f102 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -104,7 +104,7 @@ type ValidatorRegistrationInput 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\":\"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\":[{\"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\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"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\":\"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\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"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\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"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\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"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\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"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\":\"DelegatorAdded\",\"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\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"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\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndValidation\",\"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\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"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\":\"structPoSValidatorManagerSettings\",\"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\":\"initializeDelegatorRegistration\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndValidation\",\"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\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"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\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"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\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"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: "0x608060405234801561000f575f80fd5b50604051615f0f380380615f0f83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615dc28061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061023f575f3560e01c806380dd672f11610135578063b771b3bc116100b4578063d5f20ff611610079578063d5f20ff614610516578063df93d8de14610536578063e4a63c4014610540578063fb8b11dd14610554578063fd7ac5e714610567575f80fd5b8063b771b3bc146104ae578063ba3a4b97146104d4578063bc5fbfec146104e7578063bee0a03f146104fb578063c974d1b61461050e575f80fd5b80639e1bc4ef116100fa5780639e1bc4ef1461044e5780639e478eea14610461578063a3a65e4814610474578063a9778a7a146102ee578063afb9809614610487575f80fd5b806380dd672f146103fa5780638280a25a1461040d5780638ef34c981461041557806393e24598146104285780639ae064471461043b575f80fd5b8063467ef06f116101c1578063620658561161018657806362065856146103a757806366435abf146103ba578063732214f8146103cd57806376f78621146103d45780637d8d2f77146103e7575f80fd5b8063467ef06f146103305780634bee0040146103435780635dd6a6cb1461036457806360305d621461037757806360ad778414610394575f80fd5b806325e1c7761161020757806325e1c776146102b05780632e2194d8146102c357806335455ded146102ee57806337b9be8f1461030a5780633a1cfff61461031d575f80fd5b80630118acc4146102435780630322ed9814610258578063151d30d11461026b5780631ec447241461028a57806320d91b7a1461029d575b5f80fd5b610256610251366004614d0f565b61057a565b005b610256610266366004614d4a565b61058b565b610273600a81565b60405160ff90911681526020015b60405180910390f35b610256610298366004614d0f565b61081b565b6102566102ab366004614d61565b610827565b6102566102be366004614daf565b610dac565b6102d66102d1366004614d4a565b610e20565b6040516001600160401b039091168152602001610281565b6102f761271081565b60405161ffff9091168152602001610281565b610256610318366004614de4565b610e74565b61025661032b366004614d0f565b610e87565b61025661033e366004614e32565b610e93565b610356610351366004614e70565b610f78565b604051908152602001610281565b610256610372366004614de4565b610fad565b61037f601481565b60405163ffffffff9091168152602001610281565b6102566103a2366004614daf565b610fb9565b6103566103b5366004614ed7565b611286565b6102d66103c8366004614d4a565b6112a6565b6103565f81565b6102566103e2366004614d0f565b6112ba565b6102566103f5366004614de4565b6112c6565b610256610408366004614daf565b6112d2565b610273603081565b610256610423366004614ef2565b61150c565b610256610436366004614d4a565b6115ee565b610256610449366004614de4565b611682565b61035661045c366004614f20565b61168e565b61025661046f366004614f40565b6116ba565b610256610482366004614e32565b611799565b6103567f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104bc6005600160991b0181565b6040516001600160a01b039091168152602001610281565b6102566104e2366004614d4a565b61198e565b6103565f80516020615d2d83398151915281565b610256610509366004614d4a565b611be7565b610273601481565b610529610524366004614d4a565b611d24565b6040516102819190614fe8565b6102d66202a30081565b6103565f80516020615d0d83398151915281565b610256610562366004614ef2565b611e73565b610356610575366004615068565b611f3a565b6105868383835f611f95565b505050565b5f8181525f80516020615d6d8339815191526020526040808220815160e0810190925280545f80516020615d2d83398151915293929190829060ff1660058111156105d8576105d8614f73565b60058111156105e9576105e9614f73565b81526020016001820180546105fd906150d3565b80601f0160208091040260200160405190810160405280929190818152602001828054610629906150d3565b80156106745780601f1061064b57610100808354040283529160200191610674565b820191905f5260205f20905b81548152906001019060200180831161065757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156106df576106df614f73565b1461071b575f8381526007830160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610792573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107b99190810190615214565b6040518263ffffffff1660e01b81526004016107d59190615245565b6020604051808303815f875af11580156107f1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108159190615257565b50505050565b6108158383835f611fc1565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615d2d8339815191529060ff161561087957604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e09190615257565b836020013514610909576040516372b0a7e760e11b815260208401356004820152602401610712565b3061091a606085016040860161526e565b6001600160a01b03161461095d57610938606084016040850161526e565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610712565b5f61096b6060850185615289565b905090505f805b828163ffffffff161015610bd2575f61098e6060880188615289565b8363ffffffff168181106109a4576109a46152ce565b90506020028101906109b691906152e2565b6109bf9061534d565b80516040519192505f9160088801916109d7916153c8565b90815260200160405180910390205414610a0757805160405163a41f772f60e01b81526107129190600401615245565b5f6002885f013584604051602001610a3692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a50916153c8565b602060405180830381855afa158015610a6b573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a8e9190615257565b90508086600801835f0151604051610aa691906153c8565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610ae6908261541d565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610b6590856154ec565b8251604051919550610b76916153c8565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610bcb906154ff565b9050610972565b50600483018190556001830154606490610bf690600160401b900460ff1683615521565b1015610c1857604051635943317f60e01b815260048101829052602401610712565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c3c87612379565b604001516040518263ffffffff1660e01b8152600401610c5c9190615245565b602060405180830381865af4158015610c77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9b9190615257565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610cd59190615663565b5f60405180830381865af4158015610cef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d169190810190615214565b90505f600282604051610d2991906153c8565b602060405180830381855afa158015610d44573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d679190615257565b9050828114610d935760405163baaea89d60e01b81526004810182905260248101849052604401610712565b5050506009909201805460ff1916600117905550505050565b610db58261248f565b610dd5576040516330efa98b60e01b815260048101839052602401610712565b5f610ddf83611d24565b5190506002816005811115610df657610df6614f73565b14610e16578060405163170cc93360e21b8152600401610712919061510b565b61081583836124b8565b5f80610e2a612757565b60030154610e3890846156ee565b9050801580610e4d57506001600160401b0381115b15610e6e5760405163222d164360e21b815260048101849052602401610712565b92915050565b610e8084848484611fc1565b5050505050565b6108158383835f61277b565b610e9b61299d565b5f610ea4612757565b90505f80610eb1846129d4565b91509150610ebe8261248f565b610eca57505050610f5f565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b03918216911680610f01575080610f1f565b5f848152600b86016020526040902080546001600160a01b03191690555b600483516005811115610f3457610f34614f73565b03610f4357610f438185612d87565b610f5982610f548560400151611286565b612db1565b50505050505b610f7560015f80516020615d4d83398151915255565b50565b5f610f8161299d565b610f8d85858585612de7565b9050610fa560015f80516020615d4d83398151915255565b949350505050565b61081584848484612f4c565b5f610fc2612757565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610ffb57610ffb614f73565b600381111561100c5761100c614f73565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61108282611d24565b905060018351600381111561109957611099614f73565b146110ba578251604051633b0d540d60e21b8152610712919060040161570d565b6004815160058111156110cf576110cf614f73565b036110e5576110dd86612f78565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61110a89612379565b604001516040518263ffffffff1660e01b815260040161112a9190615245565b606060405180830381865af4158015611145573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111699190615727565b509150915081841461119657846040015160405163089938b360e11b815260040161071291815260200190565b806001600160401b031683606001516001600160401b031610806111cf5750806001600160401b03168560a001516001600160401b0316115b156111f857604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61128f612757565b60030154610e6e906001600160401b038416615521565b5f6112b082611d24565b6080015192915050565b6105868383835f612f4c565b610e808484848461277b565b6112da61299d565b5f6112e3612757565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561131c5761131c614f73565b600381111561132d5761132d614f73565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113a6576113a6614f73565b146113c7578051604051633b0d540d60e21b8152610712919060040161570d565b60046113d68260400151611d24565b5160058111156113e8576113e8614f73565b146114e7575f6113f784612379565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016114369190615245565b606060405180830381865af4158015611451573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114759190615727565b5091509150818460400151146114a15760405163089938b360e11b815260048101839052602401610712565b806001600160401b03168460c001516001600160401b031611156114e357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5050505b6114f084612f78565b505061150860015f80516020615d4d83398151915255565b5050565b6001600160a01b03811661153e5760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611547612757565b5f8481526006820160205260409020549091506001600160a01b0316331461159057335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610712565b336001600160a01b038316036115bf575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f6115f7612757565b90505f61160383611d24565b519050600481600581111561161a5761161a614f73565b1461163a578060405163170cc93360e21b8152600401610712919061510b565b5f8381526006830160205260409020546001600160a01b0316331461165f573361156b565b5f838152600683016020526040902054610586906001600160a01b031684612d87565b61081584848484611f95565b5f61169761299d565b6116a2833384613185565b9050610e6e60015f80516020615d4d83398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611703575080546001600160401b03808416911610155b156117215760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561174c84846133ca565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615d2d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117cc86612379565b604001516040518263ffffffff1660e01b81526004016117ec9190615245565b6040805180830381865af4158015611806573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061182a9190615767565b915091508061185057604051632d07135360e01b81528115156004820152602401610712565b5f8281526006840160205260409020805461186a906150d3565b90505f0361188e5760405163089938b360e11b815260048101839052602401610712565b60015f83815260078501602052604090205460ff1660058111156118b4576118b4614f73565b146118e7575f8281526007840160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b5f82815260068401602052604081206118ff91614c5e565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611997612757565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119d0576119d0614f73565b60038111156119e1576119e1614f73565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a5a57611a5a614f73565b14158015611a7b5750600381516003811115611a7857611a78614f73565b14155b15611a9c578051604051633b0d540d60e21b8152610712919060040161570d565b5f611aaa8260400151611d24565b905080606001516001600160401b03165f03611adc576040516339b894f960e21b815260048101859052602401610712565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b4a93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b64573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b8b9190810190615214565b6040518263ffffffff1660e01b8152600401611ba79190615245565b6020604051808303815f875af1158015611bc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e809190615257565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615d2d8339815191529190611c2e906150d3565b90505f03611c525760405163089938b360e11b815260048101839052602401610712565b60015f83815260078301602052604090205460ff166005811115611c7857611c78614f73565b14611cab575f8281526007820160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611ce4919060040161578a565b6020604051808303815f875af1158015611d00573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105869190615257565b611d2c614c95565b5f8281525f80516020615d6d833981519152602052604090819020815160e0810190925280545f80516020615d2d833981519152929190829060ff166005811115611d7957611d79614f73565b6005811115611d8a57611d8a614f73565b8152602001600182018054611d9e906150d3565b80601f0160208091040260200160405190810160405280929190818152602001828054611dca906150d3565b8015611e155780601f10611dec57610100808354040283529160200191611e15565b820191905f5260205f20905b815481529060010190602001808311611df857829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611ea55760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611eae612757565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611edc573361156b565b336001600160a01b03831603611f0b575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615d2d833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611f7d9086908690615814565b90815260200160405180910390205491505092915050565b611fa184848484611fc1565b61081557604051631036cf9160e11b815260048101859052602401610712565b5f80611fcb612757565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561200457612004614f73565b600381111561201557612015614f73565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61208b82611d24565b90506002835160038111156120a2576120a2614f73565b146120c3578251604051633b0d540d60e21b8152610712919060040161570d565b60208301516001600160a01b0316331461215f575f8281526006850160205260409020546001600160a01b031633146120fc573361156b565b5f82815260068501602052604090205460a082015161212b91600160b01b90046001600160401b031690615823565b6001600160401b031642101561215f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b60028151600581111561217457612174614f73565b036122dc5760028401546080840151612196916001600160401b031690615823565b6001600160401b03164210156121ca5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b87156121dc576121da82886124b8565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516122159184916122109190615843565b6133e4565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155612256846135bb565b5f8b8152600887016020526040902081905590506001600160a01b038716156122a2575f8a8152600986016020526040902080546001600160a01b0319166001600160a01b0389161790555b60405183908b907f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57905f90a315159450610fa59350505050565b6004815160058111156122f1576122f1614f73565b0361235d576122ff836135bb565b5f8a81526008860160205260409020556001600160a01b03861615612347575f898152600985016020526040902080546001600160a01b0319166001600160a01b0388161790555b61235089612f78565b6001945050505050610fa5565b805160405163170cc93360e21b8152610712919060040161510b565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156123dd573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124049190810190615863565b915091508061242657604051636b2f19e960e01b815260040160405180910390fd5b81511561244c578151604051636ba589a560e01b81526004810191909152602401610712565b60208201516001600160a01b031615612488576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5092915050565b5f80612499612757565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612503573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261252a9190810190615863565b915091508061254c57604051636b2f19e960e01b815260040160405180910390fd5b5f612555612757565b6005810154845191925014612583578251604051636ba589a560e01b81526004810191909152602401610712565b60208301516001600160a01b0316156125bf576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b60208301516001600160a01b0316156125fb576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016126389190615245565b6040805180830381865af4158015612652573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267691906158f3565b9150915081881461269d5760405163089938b360e11b815260048101899052602401610712565b5f8881526006840160205260409020600101546001600160401b03908116908216111561272e575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261274c565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f80612785612757565b90505f61279187613752565b905061279c8761248f565b6127ab57600192505050610fa5565b5f8781526006830160205260409020546001600160a01b031633146127d0573361156b565b5f87815260068301602052604090205460a08201516127ff91600160b01b90046001600160401b031690615823565b6001600160401b03168160c001516001600160401b031610156128465760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610712565b5f861561285e5761285788876124b8565b905061287c565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906128a190611286565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561290a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061292e9190615257565b90508084600a015f8b81526020019081526020015f205f82825461295291906154ec565b90915550506001600160a01b0386161561298f575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615d4d8339815191528054600119016129ce57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f6129dd614c95565b5f80516020615d2d8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612a1088612379565b604001516040518263ffffffff1660e01b8152600401612a309190615245565b6040805180830381865af4158015612a4a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a6e9190615767565b915091508015612a9557604051632d07135360e01b81528115156004820152602401610712565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612ac657612ac6614f73565b6005811115612ad757612ad7614f73565b8152602001600182018054612aeb906150d3565b80601f0160208091040260200160405190810160405280929190818152602001828054612b17906150d3565b8015612b625780601f10612b3957610100808354040283529160200191612b62565b820191905f5260205f20905b815481529060010190602001808311612b4557829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612bcd57612bcd614f73565b14158015612bee5750600181516005811115612beb57612beb614f73565b14155b15612c0f57805160405163170cc93360e21b8152610712919060040161510b565b600381516005811115612c2457612c24614f73565b03612c325760048152612c37565b600581525b836008018160200151604051612c4d91906153c8565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612c9157612c91614f73565b021790555060208201516001820190612caa908261541d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612d5057612d50614f73565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d90612757565b5f838152600a82016020526040812080549190559091506108158482613a36565b5f80516020615d0d83398151915254611508906001600160a01b03168383613aac565b60015f80516020615d4d83398151915255565b5f80612df1612757565b600281015490915061ffff600160401b90910481169086161080612e1a575061271061ffff8616115b15612e3e57604051635f12e6c360e11b815261ffff86166004820152602401610712565b60028101546001600160401b039081169085161015612e7a576040516202a06d60e11b81526001600160401b0385166004820152602401610712565b8054831080612e8c5750806001015483115b15612ead5760405163222d164360e21b815260048101849052602401610712565b5f612eb784613b0b565b90505f612ec382610e20565b90505f612ed08983613b2e565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b612f588484848461277b565b61081557604051635bff683f60e11b815260048101859052602401610712565b5f612f81612757565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612fba57612fba614f73565b6003811115612fcb57612fcb614f73565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091506130687fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b82608001516130779190615823565b6001600160401b03164210156130ab5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130fb57506020820151613119565b5f858152600985016020526040902080546001600160a01b03191690555b5f80613126838886614053565b9150915061313f8560200151610f548760600151611286565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f8061318f612757565b90505f61319e6102d185613b0b565b90505f6131aa87611d24565b90506131b58761248f565b6131d5576040516330efa98b60e01b815260048101889052602401610712565b6002815160058111156131ea576131ea614f73565b1461320b57805160405163170cc93360e21b8152610712919060040161510b565b5f82826080015161321c9190615823565b905083600201600a9054906101000a90046001600160401b031682604001516132459190615916565b6001600160401b0316816001600160401b0316111561328257604051636d51fe0560e11b81526001600160401b0382166004820152602401610712565b5f8061328e8a846133e4565b915091505f8a836040516020016132bc92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6133d2614100565b6133db8261414b565b611508816141c5565b5f8281525f80516020615d6d833981519152602052604081206002015481905f80516020615d2d83398151915290600160801b90046001600160401b031661342c858261422d565b5f61343687614450565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156134df573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526135069190810190615214565b6040518263ffffffff1660e01b81526004016135229190615245565b6020604051808303815f875af115801561353e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135629190615257565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f806135c5612757565b90505f6135d58460400151611d24565b90505f6003825160058111156135ed576135ed614f73565b148061360b575060048251600581111561360957613609614f73565b145b1561361b575060c0810151613658565b60028251600581111561363057613630614f73565b0361363c575042613658565b815160405163170cc93360e21b8152610712919060040161510b565b84608001516001600160401b0316816001600160401b03161161367f57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906136a490611286565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613725573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137499190615257565b95945050505050565b61375a614c95565b5f8281525f80516020615d6d8339815191526020526040808220815160e0810190925280545f80516020615d2d83398151915293929190829060ff1660058111156137a7576137a7614f73565b60058111156137b8576137b8614f73565b81526020016001820180546137cc906150d3565b80601f01602080910402602001604051908101604052809291908181526020018280546137f8906150d3565b80156138435780601f1061381a57610100808354040283529160200191613843565b820191905f5260205f20905b81548152906001019060200180831161382657829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156138b1576138b1614f73565b146138e4575f8481526007830160205260409081902054905163170cc93360e21b81526107129160ff169060040161510b565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561392857613928614f73565b021790555060208201516001820190613941908261541d565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139df85826133e4565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b5f5f80516020615d0d83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a91575f80fd5b505af1158015613aa3573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261058691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506144c5565b5f610e6e825f80516020615d0d833981519152546001600160a01b031690614526565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613b7257604051637fab81e560e01b815260040160405180910390fd5b5f80516020615d2d83398151915242613b916060860160408701614ed7565b6001600160401b0316111580613bcb5750613baf6202a300426154ec565b613bbf6060860160408701614ed7565b6001600160401b031610155b15613c0557613be06060850160408601614ed7565b604051635879da1360e11b81526001600160401b039091166004820152602401610712565b613c1a613c156060860186615941565b614532565b613c2a613c156080860186615941565b6030613c396020860186615955565b905014613c6b57613c4d6020850185615955565b6040516326475b2f60e11b8152610712925060040190815260200190565b613c758480615955565b90505f03613ca257613c878480615955565b604051633e08a12560e11b8152600401610712929190615997565b5f60088201613cb18680615955565b604051613cbf929190615814565b90815260200160405180910390205414613cf857613cdd8480615955565b60405163a41f772f60e01b8152600401610712929190615997565b613d02835f61422d565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d3f8a80615955565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613d87908b018b615955565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613dd060608b0160408c01614ed7565b6001600160401b03168152602001613deb60608b018b615941565b613df4906159aa565b8152602001613e0660808b018b615941565b613e0f906159aa565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613e3d9190615ad7565b5f60405180830381865af4158015613e57573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e7e9190810190615b8e565b5f82815260068601602052604090209193509150613e9c828261541d565b508160088401613eac8880615955565b604051613eba929190615814565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613ef6908590600401615245565b6020604051808303815f875af1158015613f12573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613f369190615257565b5f8481526007860160205260409020805460ff191660011790559050613f5c8780615955565b5f858152600787016020526040902060010191613f7a919083615bd1565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613fd98880615955565b604051613fe7929190615814565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b60400160208101906140259190614ed7565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f61405e612757565b5f868152600882016020526040812080549082905591925090819080156140f2575f878152600685016020526040902054612710906140a890600160a01b900461ffff1683615521565b6140b291906156ee565b91508184600a015f8981526020019081526020015f205f8282546140d691906154ec565b909155506140e690508282615c8a565b92506140f28984613a36565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661414957604051631afcd79f60e31b815260040160405180910390fd5b565b614153614100565b61415c8161469b565b6141646146b4565b610f756060820135608083013561418160c0850160a08601614ed7565b61419160e0860160c08701615c9d565b6141a2610100870160e08801615cb6565b6101008701356141ba61014089016101208a0161526e565b8861014001356146c4565b6141cd614100565b5f80516020615d0d8339815191526001600160a01b03821661420d57604051637330680360e01b81526001600160a01b0383166004820152602401610712565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615d2d8339815191525f6001600160401b0380841690851611156142615761425a8385615843565b905061426e565b61426b8484615843565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806142d05750600184015481516142cc916001600160401b0316906154ec565b8210155b156142f6576001600160401b038316606082015281815260408101516020820152614315565b82816060018181516143089190615823565b6001600160401b03169052505b6060810151614325906064615916565b602082015160018601546001600160401b0392909216916143509190600160401b900460ff16615521565b101561438057606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610712565b856001600160401b03168160400181815161439b91906154ec565b9052506040810180516001600160401b03871691906143bb908390615c8a565b905250600184015460408201516064916143e091600160401b90910460ff1690615521565b1015614407578060400151604051635943317f60e01b815260040161071291815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615d6d8339815191526020526040812060020180545f80516020615d2d833981519152919060089061449a90600160401b90046001600160401b0316615cd6565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f6144d96001600160a01b038416836148a9565b905080515f141580156144fd5750808060200190518101906144fb9190615cf1565b155b1561058657604051635274afe760e01b81526001600160a01b0384166004820152602401610712565b5f6133c38333846148b6565b61453f6020820182614e32565b63ffffffff1615801561455f575061455a6020820182615289565b151590505b156145a6576145716020820182614e32565b61457e6020830183615289565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610712565b6145b36020820182615289565b90506145c26020830183614e32565b63ffffffff1611156145db576145716020820182614e32565b60015b6145eb6020830183615289565b9050811015611508576146016020830183615289565b61460c600184615c8a565b81811061461b5761461b6152ce565b9050602002016020810190614630919061526e565b6001600160a01b03166146466020840184615289565b83818110614656576146566152ce565b905060200201602081019061466b919061526e565b6001600160a01b0316101561469357604051630dbc8d5f60e31b815260040160405180910390fd5b6001016145de565b6146a3614100565b6146ab614a19565b610f7581614a21565b6146bc614100565b614149614b09565b6146cc614100565b5f6146d5612757565b905061ffff861615806146ed575061271061ffff8716115b1561471157604051635f12e6c360e11b815261ffff87166004820152602401610712565b878911156147355760405163222d164360e21b8152600481018a9052602401610712565b60ff851615806147485750600a60ff8616115b1561476b5760405163170db35960e31b815260ff86166004820152602401610712565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b031610156147d2576040516202a06d60e11b81526001600160401b0388166004820152602401610712565b835f036147f25760405163a733007160e01b815260040160405180910390fd5b8161481357604051632f6bd1db60e01b815260048101839052602401610712565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b60606133c383835f614b11565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149209190615257565b90506149376001600160a01b038616853086614ba0565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa15801561497b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061499f9190615257565b9050818111614a055760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610712565b614a0f8282615c8a565b9695505050505050565b614149614100565b614a29614100565b80355f80516020615d2d8339815191529081556014614a4e6060840160408501615cb6565b60ff161180614a6d5750614a686060830160408401615cb6565b60ff16155b15614aa157614a826060830160408401615cb6565b604051634a59bbff60e11b815260ff9091166004820152602401610712565b614ab16060830160408401615cb6565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614ae26040830160208401614ed7565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612dd4614100565b606081471015614b365760405163cd78605960e01b8152306004820152602401610712565b5f80856001600160a01b03168486604051614b5191906153c8565b5f6040518083038185875af1925050503d805f8114614b8b576040519150601f19603f3d011682016040523d82523d5f602084013e614b90565b606091505b5091509150614a0f868383614bd9565b6040516001600160a01b0384811660248301528381166044830152606482018390526108159186918216906323b872dd90608401613ad9565b606082614bee57614be982614c35565b6133c3565b8151158015614c0557506001600160a01b0384163b155b15614c2e57604051639996b31560e01b81526001600160a01b0385166004820152602401610712565b50806133c3565b805115614c455780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c6a906150d3565b5f825580601f10614c79575050565b601f0160209004905f5260205f2090810190610f759190614cd2565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614ce6575f8155600101614cd3565b5090565b8015158114610f75575f80fd5b803563ffffffff81168114614d0a575f80fd5b919050565b5f805f60608486031215614d21575f80fd5b833592506020840135614d3381614cea565b9150614d4160408501614cf7565b90509250925092565b5f60208284031215614d5a575f80fd5b5035919050565b5f8060408385031215614d72575f80fd5b82356001600160401b03811115614d87575f80fd5b830160808186031215614d98575f80fd5b9150614da660208401614cf7565b90509250929050565b5f8060408385031215614dc0575f80fd5b82359150614da660208401614cf7565b6001600160a01b0381168114610f75575f80fd5b5f805f8060808587031215614df7575f80fd5b843593506020850135614e0981614cea565b9250614e1760408601614cf7565b91506060850135614e2781614dd0565b939692955090935050565b5f60208284031215614e42575f80fd5b6133c382614cf7565b803561ffff81168114614d0a575f80fd5b6001600160401b0381168114610f75575f80fd5b5f805f8060808587031215614e83575f80fd5b84356001600160401b03811115614e98575f80fd5b850160a08188031215614ea9575f80fd5b9350614eb760208601614e4b565b92506040850135614ec781614e5c565b9396929550929360600135925050565b5f60208284031215614ee7575f80fd5b81356133c381614e5c565b5f8060408385031215614f03575f80fd5b823591506020830135614f1581614dd0565b809150509250929050565b5f8060408385031215614f31575f80fd5b50508035926020909101359150565b5f80828403610180811215614f53575f80fd5b61016080821215614f62575f80fd5b8493508301359050614f1581614dd0565b634e487b7160e01b5f52602160045260245ffd5b60068110614f9757614f97614f73565b9052565b5f5b83811015614fb5578181015183820152602001614f9d565b50505f910152565b5f8151808452614fd4816020860160208601614f9b565b601f01601f19169290920160200192915050565b60208152614ffa602082018351614f87565b5f602083015160e06040840152615015610100840182614fbd565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215615079575f80fd5b82356001600160401b038082111561508f575f80fd5b818501915085601f8301126150a2575f80fd5b8135818111156150b0575f80fd5b8660208285010111156150c1575f80fd5b60209290920196919550909350505050565b600181811c908216806150e757607f821691505b60208210810361510557634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610e6e8284614f87565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b038111828210171561514f5761514f615119565b60405290565b604080519081016001600160401b038111828210171561514f5761514f615119565b604051601f8201601f191681016001600160401b038111828210171561519f5761519f615119565b604052919050565b5f6001600160401b038211156151bf576151bf615119565b50601f01601f191660200190565b5f82601f8301126151dc575f80fd5b81516151ef6151ea826151a7565b615177565b818152846020838601011115615203575f80fd5b610fa5826020830160208701614f9b565b5f60208284031215615224575f80fd5b81516001600160401b03811115615239575f80fd5b610fa5848285016151cd565b602081525f6133c36020830184614fbd565b5f60208284031215615267575f80fd5b5051919050565b5f6020828403121561527e575f80fd5b81356133c381614dd0565b5f808335601e1984360301811261529e575f80fd5b8301803591506001600160401b038211156152b7575f80fd5b6020019150600581901b36038213156135b4575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152f6575f80fd5b9190910192915050565b5f82601f83011261530f575f80fd5b813561531d6151ea826151a7565b818152846020838601011115615331575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6060823603121561535d575f80fd5b61536561512d565b82356001600160401b038082111561537b575f80fd5b61538736838701615300565b8352602085013591508082111561539c575f80fd5b506153a936828601615300565b60208301525060408301356153bd81614e5c565b604082015292915050565b5f82516152f6818460208701614f9b565b601f82111561058657805f5260205f20601f840160051c810160208510156153fe5750805b601f840160051c820191505b81811015610e80575f815560010161540a565b81516001600160401b0381111561543657615436615119565b61544a8161544484546150d3565b846153d9565b602080601f83116001811461547d575f84156154665750858301515b5f19600386901b1c1916600185901b1785556110dd565b5f85815260208120601f198616915b828110156154ab5788860151825594840194600190910190840161548c565b50858210156154c857878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610e6e57610e6e6154d8565b5f63ffffffff808316818103615517576155176154d8565b6001019392505050565b8082028115828204841417610e6e57610e6e6154d8565b5f808335601e1984360301811261554d575f80fd5b83016020810192503590506001600160401b0381111561556b575f80fd5b8036038213156135b4575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561565657848303601f19018952813536889003605e190181126155dd575f80fd5b870160606155eb8280615538565b8287526155fb8388018284615579565b9250505061560b86830183615538565b8683038888015261561d838284615579565b92505050604080830135925061563283614e5c565b6001600160401b0392909216949091019390935297830197908301906001016155b8565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561568781614dd0565b6001600160a01b031660608381019190915283013536849003601e190181126156ae575f80fd5b83016020810190356001600160401b038111156156c9575f80fd5b8060051b36038213156156da575f80fd5b60808085015261374960a0850182846155a1565b5f8261570857634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061572157615721614f73565b91905290565b5f805f60608486031215615739575f80fd5b83519250602084015161574b81614e5c565b604085015190925061575c81614e5c565b809150509250925092565b5f8060408385031215615778575f80fd5b825191506020830151614f1581614cea565b5f60208083525f845461579c816150d3565b806020870152604060018084165f81146157bd57600181146157d957615806565b60ff19851660408a0152604084151560051b8a01019550615806565b895f5260205f205f5b858110156157fd5781548b82018601529083019088016157e2565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b03818116838216019080821115612488576124886154d8565b6001600160401b03828116828216039080821115612488576124886154d8565b5f8060408385031215615874575f80fd5b82516001600160401b038082111561588a575f80fd5b908401906060828703121561589d575f80fd5b6158a561512d565b8251815260208301516158b781614dd0565b60208201526040830151828111156158cd575f80fd5b6158d9888286016151cd565b6040830152508094505050506020830151614f1581614cea565b5f8060408385031215615904575f80fd5b825191506020830151614f1581614e5c565b6001600160401b03818116838216028082169190828114615939576159396154d8565b505092915050565b5f8235603e198336030181126152f6575f80fd5b5f808335601e1984360301811261596a575f80fd5b8301803591506001600160401b03821115615983575f80fd5b6020019150368190038213156135b4575f80fd5b602081525f610fa5602083018486615579565b5f604082360312156159ba575f80fd5b6159c2615155565b6159cb83614cf7565b81526020808401356001600160401b03808211156159e7575f80fd5b9085019036601f8301126159f9575f80fd5b813581811115615a0b57615a0b615119565b8060051b9150615a1c848301615177565b8181529183018401918481019036841115615a35575f80fd5b938501935b83851015615a5f5784359250615a4f83614dd0565b8282529385019390850190615a3a565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615acc5784516001600160a01b03168252938301936001929092019190830190615aa3565b509695505050505050565b60208152815160208201525f602083015160e06040840152615afd610100840182614fbd565b90506040840151601f1980858403016060860152615b1b8383614fbd565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b4b8383615a71565b925060a08601519150808584030160c086015250615b698282615a71565b91505060c0840151615b8660e08501826001600160401b03169052565b509392505050565b5f8060408385031215615b9f575f80fd5b8251915060208301516001600160401b03811115615bbb575f80fd5b615bc7858286016151cd565b9150509250929050565b6001600160401b03831115615be857615be8615119565b615bfc83615bf683546150d3565b836153d9565b5f601f841160018114615c2d575f8515615c165750838201355b5f19600387901b1c1916600186901b178355610e80565b5f83815260208120601f198716915b82811015615c5c5786850135825560209485019460019092019101615c3c565b5086821015615c78575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610e6e57610e6e6154d8565b5f60208284031215615cad575f80fd5b6133c382614e4b565b5f60208284031215615cc6575f80fd5b813560ff811681146133c3575f80fd5b5f6001600160401b03808316818103615517576155176154d8565b5f60208284031215615d01575f80fd5b81516133c381614cea56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a264697066735822122046bf6da6733da82f4e6586c7194c2d90125285923c45e6bca3afb9b35075888864736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615edb380380615edb83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d8e8061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061023f575f3560e01c806380dd672f11610135578063b771b3bc116100b4578063d5f20ff611610079578063d5f20ff614610516578063df93d8de14610536578063e4a63c4014610540578063fb8b11dd14610554578063fd7ac5e714610567575f80fd5b8063b771b3bc146104ae578063ba3a4b97146104d4578063bc5fbfec146104e7578063bee0a03f146104fb578063c974d1b61461050e575f80fd5b80639e1bc4ef116100fa5780639e1bc4ef1461044e5780639e478eea14610461578063a3a65e4814610474578063a9778a7a146102ee578063afb9809614610487575f80fd5b806380dd672f146103fa5780638280a25a1461040d5780638ef34c981461041557806393e24598146104285780639ae064471461043b575f80fd5b8063467ef06f116101c1578063620658561161018657806362065856146103a757806366435abf146103ba578063732214f8146103cd57806376f78621146103d45780637d8d2f77146103e7575f80fd5b8063467ef06f146103305780634bee0040146103435780635dd6a6cb1461036457806360305d621461037757806360ad778414610394575f80fd5b806325e1c7761161020757806325e1c776146102b05780632e2194d8146102c357806335455ded146102ee57806337b9be8f1461030a5780633a1cfff61461031d575f80fd5b80630118acc4146102435780630322ed9814610258578063151d30d11461026b5780631ec447241461028a57806320d91b7a1461029d575b5f80fd5b610256610251366004614cd2565b61057a565b005b610256610266366004614d0d565b61058b565b610273600a81565b60405160ff90911681526020015b60405180910390f35b610256610298366004614cd2565b61081b565b6102566102ab366004614d24565b610827565b6102566102be366004614d72565b610dac565b6102d66102d1366004614d0d565b610e20565b6040516001600160401b039091168152602001610281565b6102f761271081565b60405161ffff9091168152602001610281565b610256610318366004614da7565b610e74565b61025661032b366004614cd2565b610e87565b61025661033e366004614df5565b610e93565b610356610351366004614e33565b610f78565b604051908152602001610281565b610256610372366004614da7565b610fad565b61037f601481565b60405163ffffffff9091168152602001610281565b6102566103a2366004614d72565b610fb9565b6103566103b5366004614e9a565b611286565b6102d66103c8366004614d0d565b6112a6565b6103565f81565b6102566103e2366004614cd2565b6112ba565b6102566103f5366004614da7565b6112c6565b610256610408366004614d72565b6112d2565b610273603081565b610256610423366004614eb5565b61150c565b610256610436366004614d0d565b6115ee565b610256610449366004614da7565b611682565b61035661045c366004614ee3565b61168e565b61025661046f366004614f03565b6116ba565b610256610482366004614df5565b611799565b6103567f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104bc6005600160991b0181565b6040516001600160a01b039091168152602001610281565b6102566104e2366004614d0d565b61198e565b6103565f80516020615cf983398151915281565b610256610509366004614d0d565b611be7565b610273601481565b610529610524366004614d0d565b611d24565b6040516102819190614fab565b6102d66202a30081565b6103565f80516020615cd983398151915281565b610256610562366004614eb5565b611e73565b61035661057536600461502b565b611f3a565b6105868383835f611f95565b505050565b5f8181525f80516020615d398339815191526020526040808220815160e0810190925280545f80516020615cf983398151915293929190829060ff1660058111156105d8576105d8614f36565b60058111156105e9576105e9614f36565b81526020016001820180546105fd90615096565b80601f016020809104026020016040519081016040528092919081815260200182805461062990615096565b80156106745780601f1061064b57610100808354040283529160200191610674565b820191905f5260205f20905b81548152906001019060200180831161065757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156106df576106df614f36565b1461071b575f8381526007830160205260409081902054905163170cc93360e21b81526107129160ff16906004016150ce565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610792573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107b991908101906151d7565b6040518263ffffffff1660e01b81526004016107d59190615208565b6020604051808303815f875af11580156107f1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610815919061521a565b50505050565b6108158383835f611fc1565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615cf98339815191529060ff161561087957604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e0919061521a565b836020013514610909576040516372b0a7e760e11b815260208401356004820152602401610712565b3061091a6060850160408601615231565b6001600160a01b03161461095d576109386060840160408501615231565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610712565b5f61096b606085018561524c565b905090505f805b828163ffffffff161015610bd2575f61098e606088018861524c565b8363ffffffff168181106109a4576109a4615291565b90506020028101906109b691906152a5565b6109bf90615310565b80516040519192505f9160088801916109d79161538b565b90815260200160405180910390205414610a0757805160405163a41f772f60e01b81526107129190600401615208565b5f6002885f013584604051602001610a3692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a509161538b565b602060405180830381855afa158015610a6b573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a8e919061521a565b90508086600801835f0151604051610aa6919061538b565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610ae690826153e0565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610b6590856154af565b8251604051919550610b769161538b565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610bcb906154c2565b9050610972565b50600483018190556001830154606490610bf690600160401b900460ff16836154e4565b1015610c1857604051635943317f60e01b815260048101829052602401610712565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c3c876122ee565b604001516040518263ffffffff1660e01b8152600401610c5c9190615208565b602060405180830381865af4158015610c77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9b919061521a565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610cd59190615626565b5f60405180830381865af4158015610cef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d1691908101906151d7565b90505f600282604051610d29919061538b565b602060405180830381855afa158015610d44573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d67919061521a565b9050828114610d935760405163baaea89d60e01b81526004810182905260248101849052604401610712565b5050506009909201805460ff1916600117905550505050565b610db582612404565b610dd5576040516330efa98b60e01b815260048101839052602401610712565b5f610ddf83611d24565b5190506002816005811115610df657610df6614f36565b14610e16578060405163170cc93360e21b815260040161071291906150ce565b610815838361242d565b5f80610e2a6126cc565b60030154610e3890846156ba565b9050801580610e4d57506001600160401b0381115b15610e6e5760405163222d164360e21b815260048101849052602401610712565b92915050565b610e8084848484611fc1565b5050505050565b6108158383835f6126f0565b610e9b612912565b5f610ea46126cc565b90505f80610eb184612949565b91509150610ebe82612404565b610eca57505050610f5f565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b03918216911680610f01575080610f1f565b5f848152600b86016020526040902080546001600160a01b03191690555b600483516005811115610f3457610f34614f36565b03610f4357610f438185612cfc565b610f5982610f548560400151611286565b612d26565b50505050505b610f7560015f80516020615d1983398151915255565b50565b5f610f81612912565b610f8d85858585612d5c565b9050610fa560015f80516020615d1983398151915255565b949350505050565b61081584848484612ec1565b5f610fc26126cc565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610ffb57610ffb614f36565b600381111561100c5761100c614f36565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61108282611d24565b905060018351600381111561109957611099614f36565b146110ba578251604051633b0d540d60e21b815261071291906004016156d9565b6004815160058111156110cf576110cf614f36565b036110e5576110dd86612eed565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61110a896122ee565b604001516040518263ffffffff1660e01b815260040161112a9190615208565b606060405180830381865af4158015611145573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116991906156f3565b509150915081841461119657846040015160405163089938b360e11b815260040161071291815260200190565b806001600160401b031683606001516001600160401b031610806111cf5750806001600160401b03168560a001516001600160401b0316115b156111f857604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61128f6126cc565b60030154610e6e906001600160401b0384166154e4565b5f6112b082611d24565b6080015192915050565b6105868383835f612ec1565b610e80848484846126f0565b6112da612912565b5f6112e36126cc565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561131c5761131c614f36565b600381111561132d5761132d614f36565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113a6576113a6614f36565b146113c7578051604051633b0d540d60e21b815261071291906004016156d9565b60046113d68260400151611d24565b5160058111156113e8576113e8614f36565b146114e7575f6113f7846122ee565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016114369190615208565b606060405180830381865af4158015611451573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147591906156f3565b5091509150818460400151146114a15760405163089938b360e11b815260048101839052602401610712565b806001600160401b03168460c001516001600160401b031611156114e357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5050505b6114f084612eed565b505061150860015f80516020615d1983398151915255565b5050565b6001600160a01b03811661153e5760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f6115476126cc565b5f8481526006820160205260409020549091506001600160a01b0316331461159057335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610712565b336001600160a01b038316036115bf575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f6115f76126cc565b90505f61160383611d24565b519050600481600581111561161a5761161a614f36565b1461163a578060405163170cc93360e21b815260040161071291906150ce565b5f8381526006830160205260409020546001600160a01b0316331461165f573361156b565b5f838152600683016020526040902054610586906001600160a01b031684612cfc565b61081584848484611f95565b5f611697612912565b6116a28333846130fa565b9050610e6e60015f80516020615d1983398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611703575080546001600160401b03808416911610155b156117215760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561174c848461333f565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615cf98339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117cc866122ee565b604001516040518263ffffffff1660e01b81526004016117ec9190615208565b6040805180830381865af4158015611806573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061182a9190615733565b915091508061185057604051632d07135360e01b81528115156004820152602401610712565b5f8281526006840160205260409020805461186a90615096565b90505f0361188e5760405163089938b360e11b815260048101839052602401610712565b60015f83815260078501602052604090205460ff1660058111156118b4576118b4614f36565b146118e7575f8281526007840160205260409081902054905163170cc93360e21b81526107129160ff16906004016150ce565b5f82815260068401602052604081206118ff91614c21565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f6119976126cc565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119d0576119d0614f36565b60038111156119e1576119e1614f36565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a5a57611a5a614f36565b14158015611a7b5750600381516003811115611a7857611a78614f36565b14155b15611a9c578051604051633b0d540d60e21b815261071291906004016156d9565b5f611aaa8260400151611d24565b905080606001516001600160401b03165f03611adc576040516339b894f960e21b815260048101859052602401610712565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b4a93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b64573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b8b91908101906151d7565b6040518263ffffffff1660e01b8152600401611ba79190615208565b6020604051808303815f875af1158015611bc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e80919061521a565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615cf98339815191529190611c2e90615096565b90505f03611c525760405163089938b360e11b815260048101839052602401610712565b60015f83815260078301602052604090205460ff166005811115611c7857611c78614f36565b14611cab575f8281526007820160205260409081902054905163170cc93360e21b81526107129160ff16906004016150ce565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611ce49190600401615756565b6020604051808303815f875af1158015611d00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610586919061521a565b611d2c614c58565b5f8281525f80516020615d39833981519152602052604090819020815160e0810190925280545f80516020615cf9833981519152929190829060ff166005811115611d7957611d79614f36565b6005811115611d8a57611d8a614f36565b8152602001600182018054611d9e90615096565b80601f0160208091040260200160405190810160405280929190818152602001828054611dca90615096565b8015611e155780601f10611dec57610100808354040283529160200191611e15565b820191905f5260205f20905b815481529060010190602001808311611df857829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611ea55760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611eae6126cc565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611edc573361156b565b336001600160a01b03831603611f0b575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615cf9833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611f7d90869086906157e0565b90815260200160405180910390205491505092915050565b611fa184848484611fc1565b61081557604051631036cf9160e11b815260048101859052602401610712565b5f80611fcb6126cc565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561200457612004614f36565b600381111561201557612015614f36565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61208b82611d24565b90506002835160038111156120a2576120a2614f36565b146120c3578251604051633b0d540d60e21b815261071291906004016156d9565b60208301516001600160a01b0316331461215f575f8281526006850160205260409020546001600160a01b031633146120fc573361156b565b5f82815260068501602052604090205460a082015161212b91600160b01b90046001600160401b0316906157ef565b6001600160401b031642101561215f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b60028151600581111561217457612174614f36565b036122965760028401546080840151612196916001600160401b0316906157ef565b6001600160401b03164210156121ca5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b87156121dc576121da828861242d565b505b5f8981526007850160205260409020805460ff1916600317905560608301516080820151612215918491612210919061580f565b613359565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561225884888c613530565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610fa59350505050565b6004815160058111156122ab576122ab614f36565b036122d2576122bb83878b613530565b506122c589612eed565b6001945050505050610fa5565b805160405163170cc93360e21b815261071291906004016150ce565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612352573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612379919081019061582f565b915091508061239b57604051636b2f19e960e01b815260040160405180910390fd5b8151156123c1578151604051636ba589a560e01b81526004810191909152602401610712565b60208201516001600160a01b0316156123fd576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5092915050565b5f8061240e6126cc565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612478573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261249f919081019061582f565b91509150806124c157604051636b2f19e960e01b815260040160405180910390fd5b5f6124ca6126cc565b60058101548451919250146124f8578251604051636ba589a560e01b81526004810191909152602401610712565b60208301516001600160a01b031615612534576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b60208301516001600160a01b031615612570576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016125ad9190615208565b6040805180830381865af41580156125c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125eb91906158bf565b915091508188146126125760405163089938b360e11b815260048101899052602401610712565b5f8881526006840160205260409020600101546001600160401b0390811690821611156126a3575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26126c1565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806126fa6126cc565b90505f61270687613715565b905061271187612404565b61272057600192505050610fa5565b5f8781526006830160205260409020546001600160a01b03163314612745573361156b565b5f87815260068301602052604090205460a082015161277491600160b01b90046001600160401b0316906157ef565b6001600160401b03168160c001516001600160401b031610156127bb5760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610712565b5f86156127d3576127cc888761242d565b90506127f1565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f9061281690611286565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561287f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128a3919061521a565b90508084600a015f8b81526020019081526020015f205f8282546128c791906154af565b90915550506001600160a01b03861615612904575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615d1983398151915280546001190161294357604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612952614c58565b5f80516020615cf98339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612985886122ee565b604001516040518263ffffffff1660e01b81526004016129a59190615208565b6040805180830381865af41580156129bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129e39190615733565b915091508015612a0a57604051632d07135360e01b81528115156004820152602401610712565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612a3b57612a3b614f36565b6005811115612a4c57612a4c614f36565b8152602001600182018054612a6090615096565b80601f0160208091040260200160405190810160405280929190818152602001828054612a8c90615096565b8015612ad75780601f10612aae57610100808354040283529160200191612ad7565b820191905f5260205f20905b815481529060010190602001808311612aba57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612b4257612b42614f36565b14158015612b635750600181516005811115612b6057612b60614f36565b14155b15612b8457805160405163170cc93360e21b815261071291906004016150ce565b600381516005811115612b9957612b99614f36565b03612ba75760048152612bac565b600581525b836008018160200151604051612bc2919061538b565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612c0657612c06614f36565b021790555060208201516001820190612c1f90826153e0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612cc557612cc5614f36565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d056126cc565b5f838152600a820160205260408120805491905590915061081584826139f9565b5f80516020615cd983398151915254611508906001600160a01b03168383613a6f565b60015f80516020615d1983398151915255565b5f80612d666126cc565b600281015490915061ffff600160401b90910481169086161080612d8f575061271061ffff8616115b15612db357604051635f12e6c360e11b815261ffff86166004820152602401610712565b60028101546001600160401b039081169085161015612def576040516202a06d60e11b81526001600160401b0385166004820152602401610712565b8054831080612e015750806001015483115b15612e225760405163222d164360e21b815260048101849052602401610712565b5f612e2c84613ace565b90505f612e3882610e20565b90505f612e458983613af1565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b612ecd848484846126f0565b61081557604051635bff683f60e11b815260048101859052602401610712565b5f612ef66126cc565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f2f57612f2f614f36565b6003811115612f4057612f40614f36565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612fdd7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612fec91906157ef565b6001600160401b03164210156130205760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130705750602082015161308e565b5f858152600985016020526040902080546001600160a01b03191690555b5f8061309b838886614016565b915091506130b48560200151610f548760600151611286565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131046126cc565b90505f6131136102d185613ace565b90505f61311f87611d24565b905061312a87612404565b61314a576040516330efa98b60e01b815260048101889052602401610712565b60028151600581111561315f5761315f614f36565b1461318057805160405163170cc93360e21b815261071291906004016150ce565b5f82826080015161319191906157ef565b905083600201600a9054906101000a90046001600160401b031682604001516131ba91906158e2565b6001600160401b0316816001600160401b031611156131f757604051636d51fe0560e11b81526001600160401b0382166004820152602401610712565b5f806132038a84613359565b915091505f8a8360405160200161323192919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6133476140c3565b6133508261410e565b61150881614188565b5f8281525f80516020615d39833981519152602052604081206002015481905f80516020615cf983398151915290600160801b90046001600160401b03166133a185826141f0565b5f6133ab87614413565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613454573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261347b91908101906151d7565b6040518263ffffffff1660e01b81526004016134979190615208565b6020604051808303815f875af11580156134b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134d7919061521a565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061353a6126cc565b90505f61354a8660400151611d24565b90505f60038251600581111561356257613562614f36565b1480613580575060048251600581111561357e5761357e614f36565b145b15613590575060c08101516135cd565b6002825160058111156135a5576135a5614f36565b036135b15750426135cd565b815160405163170cc93360e21b815261071291906004016150ce565b86608001516001600160401b0316816001600160401b0316116135f5575f9350505050613338565b600483015460608801515f916001600160a01b031690634f22429f9061361a90611286565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561369b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136bf919061521a565b5f878152600886016020526040902081905590506001600160a01b038716156126c1575f868152600985016020526040902080546001600160a01b0319166001600160a01b038916179055979650505050505050565b61371d614c58565b5f8281525f80516020615d398339815191526020526040808220815160e0810190925280545f80516020615cf983398151915293929190829060ff16600581111561376a5761376a614f36565b600581111561377b5761377b614f36565b815260200160018201805461378f90615096565b80601f01602080910402602001604051908101604052809291908181526020018280546137bb90615096565b80156138065780601f106137dd57610100808354040283529160200191613806565b820191905f5260205f20905b8154815290600101906020018083116137e957829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561387457613874614f36565b146138a7575f8481526007830160205260409081902054905163170cc93360e21b81526107129160ff16906004016150ce565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff191660018360058111156138eb576138eb614f36565b02179055506020820151600182019061390490826153e0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139a28582613359565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b5f5f80516020615cd983398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a54575f80fd5b505af1158015613a66573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261058691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614488565b5f610e6e825f80516020615cd9833981519152546001600160a01b0316906144e9565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613b3557604051637fab81e560e01b815260040160405180910390fd5b5f80516020615cf983398151915242613b546060860160408701614e9a565b6001600160401b0316111580613b8e5750613b726202a300426154af565b613b826060860160408701614e9a565b6001600160401b031610155b15613bc857613ba36060850160408601614e9a565b604051635879da1360e11b81526001600160401b039091166004820152602401610712565b613bdd613bd8606086018661590d565b6144f5565b613bed613bd8608086018661590d565b6030613bfc6020860186615921565b905014613c2e57613c106020850185615921565b6040516326475b2f60e11b8152610712925060040190815260200190565b613c388480615921565b90505f03613c6557613c4a8480615921565b604051633e08a12560e11b8152600401610712929190615963565b5f60088201613c748680615921565b604051613c829291906157e0565b90815260200160405180910390205414613cbb57613ca08480615921565b60405163a41f772f60e01b8152600401610712929190615963565b613cc5835f6141f0565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d028a80615921565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613d4a908b018b615921565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613d9360608b0160408c01614e9a565b6001600160401b03168152602001613dae60608b018b61590d565b613db790615976565b8152602001613dc960808b018b61590d565b613dd290615976565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613e009190615aa3565b5f60405180830381865af4158015613e1a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e419190810190615b5a565b5f82815260068601602052604090209193509150613e5f82826153e0565b508160088401613e6f8880615921565b604051613e7d9291906157e0565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613eb9908590600401615208565b6020604051808303815f875af1158015613ed5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ef9919061521a565b5f8481526007860160205260409020805460ff191660011790559050613f1f8780615921565b5f858152600787016020526040902060010191613f3d919083615b9d565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613f9c8880615921565b604051613faa9291906157e0565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613fe89190614e9a565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f6140216126cc565b5f868152600882016020526040812080549082905591925090819080156140b5575f8781526006850160205260409020546127109061406b90600160a01b900461ffff16836154e4565b61407591906156ba565b91508184600a015f8981526020019081526020015f205f82825461409991906154af565b909155506140a990508282615c56565b92506140b589846139f9565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661410c57604051631afcd79f60e31b815260040160405180910390fd5b565b6141166140c3565b61411f8161465e565b614127614677565b610f756060820135608083013561414460c0850160a08601614e9a565b61415460e0860160c08701615c69565b614165610100870160e08801615c82565b61010087013561417d61014089016101208a01615231565b886101400135614687565b6141906140c3565b5f80516020615cd98339815191526001600160a01b0382166141d057604051637330680360e01b81526001600160a01b0383166004820152602401610712565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615cf98339815191525f6001600160401b0380841690851611156142245761421d838561580f565b9050614231565b61422e848461580f565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061429357506001840154815161428f916001600160401b0316906154af565b8210155b156142b9576001600160401b0383166060820152818152604081015160208201526142d8565b82816060018181516142cb91906157ef565b6001600160401b03169052505b60608101516142e89060646158e2565b602082015160018601546001600160401b0392909216916143139190600160401b900460ff166154e4565b101561434357606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610712565b856001600160401b03168160400181815161435e91906154af565b9052506040810180516001600160401b038716919061437e908390615c56565b905250600184015460408201516064916143a391600160401b90910460ff16906154e4565b10156143ca578060400151604051635943317f60e01b815260040161071291815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615d398339815191526020526040812060020180545f80516020615cf9833981519152919060089061445d90600160401b90046001600160401b0316615ca2565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61449c6001600160a01b0384168361486c565b905080515f141580156144c05750808060200190518101906144be9190615cbd565b155b1561058657604051635274afe760e01b81526001600160a01b0384166004820152602401610712565b5f613338833384614879565b6145026020820182614df5565b63ffffffff16158015614522575061451d602082018261524c565b151590505b15614569576145346020820182614df5565b614541602083018361524c565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610712565b614576602082018261524c565b90506145856020830183614df5565b63ffffffff16111561459e576145346020820182614df5565b60015b6145ae602083018361524c565b9050811015611508576145c4602083018361524c565b6145cf600184615c56565b8181106145de576145de615291565b90506020020160208101906145f39190615231565b6001600160a01b0316614609602084018461524c565b8381811061461957614619615291565b905060200201602081019061462e9190615231565b6001600160a01b0316101561465657604051630dbc8d5f60e31b815260040160405180910390fd5b6001016145a1565b6146666140c3565b61466e6149dc565b610f75816149e4565b61467f6140c3565b61410c614acc565b61468f6140c3565b5f6146986126cc565b905061ffff861615806146b0575061271061ffff8716115b156146d457604051635f12e6c360e11b815261ffff87166004820152602401610712565b878911156146f85760405163222d164360e21b8152600481018a9052602401610712565b60ff8516158061470b5750600a60ff8616115b1561472e5760405163170db35960e31b815260ff86166004820152602401610712565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614795576040516202a06d60e11b81526001600160401b0388166004820152602401610712565b835f036147b55760405163a733007160e01b815260040160405180910390fd5b816147d657604051632f6bd1db60e01b815260048101839052602401610712565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b606061333883835f614ad4565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148e3919061521a565b90506148fa6001600160a01b038616853086614b63565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa15801561493e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614962919061521a565b90508181116149c85760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610712565b6149d28282615c56565b9695505050505050565b61410c6140c3565b6149ec6140c3565b80355f80516020615cf98339815191529081556014614a116060840160408501615c82565b60ff161180614a305750614a2b6060830160408401615c82565b60ff16155b15614a6457614a456060830160408401615c82565b604051634a59bbff60e11b815260ff9091166004820152602401610712565b614a746060830160408401615c82565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa56040830160208401614e9a565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612d496140c3565b606081471015614af95760405163cd78605960e01b8152306004820152602401610712565b5f80856001600160a01b03168486604051614b14919061538b565b5f6040518083038185875af1925050503d805f8114614b4e576040519150601f19603f3d011682016040523d82523d5f602084013e614b53565b606091505b50915091506149d2868383614b9c565b6040516001600160a01b0384811660248301528381166044830152606482018390526108159186918216906323b872dd90608401613a9c565b606082614bb157614bac82614bf8565b613338565b8151158015614bc857506001600160a01b0384163b155b15614bf157604051639996b31560e01b81526001600160a01b0385166004820152602401610712565b5080613338565b805115614c085780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c2d90615096565b5f825580601f10614c3c575050565b601f0160209004905f5260205f2090810190610f759190614c95565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614ca9575f8155600101614c96565b5090565b8015158114610f75575f80fd5b803563ffffffff81168114614ccd575f80fd5b919050565b5f805f60608486031215614ce4575f80fd5b833592506020840135614cf681614cad565b9150614d0460408501614cba565b90509250925092565b5f60208284031215614d1d575f80fd5b5035919050565b5f8060408385031215614d35575f80fd5b82356001600160401b03811115614d4a575f80fd5b830160808186031215614d5b575f80fd5b9150614d6960208401614cba565b90509250929050565b5f8060408385031215614d83575f80fd5b82359150614d6960208401614cba565b6001600160a01b0381168114610f75575f80fd5b5f805f8060808587031215614dba575f80fd5b843593506020850135614dcc81614cad565b9250614dda60408601614cba565b91506060850135614dea81614d93565b939692955090935050565b5f60208284031215614e05575f80fd5b61333882614cba565b803561ffff81168114614ccd575f80fd5b6001600160401b0381168114610f75575f80fd5b5f805f8060808587031215614e46575f80fd5b84356001600160401b03811115614e5b575f80fd5b850160a08188031215614e6c575f80fd5b9350614e7a60208601614e0e565b92506040850135614e8a81614e1f565b9396929550929360600135925050565b5f60208284031215614eaa575f80fd5b813561333881614e1f565b5f8060408385031215614ec6575f80fd5b823591506020830135614ed881614d93565b809150509250929050565b5f8060408385031215614ef4575f80fd5b50508035926020909101359150565b5f80828403610180811215614f16575f80fd5b61016080821215614f25575f80fd5b8493508301359050614ed881614d93565b634e487b7160e01b5f52602160045260245ffd5b60068110614f5a57614f5a614f36565b9052565b5f5b83811015614f78578181015183820152602001614f60565b50505f910152565b5f8151808452614f97816020860160208601614f5e565b601f01601f19169290920160200192915050565b60208152614fbd602082018351614f4a565b5f602083015160e06040840152614fd8610100840182614f80565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f806020838503121561503c575f80fd5b82356001600160401b0380821115615052575f80fd5b818501915085601f830112615065575f80fd5b813581811115615073575f80fd5b866020828501011115615084575f80fd5b60209290920196919550909350505050565b600181811c908216806150aa57607f821691505b6020821081036150c857634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610e6e8284614f4a565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715615112576151126150dc565b60405290565b604080519081016001600160401b0381118282101715615112576151126150dc565b604051601f8201601f191681016001600160401b0381118282101715615162576151626150dc565b604052919050565b5f6001600160401b03821115615182576151826150dc565b50601f01601f191660200190565b5f82601f83011261519f575f80fd5b81516151b26151ad8261516a565b61513a565b8181528460208386010111156151c6575f80fd5b610fa5826020830160208701614f5e565b5f602082840312156151e7575f80fd5b81516001600160401b038111156151fc575f80fd5b610fa584828501615190565b602081525f6133386020830184614f80565b5f6020828403121561522a575f80fd5b5051919050565b5f60208284031215615241575f80fd5b813561333881614d93565b5f808335601e19843603018112615261575f80fd5b8301803591506001600160401b0382111561527a575f80fd5b6020019150600581901b3603821315613529575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152b9575f80fd5b9190910192915050565b5f82601f8301126152d2575f80fd5b81356152e06151ad8261516a565b8181528460208386010111156152f4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615320575f80fd5b6153286150f0565b82356001600160401b038082111561533e575f80fd5b61534a368387016152c3565b8352602085013591508082111561535f575f80fd5b5061536c368286016152c3565b602083015250604083013561538081614e1f565b604082015292915050565b5f82516152b9818460208701614f5e565b601f82111561058657805f5260205f20601f840160051c810160208510156153c15750805b601f840160051c820191505b81811015610e80575f81556001016153cd565b81516001600160401b038111156153f9576153f96150dc565b61540d816154078454615096565b8461539c565b602080601f831160018114615440575f84156154295750858301515b5f19600386901b1c1916600185901b1785556110dd565b5f85815260208120601f198616915b8281101561546e5788860151825594840194600190910190840161544f565b508582101561548b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610e6e57610e6e61549b565b5f63ffffffff8083168181036154da576154da61549b565b6001019392505050565b8082028115828204841417610e6e57610e6e61549b565b5f808335601e19843603018112615510575f80fd5b83016020810192503590506001600160401b0381111561552e575f80fd5b803603821315613529575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561561957848303601f19018952813536889003605e190181126155a0575f80fd5b870160606155ae82806154fb565b8287526155be838801828461553c565b925050506155ce868301836154fb565b868303888801526155e083828461553c565b9250505060408083013592506155f583614e1f565b6001600160401b03929092169490910193909352978301979083019060010161557b565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561564a81614d93565b6001600160a01b031660608381019190915283013536849003601e19018112615671575f80fd5b83016020810190356001600160401b0381111561568c575f80fd5b8060051b360382131561569d575f80fd5b6080808501526156b160a085018284615564565b95945050505050565b5f826156d457634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106156ed576156ed614f36565b91905290565b5f805f60608486031215615705575f80fd5b83519250602084015161571781614e1f565b604085015190925061572881614e1f565b809150509250925092565b5f8060408385031215615744575f80fd5b825191506020830151614ed881614cad565b5f60208083525f845461576881615096565b806020870152604060018084165f811461578957600181146157a5576157d2565b60ff19851660408a0152604084151560051b8a010195506157d2565b895f5260205f205f5b858110156157c95781548b82018601529083019088016157ae565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156123fd576123fd61549b565b6001600160401b038281168282160390808211156123fd576123fd61549b565b5f8060408385031215615840575f80fd5b82516001600160401b0380821115615856575f80fd5b9084019060608287031215615869575f80fd5b6158716150f0565b82518152602083015161588381614d93565b6020820152604083015182811115615899575f80fd5b6158a588828601615190565b6040830152508094505050506020830151614ed881614cad565b5f80604083850312156158d0575f80fd5b825191506020830151614ed881614e1f565b6001600160401b038181168382160280821691908281146159055761590561549b565b505092915050565b5f8235603e198336030181126152b9575f80fd5b5f808335601e19843603018112615936575f80fd5b8301803591506001600160401b0382111561594f575f80fd5b602001915036819003821315613529575f80fd5b602081525f610fa560208301848661553c565b5f60408236031215615986575f80fd5b61598e615118565b61599783614cba565b81526020808401356001600160401b03808211156159b3575f80fd5b9085019036601f8301126159c5575f80fd5b8135818111156159d7576159d76150dc565b8060051b91506159e884830161513a565b8181529183018401918481019036841115615a01575f80fd5b938501935b83851015615a2b5784359250615a1b83614d93565b8282529385019390850190615a06565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615a985784516001600160a01b03168252938301936001929092019190830190615a6f565b509695505050505050565b60208152815160208201525f602083015160e06040840152615ac9610100840182614f80565b90506040840151601f1980858403016060860152615ae78383614f80565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b178383615a3d565b925060a08601519150808584030160c086015250615b358282615a3d565b91505060c0840151615b5260e08501826001600160401b03169052565b509392505050565b5f8060408385031215615b6b575f80fd5b8251915060208301516001600160401b03811115615b87575f80fd5b615b9385828601615190565b9150509250929050565b6001600160401b03831115615bb457615bb46150dc565b615bc883615bc28354615096565b8361539c565b5f601f841160018114615bf9575f8515615be25750838201355b5f19600387901b1c1916600186901b178355610e80565b5f83815260208120601f198716915b82811015615c285786850135825560209485019460019092019101615c08565b5086821015615c44575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610e6e57610e6e61549b565b5f60208284031215615c79575f80fd5b61333882614e0e565b5f60208284031215615c92575f80fd5b813560ff81168114613338575f80fd5b5f6001600160401b038083168181036154da576154da61549b565b5f60208284031215615ccd575f80fd5b815161333881614cad56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a26469706673582212203e9af5257cc792d5e4d98fcc53cb7ccdd4a6cede1b6a93ef3c38e972203dbf2e64736f6c63430008190033", } // 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 05f59cb0d..7359ff486 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -104,7 +104,7 @@ type ValidatorRegistrationInput 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\":\"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\":[{\"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\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"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\":\"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\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"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\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"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\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"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\":\"DelegatorAdded\",\"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\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"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\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"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_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndValidation\",\"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\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"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\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndValidation\",\"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\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"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\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"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\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"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: "0x608060405234801561000f575f80fd5b50604051615c6e380380615c6e83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615b218061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614afc565b610724565b005b348015610263575f80fd5b50610256610272366004614b37565b610735565b348015610282575f80fd5b50610256610291366004614b4e565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614afc565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614b65565b610aae565b34801561030a575f80fd5b50610256610319366004614bb3565b611033565b348015610329575f80fd5b5061033d610338366004614b37565b6110a7565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614be8565b6110fb565b3480156103d9575f80fd5b506102566103e8366004614afc565b61110e565b3480156103f8575f80fd5b50610256610407366004614c36565b61111a565b348015610417575f80fd5b50610256610426366004614be8565b6111ff565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614bb3565b61120b565b34801561047e575f80fd5b5061049261048d366004614c63565b6114d8565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614b37565b6114f8565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614afc565b61150c565b3480156104fc575f80fd5b5061025661050b366004614be8565b611518565b34801561051b575f80fd5b5061025661052a366004614bb3565b611524565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614c7e565b61175e565b34801561056d575f80fd5b5061025661057c366004614b37565b611840565b34801561058c575f80fd5b5061025661059b366004614be8565b6118d4565b3480156105ab575f80fd5b506102566105ba366004614c36565b6118e0565b6104926105cd366004614cbd565b611ad5565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614b37565b611b09565b348015610649575f80fd5b506104925f80516020615a8c83398151915281565b348015610669575f80fd5b50610256610678366004614b37565b611d62565b61049261068b366004614b37565b611e9f565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614b37565b611ed0565b6040516102b89190614d93565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614c7e565b61201f565b348015610710575f80fd5b5061049261071f366004614e13565b6120e6565b6107308383835f612141565b505050565b5f8181525f80516020615acc8339815191526020526040808220815160e0810190925280545f80516020615a8c83398151915293929190829060ff16600581111561078257610782614d1e565b600581111561079357610793614d1e565b81526020016001820180546107a790614e7e565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614e7e565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614d1e565b146108c5575f8381526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190614fb9565b6040518263ffffffff1660e01b815260040161097f9190614fea565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf9190614ffc565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a568361216d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f61217e565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615a8c8339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b679190614ffc565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba16060850160408601615013565b6001600160a01b031614610be457610bbf6060840160408501615013565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf2606085018561502e565b905090505f805b828163ffffffff161015610e59575f610c15606088018861502e565b8363ffffffff16818110610c2b57610c2b615073565b9050602002810190610c3d9190615087565b610c46906150f2565b80516040519192505f916008880191610c5e9161516d565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc9190600401614fea565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd79161516d565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d159190614ffc565b90508086600801835f0151604051610d2d919061516d565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610d6d90826151c2565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610dec9085615291565b8251604051919550610dfd9161516d565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610e52906152a4565b9050610bf9565b50600483018190556001830154606490610e7d90600160401b900460ff16836152c6565b1015610e9f57604051635943317f60e01b8152600481018290526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ec38761253e565b604001516040518263ffffffff1660e01b8152600401610ee39190614fea565b602060405180830381865af4158015610efe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f229190614ffc565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f5c9190615408565b5f60405180830381865af4158015610f76573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f9d9190810190614fb9565b90505f600282604051610fb0919061516d565b602060405180830381855afa158015610fcb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610fee9190614ffc565b905082811461101a5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506009909201805460ff1916600117905550505050565b61103c82612654565b61105c576040516330efa98b60e01b8152600481018390526024016108bc565b5f61106683611ed0565b519050600281600581111561107d5761107d614d1e565b1461109d578060405163170cc93360e21b81526004016108bc9190614eb0565b6109bf838361267d565b5f806110b161291c565b600301546110bf9084615493565b90508015806110d457506001600160401b0381115b156110f55760405163222d164360e21b8152600481018490526024016108bc565b92915050565b6111078484848461217e565b5050505050565b6109bf8383835f612940565b611122612b62565b5f61112b61291c565b90505f8061113884612b99565b9150915061114582612654565b611151575050506111e6565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b039182169116806111885750806111a6565b5f848152600b86016020526040902080546001600160a01b03191690555b6004835160058111156111bb576111bb614d1e565b036111ca576111ca8185612f4c565b6111e0826111db85604001516114d8565b612f76565b50505050505b6111fc60015f80516020615aac83398151915255565b50565b6109bf84848484612f9c565b5f61121461291c565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561124d5761124d614d1e565b600381111561125e5761125e614d1e565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112d482611ed0565b90506001835160038111156112eb576112eb614d1e565b1461130c578251604051633b0d540d60e21b81526108bc91906004016154b2565b60048151600581111561132157611321614d1e565b036113375761132f86612fc8565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61135c8961253e565b604001516040518263ffffffff1660e01b815260040161137c9190614fea565b606060405180830381865af4158015611397573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113bb91906154cc565b50915091508184146113e857846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b031610806114215750806001600160401b03168560a001516001600160401b0316115b1561144a57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114e161291c565b600301546110f5906001600160401b0384166152c6565b5f61150282611ed0565b6080015192915050565b6107308383835f612f9c565b61110784848484612940565b61152c612b62565b5f61153561291c565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561156e5761156e614d1e565b600381111561157f5761157f614d1e565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156115f8576115f8614d1e565b14611619578051604051633b0d540d60e21b81526108bc91906004016154b2565b60046116288260400151611ed0565b51600581111561163a5761163a614d1e565b14611739575f6116498461253e565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116889190614fea565b606060405180830381865af41580156116a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c791906154cc565b5091509150818460400151146116f35760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561173557604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61174284612fc8565b505061175a60015f80516020615aac83398151915255565b5050565b6001600160a01b0381166117905760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f61179961291c565b5f8481526006820160205260409020549091506001600160a01b031633146117e257335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b336001600160a01b03831603611811575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f61184961291c565b90505f61185583611ed0565b519050600481600581111561186c5761186c614d1e565b1461188c578060405163170cc93360e21b81526004016108bc9190614eb0565b5f8381526006830160205260409020546001600160a01b031633146118b157336117bd565b5f838152600683016020526040902054610730906001600160a01b031684612f4c565b6109bf84848484612141565b5f80516020615a8c8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6119138661253e565b604001516040518263ffffffff1660e01b81526004016119339190614fea565b6040805180830381865af415801561194d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119719190615501565b915091508061199757604051632d07135360e01b815281151560048201526024016108bc565b5f828152600684016020526040902080546119b190614e7e565b90505f036119d55760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078501602052604090205460ff1660058111156119fb576119fb614d1e565b14611a2e575f8281526007840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b5f8281526006840160205260408120611a4691614a50565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611ade612b62565b611aea848484346131d5565b9050611b0260015f80516020615aac83398151915255565b9392505050565b5f611b1261291c565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b4b57611b4b614d1e565b6003811115611b5c57611b5c614d1e565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611bd557611bd5614d1e565b14158015611bf65750600381516003811115611bf357611bf3614d1e565b14155b15611c17578051604051633b0d540d60e21b81526108bc91906004016154b2565b5f611c258260400151611ed0565b905080606001516001600160401b03165f03611c57576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611cc593906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611cdf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d069190810190614fb9565b6040518263ffffffff1660e01b8152600401611d229190614fea565b6020604051808303815f875af1158015611d3e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111079190614ffc565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615a8c8339815191529190611da990614e7e565b90505f03611dcd5760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078301602052604090205460ff166005811115611df357611df3614d1e565b14611e26575f8281526007820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611e5f9190600401615524565b6020604051808303815f875af1158015611e7b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107309190614ffc565b5f611ea8612b62565b611eb382333461332f565b9050611ecb60015f80516020615aac83398151915255565b919050565b611ed8614a87565b5f8281525f80516020615acc833981519152602052604090819020815160e0810190925280545f80516020615a8c833981519152929190829060ff166005811115611f2557611f25614d1e565b6005811115611f3657611f36614d1e565b8152602001600182018054611f4a90614e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7690614e7e565b8015611fc15780601f10611f9857610100808354040283529160200191611fc1565b820191905f5260205f20905b815481529060010190602001808311611fa457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b0381166120515760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f61205a61291c565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461208857336117bd565b336001600160a01b038316036120b7575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615a8c833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb089061212990869086906155ae565b90815260200160405180910390205491505092915050565b61214d8484848461217e565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b61217561356f565b6111fc816135ba565b5f8061218861291c565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156121c1576121c1614d1e565b60038111156121d2576121d2614d1e565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61224882611ed0565b905060028351600381111561225f5761225f614d1e565b14612280578251604051633b0d540d60e21b81526108bc91906004016154b2565b60208301516001600160a01b0316331461231c575f8281526006850160205260409020546001600160a01b031633146122b957336117bd565b5f82815260068501602052604090205460a08201516122e891600160b01b90046001600160401b0316906155bd565b6001600160401b031642101561231c5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b60028151600581111561233157612331614d1e565b036124995760028401546080840151612353916001600160401b0316906155bd565b6001600160401b03164210156123875760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b871561239957612397828861267d565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516123d29184916123cd91906155dd565b613634565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b03909316929092179091556124138461380b565b5f8b8152600887016020526040902081905590506001600160a01b0387161561245f575f8a8152600986016020526040902080546001600160a01b0319166001600160a01b0389161790555b60405183908b907f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed57905f90a3151594506125369350505050565b6004815160058111156124ae576124ae614d1e565b0361251a576124bc8361380b565b5f8a81526008860160205260409020556001600160a01b03861615612504575f898152600985016020526040902080546001600160a01b0319166001600160a01b0388161790555b61250d89612fc8565b6001945050505050612536565b805160405163170cc93360e21b81526108bc9190600401614eb0565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156125a2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526125c991908101906155fd565b91509150806125eb57604051636b2f19e960e01b815260040160405180910390fd5b815115612611578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b03161561264d576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f8061265e61291c565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156126c8573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126ef91908101906155fd565b915091508061271157604051636b2f19e960e01b815260040160405180910390fd5b5f61271a61291c565b6005810154845191925014612748578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b031615612784576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b0316156127c0576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016127fd9190614fea565b6040805180830381865af4158015612817573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061283b919061568d565b915091508188146128625760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b0390811690821611156128f3575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612911565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f8061294a61291c565b90505f612956876139a2565b905061296187612654565b61297057600192505050612536565b5f8781526006830160205260409020546001600160a01b0316331461299557336117bd565b5f87815260068301602052604090205460a08201516129c491600160b01b90046001600160401b0316906155bd565b6001600160401b03168160c001516001600160401b03161015612a0b5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f8615612a2357612a1c888761267d565b9050612a41565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612a66906114d8565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612acf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612af39190614ffc565b90508084600a015f8b81526020019081526020015f205f828254612b179190615291565b90915550506001600160a01b03861615612b54575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615aac833981519152805460011901612b9357604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612ba2614a87565b5f80516020615a8c8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612bd58861253e565b604001516040518263ffffffff1660e01b8152600401612bf59190614fea565b6040805180830381865af4158015612c0f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612c339190615501565b915091508015612c5a57604051632d07135360e01b815281151560048201526024016108bc565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612c8b57612c8b614d1e565b6005811115612c9c57612c9c614d1e565b8152602001600182018054612cb090614e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054612cdc90614e7e565b8015612d275780601f10612cfe57610100808354040283529160200191612d27565b820191905f5260205f20905b815481529060010190602001808311612d0a57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612d9257612d92614d1e565b14158015612db35750600181516005811115612db057612db0614d1e565b14155b15612dd457805160405163170cc93360e21b81526108bc9190600401614eb0565b600381516005811115612de957612de9614d1e565b03612df75760048152612dfc565b600581525b836008018160200151604051612e12919061516d565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612e5657612e56614d1e565b021790555060208201516001820190612e6f90826151c2565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612f1557612f15614d1e565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612f5561291c565b5f838152600a82016020526040812080549190559091506109bf8482613c86565b61175a6001600160a01b03831682613ce4565b60015f80516020615aac83398151915255565b612fa884848484612940565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612fd161291c565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561300a5761300a614d1e565b600381111561301b5761301b614d1e565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091506130b87fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b82608001516130c791906155bd565b6001600160401b03164210156130fb5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b03168061314b57506020820151613169565b5f858152600985016020526040902080546001600160a01b03191690555b5f80613176838886613d77565b9150915061318f85602001516111db87606001516114d8565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131df61291c565b600281015490915061ffff600160401b90910481169086161080613208575061271061ffff8616115b1561322c57604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b039081169085161015613268576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b805483108061327a5750806001015483115b1561329b5760405163222d164360e21b8152600481018490526024016108bc565b825f6132a6826110a7565b90505f6132b38983613e24565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f8061333961291c565b90505f613345846110a7565b90505f61335187611ed0565b905061335c87612654565b61337c576040516330efa98b60e01b8152600481018890526024016108bc565b60028151600581111561339157613391614d1e565b146133b257805160405163170cc93360e21b81526108bc9190600401614eb0565b5f8282608001516133c391906155bd565b905083600201600a9054906101000a90046001600160401b031682604001516133ec91906156b0565b6001600160401b0316816001600160401b0316111561342957604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f806134358a84613634565b915091505f8a8360405160200161346392919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166135b857604051631afcd79f60e31b815260040160405180910390fd5b565b6135c261356f565b6135cb81614349565b6135d3614362565b6111fc606082013560808301356135f060c0850160a08601614c63565b61360060e0860160c087016156db565b613611610100870160e088016156f4565b61010087013561362961014089016101208a01615013565b886101400135614372565b5f8281525f80516020615acc833981519152602052604081206002015481905f80516020615a8c83398151915290600160801b90046001600160401b031661367c8582614557565b5f6136868761477a565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561372f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526137569190810190614fb9565b6040518263ffffffff1660e01b81526004016137729190614fea565b6020604051808303815f875af115801561378e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137b29190614ffc565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061381561291c565b90505f6138258460400151611ed0565b90505f60038251600581111561383d5761383d614d1e565b148061385b575060048251600581111561385957613859614d1e565b145b1561386b575060c08101516138a8565b60028251600581111561388057613880614d1e565b0361388c5750426138a8565b815160405163170cc93360e21b81526108bc9190600401614eb0565b84608001516001600160401b0316816001600160401b0316116138cf57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906138f4906114d8565b60a085015160808901516040808b01515f90815260068a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613975573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906139999190614ffc565b95945050505050565b6139aa614a87565b5f8281525f80516020615acc8339815191526020526040808220815160e0810190925280545f80516020615a8c83398151915293929190829060ff1660058111156139f7576139f7614d1e565b6005811115613a0857613a08614d1e565b8152602001600182018054613a1c90614e7e565b80601f0160208091040260200160405190810160405280929190818152602001828054613a4890614e7e565b8015613a935780601f10613a6a57610100808354040283529160200191613a93565b820191905f5260205f20905b815481529060010190602001808311613a7657829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613b0157613b01614d1e565b14613b34575f8481526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614eb0565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613b7857613b78614d1e565b021790555060208201516001820190613b9190826151c2565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613c2f8582613634565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613cd2575f80fd5b505af115801561132f573d5f803e3d5ffd5b80471015613d075760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613d50576040519150601f19603f3d011682016040523d82523d5f602084013e613d55565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d8261291c565b5f86815260088201602052604081208054908290559192509081908015613e16575f87815260068501602052604090205461271090613dcc90600160a01b900461ffff16836152c6565b613dd69190615493565b91508184600a015f8981526020019081526020015f205f828254613dfa9190615291565b90915550613e0a90508282615714565b9250613e168984613c86565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613e6857604051637fab81e560e01b815260040160405180910390fd5b5f80516020615a8c83398151915242613e876060860160408701614c63565b6001600160401b0316111580613ec15750613ea56202a30042615291565b613eb56060860160408701614c63565b6001600160401b031610155b15613efb57613ed66060850160408601614c63565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b613f10613f0b6060860186615727565b6147ef565b613f20613f0b6080860186615727565b6030613f2f602086018661573b565b905014613f6157613f43602085018561573b565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613f6b848061573b565b90505f03613f9857613f7d848061573b565b604051633e08a12560e11b81526004016108bc92919061577d565b5f60088201613fa7868061573b565b604051613fb59291906155ae565b90815260200160405180910390205414613fee57613fd3848061573b565b60405163a41f772f60e01b81526004016108bc92919061577d565b613ff8835f614557565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce5190602081016140358a8061573b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060209081019061407d908b018b61573b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050908252506020016140c660608b0160408c01614c63565b6001600160401b031681526020016140e160608b018b615727565b6140ea90615790565b81526020016140fc60808b018b615727565b61410590615790565b8152602001886001600160401b03168152506040518263ffffffff1660e01b815260040161413391906158bd565b5f60405180830381865af415801561414d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141749190810190615974565b5f8281526006860160205260409020919350915061419282826151c2565b5081600884016141a2888061573b565b6040516141b09291906155ae565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141ec908590600401614fea565b6020604051808303815f875af1158015614208573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061422c9190614ffc565b5f8481526007860160205260409020805460ff191660011790559050614252878061573b565b5f8581526007870160205260409020600101916142709190836159b7565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806142cf888061573b565b6040516142dd9291906155ae565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b604001602081019061431b9190614c63565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b61435161356f565b614359614958565b6111fc81614960565b61436a61356f565b6135b8614a48565b61437a61356f565b5f61438361291c565b905061ffff8616158061439b575061271061ffff8716115b156143bf57604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156143e35760405163222d164360e21b8152600481018a90526024016108bc565b60ff851615806143f65750600a60ff8616115b156144195760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614480576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f036144a05760405163a733007160e01b815260040160405180910390fd5b816144c157604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615a8c8339815191525f6001600160401b03808416908516111561458b5761458483856155dd565b9050614598565b61459584846155dd565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806145fa5750600184015481516145f6916001600160401b031690615291565b8210155b15614620576001600160401b03831660608201528181526040810151602082015261463f565b828160600181815161463291906155bd565b6001600160401b03169052505b606081015161464f9060646156b0565b602082015160018601546001600160401b03929092169161467a9190600160401b900460ff166152c6565b10156146aa57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b856001600160401b0316816040018181516146c59190615291565b9052506040810180516001600160401b03871691906146e5908390615714565b9052506001840154604082015160649161470a91600160401b90910460ff16906152c6565b1015614731578060400151604051635943317f60e01b81526004016108bc91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615acc8339815191526020526040812060020180545f80516020615a8c83398151915291906008906147c490600160401b90046001600160401b0316615a70565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6147fc6020820182614c36565b63ffffffff1615801561481c5750614817602082018261502e565b151590505b156148635761482e6020820182614c36565b61483b602083018361502e565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b614870602082018261502e565b905061487f6020830183614c36565b63ffffffff1611156148985761482e6020820182614c36565b60015b6148a8602083018361502e565b905081101561175a576148be602083018361502e565b6148c9600184615714565b8181106148d8576148d8615073565b90506020020160208101906148ed9190615013565b6001600160a01b0316614903602084018461502e565b8381811061491357614913615073565b90506020020160208101906149289190615013565b6001600160a01b0316101561495057604051630dbc8d5f60e31b815260040160405180910390fd5b60010161489b565b6135b861356f565b61496861356f565b80355f80516020615a8c833981519152908155601461498d60608401604085016156f4565b60ff1611806149ac57506149a760608301604084016156f4565b60ff16155b156149e0576149c160608301604084016156f4565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b6149f060608301604084016156f4565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614a216040830160208401614c63565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612f8961356f565b508054614a5c90614e7e565b5f825580601f10614a6b575050565b601f0160209004905f5260205f20908101906111fc9190614ac4565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614ad8575f8155600101614ac5565b5090565b80151581146111fc575f80fd5b803563ffffffff81168114611ecb575f80fd5b5f805f60608486031215614b0e575f80fd5b833592506020840135614b2081614adc565b9150614b2e60408501614ae9565b90509250925092565b5f60208284031215614b47575f80fd5b5035919050565b5f6101608284031215614b5f575f80fd5b50919050565b5f8060408385031215614b76575f80fd5b82356001600160401b03811115614b8b575f80fd5b830160808186031215614b9c575f80fd5b9150614baa60208401614ae9565b90509250929050565b5f8060408385031215614bc4575f80fd5b82359150614baa60208401614ae9565b6001600160a01b03811681146111fc575f80fd5b5f805f8060808587031215614bfb575f80fd5b843593506020850135614c0d81614adc565b9250614c1b60408601614ae9565b91506060850135614c2b81614bd4565b939692955090935050565b5f60208284031215614c46575f80fd5b611b0282614ae9565b6001600160401b03811681146111fc575f80fd5b5f60208284031215614c73575f80fd5b8135611b0281614c4f565b5f8060408385031215614c8f575f80fd5b823591506020830135614ca181614bd4565b809150509250929050565b803561ffff81168114611ecb575f80fd5b5f805f60608486031215614ccf575f80fd5b83356001600160401b03811115614ce4575f80fd5b840160a08187031215614cf5575f80fd5b9250614d0360208501614cac565b91506040840135614d1381614c4f565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d4257614d42614d1e565b9052565b5f5b83811015614d60578181015183820152602001614d48565b50505f910152565b5f8151808452614d7f816020860160208601614d46565b601f01601f19169290920160200192915050565b60208152614da5602082018351614d32565b5f602083015160e06040840152614dc0610100840182614d68565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614e24575f80fd5b82356001600160401b0380821115614e3a575f80fd5b818501915085601f830112614e4d575f80fd5b813581811115614e5b575f80fd5b866020828501011115614e6c575f80fd5b60209290920196919550909350505050565b600181811c90821680614e9257607f821691505b602082108103614b5f57634e487b7160e01b5f52602260045260245ffd5b602081016110f58284614d32565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614ef457614ef4614ebe565b60405290565b604080519081016001600160401b0381118282101715614ef457614ef4614ebe565b604051601f8201601f191681016001600160401b0381118282101715614f4457614f44614ebe565b604052919050565b5f6001600160401b03821115614f6457614f64614ebe565b50601f01601f191660200190565b5f82601f830112614f81575f80fd5b8151614f94614f8f82614f4c565b614f1c565b818152846020838601011115614fa8575f80fd5b612536826020830160208701614d46565b5f60208284031215614fc9575f80fd5b81516001600160401b03811115614fde575f80fd5b61253684828501614f72565b602081525f611b026020830184614d68565b5f6020828403121561500c575f80fd5b5051919050565b5f60208284031215615023575f80fd5b8135611b0281614bd4565b5f808335601e19843603018112615043575f80fd5b8301803591506001600160401b0382111561505c575f80fd5b6020019150600581901b3603821315613804575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261509b575f80fd5b9190910192915050565b5f82601f8301126150b4575f80fd5b81356150c2614f8f82614f4c565b8181528460208386010111156150d6575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615102575f80fd5b61510a614ed2565b82356001600160401b0380821115615120575f80fd5b61512c368387016150a5565b83526020850135915080821115615141575f80fd5b5061514e368286016150a5565b602083015250604083013561516281614c4f565b604082015292915050565b5f825161509b818460208701614d46565b601f82111561073057805f5260205f20601f840160051c810160208510156151a35750805b601f840160051c820191505b81811015611107575f81556001016151af565b81516001600160401b038111156151db576151db614ebe565b6151ef816151e98454614e7e565b8461517e565b602080601f831160018114615222575f841561520b5750858301515b5f19600386901b1c1916600185901b17855561132f565b5f85815260208120601f198616915b8281101561525057888601518255948401946001909101908401615231565b508582101561526d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808201808211156110f5576110f561527d565b5f63ffffffff8083168181036152bc576152bc61527d565b6001019392505050565b80820281158282048414176110f5576110f561527d565b5f808335601e198436030181126152f2575f80fd5b83016020810192503590506001600160401b03811115615310575f80fd5b803603821315613804575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156153fb57848303601f19018952813536889003605e19018112615382575f80fd5b8701606061539082806152dd565b8287526153a0838801828461531e565b925050506153b0868301836152dd565b868303888801526153c283828461531e565b9250505060408083013592506153d783614c4f565b6001600160401b03929092169490910193909352978301979083019060010161535d565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561542c81614bd4565b6001600160a01b031660608381019190915283013536849003601e19018112615453575f80fd5b83016020810190356001600160401b0381111561546e575f80fd5b8060051b360382131561547f575f80fd5b60808085015261399960a085018284615346565b5f826154ad57634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106154c6576154c6614d1e565b91905290565b5f805f606084860312156154de575f80fd5b8351925060208401516154f081614c4f565b6040850151909250614d1381614c4f565b5f8060408385031215615512575f80fd5b825191506020830151614ca181614adc565b5f60208083525f845461553681614e7e565b806020870152604060018084165f81146155575760018114615573576155a0565b60ff19851660408a0152604084151560051b8a010195506155a0565b895f5260205f205f5b858110156155975781548b820186015290830190880161557c565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0381811683821601908082111561264d5761264d61527d565b6001600160401b0382811682821603908082111561264d5761264d61527d565b5f806040838503121561560e575f80fd5b82516001600160401b0380821115615624575f80fd5b9084019060608287031215615637575f80fd5b61563f614ed2565b82518152602083015161565181614bd4565b6020820152604083015182811115615667575f80fd5b61567388828601614f72565b6040830152508094505050506020830151614ca181614adc565b5f806040838503121561569e575f80fd5b825191506020830151614ca181614c4f565b6001600160401b038181168382160280821691908281146156d3576156d361527d565b505092915050565b5f602082840312156156eb575f80fd5b611b0282614cac565b5f60208284031215615704575f80fd5b813560ff81168114611b02575f80fd5b818103818111156110f5576110f561527d565b5f8235603e1983360301811261509b575f80fd5b5f808335601e19843603018112615750575f80fd5b8301803591506001600160401b03821115615769575f80fd5b602001915036819003821315613804575f80fd5b602081525f61253660208301848661531e565b5f604082360312156157a0575f80fd5b6157a8614efa565b6157b183614ae9565b81526020808401356001600160401b03808211156157cd575f80fd5b9085019036601f8301126157df575f80fd5b8135818111156157f1576157f1614ebe565b8060051b9150615802848301614f1c565b818152918301840191848101903684111561581b575f80fd5b938501935b83851015615845578435925061583583614bd4565b8282529385019390850190615820565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156158b25784516001600160a01b03168252938301936001929092019190830190615889565b509695505050505050565b60208152815160208201525f602083015160e060408401526158e3610100840182614d68565b90506040840151601f19808584030160608601526159018383614d68565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526159318383615857565b925060a08601519150808584030160c08601525061594f8282615857565b91505060c084015161596c60e08501826001600160401b03169052565b509392505050565b5f8060408385031215615985575f80fd5b8251915060208301516001600160401b038111156159a1575f80fd5b6159ad85828601614f72565b9150509250929050565b6001600160401b038311156159ce576159ce614ebe565b6159e2836159dc8354614e7e565b8361517e565b5f601f841160018114615a13575f85156159fc5750838201355b5f19600387901b1c1916600186901b178355611107565b5f83815260208120601f198716915b82811015615a425786850135825560209485019460019092019101615a22565b5086821015615a5e575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b038083168181036152bc576152bc61527d56fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a26469706673582212200a0df08e1f6df80bf8b34539f8a8bc8bcad8d57344386c0d78bd78c2e37d877d64736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615c3a380380615c3a83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615aed8061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614abf565b610724565b005b348015610263575f80fd5b50610256610272366004614afa565b610735565b348015610282575f80fd5b50610256610291366004614b11565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614abf565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614b28565b610aae565b34801561030a575f80fd5b50610256610319366004614b76565b611033565b348015610329575f80fd5b5061033d610338366004614afa565b6110a7565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614bab565b6110fb565b3480156103d9575f80fd5b506102566103e8366004614abf565b61110e565b3480156103f8575f80fd5b50610256610407366004614bf9565b61111a565b348015610417575f80fd5b50610256610426366004614bab565b6111ff565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614b76565b61120b565b34801561047e575f80fd5b5061049261048d366004614c26565b6114d8565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614afa565b6114f8565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614abf565b61150c565b3480156104fc575f80fd5b5061025661050b366004614bab565b611518565b34801561051b575f80fd5b5061025661052a366004614b76565b611524565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614c41565b61175e565b34801561056d575f80fd5b5061025661057c366004614afa565b611840565b34801561058c575f80fd5b5061025661059b366004614bab565b6118d4565b3480156105ab575f80fd5b506102566105ba366004614bf9565b6118e0565b6104926105cd366004614c80565b611ad5565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614afa565b611b09565b348015610649575f80fd5b506104925f80516020615a5883398151915281565b348015610669575f80fd5b50610256610678366004614afa565b611d62565b61049261068b366004614afa565b611e9f565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614afa565b611ed0565b6040516102b89190614d56565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614c41565b61201f565b348015610710575f80fd5b5061049261071f366004614dd6565b6120e6565b6107308383835f612141565b505050565b5f8181525f80516020615a988339815191526020526040808220815160e0810190925280545f80516020615a5883398151915293929190829060ff16600581111561078257610782614ce1565b600581111561079357610793614ce1565b81526020016001820180546107a790614e41565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614e41565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614ce1565b146108c5575f8381526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e73565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190614f7c565b6040518263ffffffff1660e01b815260040161097f9190614fad565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf9190614fbf565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a568361216d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f61217e565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615a588339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b679190614fbf565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba16060850160408601614fd6565b6001600160a01b031614610be457610bbf6060840160408501614fd6565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf26060850185614ff1565b905090505f805b828163ffffffff161015610e59575f610c156060880188614ff1565b8363ffffffff16818110610c2b57610c2b615036565b9050602002810190610c3d919061504a565b610c46906150b5565b80516040519192505f916008880191610c5e91615130565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc9190600401614fad565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd791615130565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d159190614fbf565b90508086600801835f0151604051610d2d9190615130565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610d6d9082615185565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610dec9085615254565b8251604051919550610dfd91615130565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610e5290615267565b9050610bf9565b50600483018190556001830154606490610e7d90600160401b900460ff1683615289565b1015610e9f57604051635943317f60e01b8152600481018290526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ec3876124b3565b604001516040518263ffffffff1660e01b8152600401610ee39190614fad565b602060405180830381865af4158015610efe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f229190614fbf565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f5c91906153cb565b5f60405180830381865af4158015610f76573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f9d9190810190614f7c565b90505f600282604051610fb09190615130565b602060405180830381855afa158015610fcb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610fee9190614fbf565b905082811461101a5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506009909201805460ff1916600117905550505050565b61103c826125c9565b61105c576040516330efa98b60e01b8152600481018390526024016108bc565b5f61106683611ed0565b519050600281600581111561107d5761107d614ce1565b1461109d578060405163170cc93360e21b81526004016108bc9190614e73565b6109bf83836125f2565b5f806110b1612891565b600301546110bf908461545f565b90508015806110d457506001600160401b0381115b156110f55760405163222d164360e21b8152600481018490526024016108bc565b92915050565b6111078484848461217e565b5050505050565b6109bf8383835f6128b5565b611122612ad7565b5f61112b612891565b90505f8061113884612b0e565b91509150611145826125c9565b611151575050506111e6565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b039182169116806111885750806111a6565b5f848152600b86016020526040902080546001600160a01b03191690555b6004835160058111156111bb576111bb614ce1565b036111ca576111ca8185612ec1565b6111e0826111db85604001516114d8565b612eeb565b50505050505b6111fc60015f80516020615a7883398151915255565b50565b6109bf84848484612f11565b5f611214612891565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561124d5761124d614ce1565b600381111561125e5761125e614ce1565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112d482611ed0565b90506001835160038111156112eb576112eb614ce1565b1461130c578251604051633b0d540d60e21b81526108bc919060040161547e565b60048151600581111561132157611321614ce1565b036113375761132f86612f3d565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61135c896124b3565b604001516040518263ffffffff1660e01b815260040161137c9190614fad565b606060405180830381865af4158015611397573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113bb9190615498565b50915091508184146113e857846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b031610806114215750806001600160401b03168560a001516001600160401b0316115b1561144a57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114e1612891565b600301546110f5906001600160401b038416615289565b5f61150282611ed0565b6080015192915050565b6107308383835f612f11565b611107848484846128b5565b61152c612ad7565b5f611535612891565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561156e5761156e614ce1565b600381111561157f5761157f614ce1565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156115f8576115f8614ce1565b14611619578051604051633b0d540d60e21b81526108bc919060040161547e565b60046116288260400151611ed0565b51600581111561163a5761163a614ce1565b14611739575f611649846124b3565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116889190614fad565b606060405180830381865af41580156116a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c79190615498565b5091509150818460400151146116f35760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561173557604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61174284612f3d565b505061175a60015f80516020615a7883398151915255565b5050565b6001600160a01b0381166117905760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f611799612891565b5f8481526006820160205260409020549091506001600160a01b031633146117e257335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b336001600160a01b03831603611811575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f611849612891565b90505f61185583611ed0565b519050600481600581111561186c5761186c614ce1565b1461188c578060405163170cc93360e21b81526004016108bc9190614e73565b5f8381526006830160205260409020546001600160a01b031633146118b157336117bd565b5f838152600683016020526040902054610730906001600160a01b031684612ec1565b6109bf84848484612141565b5f80516020615a588339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f611913866124b3565b604001516040518263ffffffff1660e01b81526004016119339190614fad565b6040805180830381865af415801561194d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197191906154cd565b915091508061199757604051632d07135360e01b815281151560048201526024016108bc565b5f828152600684016020526040902080546119b190614e41565b90505f036119d55760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078501602052604090205460ff1660058111156119fb576119fb614ce1565b14611a2e575f8281526007840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e73565b5f8281526006840160205260408120611a4691614a13565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611ade612ad7565b611aea8484843461314a565b9050611b0260015f80516020615a7883398151915255565b9392505050565b5f611b12612891565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b4b57611b4b614ce1565b6003811115611b5c57611b5c614ce1565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611bd557611bd5614ce1565b14158015611bf65750600381516003811115611bf357611bf3614ce1565b14155b15611c17578051604051633b0d540d60e21b81526108bc919060040161547e565b5f611c258260400151611ed0565b905080606001516001600160401b03165f03611c57576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611cc593906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611cdf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d069190810190614f7c565b6040518263ffffffff1660e01b8152600401611d229190614fad565b6020604051808303815f875af1158015611d3e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111079190614fbf565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615a588339815191529190611da990614e41565b90505f03611dcd5760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078301602052604090205460ff166005811115611df357611df3614ce1565b14611e26575f8281526007820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e73565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611e5f91906004016154f0565b6020604051808303815f875af1158015611e7b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107309190614fbf565b5f611ea8612ad7565b611eb38233346132a4565b9050611ecb60015f80516020615a7883398151915255565b919050565b611ed8614a4a565b5f8281525f80516020615a98833981519152602052604090819020815160e0810190925280545f80516020615a58833981519152929190829060ff166005811115611f2557611f25614ce1565b6005811115611f3657611f36614ce1565b8152602001600182018054611f4a90614e41565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7690614e41565b8015611fc15780601f10611f9857610100808354040283529160200191611fc1565b820191905f5260205f20905b815481529060010190602001808311611fa457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b0381166120515760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f61205a612891565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461208857336117bd565b336001600160a01b038316036120b7575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615a58833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890612129908690869061557a565b90815260200160405180910390205491505092915050565b61214d8484848461217e565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b6121756134e4565b6111fc8161352f565b5f80612188612891565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156121c1576121c1614ce1565b60038111156121d2576121d2614ce1565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61224882611ed0565b905060028351600381111561225f5761225f614ce1565b14612280578251604051633b0d540d60e21b81526108bc919060040161547e565b60208301516001600160a01b0316331461231c575f8281526006850160205260409020546001600160a01b031633146122b957336117bd565b5f82815260068501602052604090205460a08201516122e891600160b01b90046001600160401b031690615589565b6001600160401b031642101561231c5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b60028151600581111561233157612331614ce1565b036124535760028401546080840151612353916001600160401b031690615589565b6001600160401b03164210156123875760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b87156123995761239782886125f2565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516123d29184916123cd91906155a9565b6135a9565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561241584888c613780565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506124ab9350505050565b60048151600581111561246857612468614ce1565b0361248f5761247883878b613780565b5061248289612f3d565b60019450505050506124ab565b805160405163170cc93360e21b81526108bc9190600401614e73565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612517573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261253e91908101906155c9565b915091508061256057604051636b2f19e960e01b815260040160405180910390fd5b815115612586578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b0316156125c2576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f806125d3612891565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa15801561263d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261266491908101906155c9565b915091508061268657604051636b2f19e960e01b815260040160405180910390fd5b5f61268f612891565b60058101548451919250146126bd578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b0316156126f9576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b031615612735576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016127729190614fad565b6040805180830381865af415801561278c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127b09190615659565b915091508188146127d75760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b039081169082161115612868575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612886565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806128bf612891565b90505f6128cb87613965565b90506128d6876125c9565b6128e5576001925050506124ab565b5f8781526006830160205260409020546001600160a01b0316331461290a57336117bd565b5f87815260068301602052604090205460a082015161293991600160b01b90046001600160401b031690615589565b6001600160401b03168160c001516001600160401b031610156129805760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f86156129985761299188876125f2565b90506129b6565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906129db906114d8565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612a44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a689190614fbf565b90508084600a015f8b81526020019081526020015f205f828254612a8c9190615254565b90915550506001600160a01b03861615612ac9575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615a78833981519152805460011901612b0857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612b17614a4a565b5f80516020615a588339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612b4a886124b3565b604001516040518263ffffffff1660e01b8152600401612b6a9190614fad565b6040805180830381865af4158015612b84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba891906154cd565b915091508015612bcf57604051632d07135360e01b815281151560048201526024016108bc565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612c0057612c00614ce1565b6005811115612c1157612c11614ce1565b8152602001600182018054612c2590614e41565b80601f0160208091040260200160405190810160405280929190818152602001828054612c5190614e41565b8015612c9c5780601f10612c7357610100808354040283529160200191612c9c565b820191905f5260205f20905b815481529060010190602001808311612c7f57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612d0757612d07614ce1565b14158015612d285750600181516005811115612d2557612d25614ce1565b14155b15612d4957805160405163170cc93360e21b81526108bc9190600401614e73565b600381516005811115612d5e57612d5e614ce1565b03612d6c5760048152612d71565b600581525b836008018160200151604051612d879190615130565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612dcb57612dcb614ce1565b021790555060208201516001820190612de49082615185565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612e8a57612e8a614ce1565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612eca612891565b5f838152600a82016020526040812080549190559091506109bf8482613c49565b61175a6001600160a01b03831682613ca7565b60015f80516020615a7883398151915255565b612f1d848484846128b5565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612f46612891565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f7f57612f7f614ce1565b6003811115612f9057612f90614ce1565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015281015190915061302d7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b826080015161303c9190615589565b6001600160401b03164210156130705760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130c0575060208201516130de565b5f858152600985016020526040902080546001600160a01b03191690555b5f806130eb838886613d3a565b9150915061310485602001516111db87606001516114d8565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80613154612891565b600281015490915061ffff600160401b9091048116908616108061317d575061271061ffff8616115b156131a157604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b0390811690851610156131dd576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b80548310806131ef5750806001015483115b156132105760405163222d164360e21b8152600481018490526024016108bc565b825f61321b826110a7565b90505f6132288983613de7565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f806132ae612891565b90505f6132ba846110a7565b90505f6132c687611ed0565b90506132d1876125c9565b6132f1576040516330efa98b60e01b8152600481018890526024016108bc565b60028151600581111561330657613306614ce1565b1461332757805160405163170cc93360e21b81526108bc9190600401614e73565b5f8282608001516133389190615589565b905083600201600a9054906101000a90046001600160401b03168260400151613361919061567c565b6001600160401b0316816001600160401b0316111561339e57604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f806133aa8a846135a9565b915091505f8a836040516020016133d892919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661352d57604051631afcd79f60e31b815260040160405180910390fd5b565b6135376134e4565b6135408161430c565b613548614325565b6111fc6060820135608083013561356560c0850160a08601614c26565b61357560e0860160c087016156a7565b613586610100870160e088016156c0565b61010087013561359e61014089016101208a01614fd6565b886101400135614335565b5f8281525f80516020615a98833981519152602052604081206002015481905f80516020615a5883398151915290600160801b90046001600160401b03166135f1858261451a565b5f6135fb8761473d565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156136a4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136cb9190810190614f7c565b6040518263ffffffff1660e01b81526004016136e79190614fad565b6020604051808303815f875af1158015613703573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137279190614fbf565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061378a612891565b90505f61379a8660400151611ed0565b90505f6003825160058111156137b2576137b2614ce1565b14806137d057506004825160058111156137ce576137ce614ce1565b145b156137e0575060c081015161381d565b6002825160058111156137f5576137f5614ce1565b0361380157504261381d565b815160405163170cc93360e21b81526108bc9190600401614e73565b86608001516001600160401b0316816001600160401b031611613845575f9350505050611b02565b600483015460608801515f916001600160a01b031690634f22429f9061386a906114d8565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa1580156138eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061390f9190614fbf565b5f878152600886016020526040902081905590506001600160a01b03871615612886575f868152600985016020526040902080546001600160a01b0319166001600160a01b038916179055979650505050505050565b61396d614a4a565b5f8281525f80516020615a988339815191526020526040808220815160e0810190925280545f80516020615a5883398151915293929190829060ff1660058111156139ba576139ba614ce1565b60058111156139cb576139cb614ce1565b81526020016001820180546139df90614e41565b80601f0160208091040260200160405190810160405280929190818152602001828054613a0b90614e41565b8015613a565780601f10613a2d57610100808354040283529160200191613a56565b820191905f5260205f20905b815481529060010190602001808311613a3957829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613ac457613ac4614ce1565b14613af7575f8481526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e73565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613b3b57613b3b614ce1565b021790555060208201516001820190613b549082615185565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613bf285826135a9565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613c95575f80fd5b505af115801561132f573d5f803e3d5ffd5b80471015613cca5760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613d13576040519150601f19603f3d011682016040523d82523d5f602084013e613d18565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d45612891565b5f86815260088201602052604081208054908290559192509081908015613dd9575f87815260068501602052604090205461271090613d8f90600160a01b900461ffff1683615289565b613d99919061545f565b91508184600a015f8981526020019081526020015f205f828254613dbd9190615254565b90915550613dcd905082826156e0565b9250613dd98984613c49565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613e2b57604051637fab81e560e01b815260040160405180910390fd5b5f80516020615a5883398151915242613e4a6060860160408701614c26565b6001600160401b0316111580613e845750613e686202a30042615254565b613e786060860160408701614c26565b6001600160401b031610155b15613ebe57613e996060850160408601614c26565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b613ed3613ece60608601866156f3565b6147b2565b613ee3613ece60808601866156f3565b6030613ef26020860186615707565b905014613f2457613f066020850185615707565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613f2e8480615707565b90505f03613f5b57613f408480615707565b604051633e08a12560e11b81526004016108bc929190615749565b5f60088201613f6a8680615707565b604051613f7892919061557a565b90815260200160405180910390205414613fb157613f968480615707565b60405163a41f772f60e01b81526004016108bc929190615749565b613fbb835f61451a565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613ff88a80615707565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190614040908b018b615707565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060200161408960608b0160408c01614c26565b6001600160401b031681526020016140a460608b018b6156f3565b6140ad9061575c565b81526020016140bf60808b018b6156f3565b6140c89061575c565b8152602001886001600160401b03168152506040518263ffffffff1660e01b81526004016140f69190615889565b5f60405180830381865af4158015614110573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141379190810190615940565b5f828152600686016020526040902091935091506141558282615185565b5081600884016141658880615707565b60405161417392919061557a565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141af908590600401614fad565b6020604051808303815f875af11580156141cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141ef9190614fbf565b5f8481526007860160205260409020805460ff1916600117905590506142158780615707565b5f858152600787016020526040902060010191614233919083615983565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806142928880615707565b6040516142a092919061557a565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b60400160208101906142de9190614c26565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b6143146134e4565b61431c61491b565b6111fc81614923565b61432d6134e4565b61352d614a0b565b61433d6134e4565b5f614346612891565b905061ffff8616158061435e575061271061ffff8716115b1561438257604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156143a65760405163222d164360e21b8152600481018a90526024016108bc565b60ff851615806143b95750600a60ff8616115b156143dc5760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614443576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f036144635760405163a733007160e01b815260040160405180910390fd5b8161448457604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615a588339815191525f6001600160401b03808416908516111561454e5761454783856155a9565b905061455b565b61455884846155a9565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806145bd5750600184015481516145b9916001600160401b031690615254565b8210155b156145e3576001600160401b038316606082015281815260408101516020820152614602565b82816060018181516145f59190615589565b6001600160401b03169052505b606081015161461290606461567c565b602082015160018601546001600160401b03929092169161463d9190600160401b900460ff16615289565b101561466d57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b856001600160401b0316816040018181516146889190615254565b9052506040810180516001600160401b03871691906146a89083906156e0565b905250600184015460408201516064916146cd91600160401b90910460ff1690615289565b10156146f4578060400151604051635943317f60e01b81526004016108bc91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615a988339815191526020526040812060020180545f80516020615a58833981519152919060089061478790600160401b90046001600160401b0316615a3c565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6147bf6020820182614bf9565b63ffffffff161580156147df57506147da6020820182614ff1565b151590505b15614826576147f16020820182614bf9565b6147fe6020830183614ff1565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b6148336020820182614ff1565b90506148426020830183614bf9565b63ffffffff16111561485b576147f16020820182614bf9565b60015b61486b6020830183614ff1565b905081101561175a576148816020830183614ff1565b61488c6001846156e0565b81811061489b5761489b615036565b90506020020160208101906148b09190614fd6565b6001600160a01b03166148c66020840184614ff1565b838181106148d6576148d6615036565b90506020020160208101906148eb9190614fd6565b6001600160a01b0316101561491357604051630dbc8d5f60e31b815260040160405180910390fd5b60010161485e565b61352d6134e4565b61492b6134e4565b80355f80516020615a58833981519152908155601461495060608401604085016156c0565b60ff16118061496f575061496a60608301604084016156c0565b60ff16155b156149a35761498460608301604084016156c0565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b6149b360608301604084016156c0565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149e46040830160208401614c26565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612efe6134e4565b508054614a1f90614e41565b5f825580601f10614a2e575050565b601f0160209004905f5260205f20908101906111fc9190614a87565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614a9b575f8155600101614a88565b5090565b80151581146111fc575f80fd5b803563ffffffff81168114611ecb575f80fd5b5f805f60608486031215614ad1575f80fd5b833592506020840135614ae381614a9f565b9150614af160408501614aac565b90509250925092565b5f60208284031215614b0a575f80fd5b5035919050565b5f6101608284031215614b22575f80fd5b50919050565b5f8060408385031215614b39575f80fd5b82356001600160401b03811115614b4e575f80fd5b830160808186031215614b5f575f80fd5b9150614b6d60208401614aac565b90509250929050565b5f8060408385031215614b87575f80fd5b82359150614b6d60208401614aac565b6001600160a01b03811681146111fc575f80fd5b5f805f8060808587031215614bbe575f80fd5b843593506020850135614bd081614a9f565b9250614bde60408601614aac565b91506060850135614bee81614b97565b939692955090935050565b5f60208284031215614c09575f80fd5b611b0282614aac565b6001600160401b03811681146111fc575f80fd5b5f60208284031215614c36575f80fd5b8135611b0281614c12565b5f8060408385031215614c52575f80fd5b823591506020830135614c6481614b97565b809150509250929050565b803561ffff81168114611ecb575f80fd5b5f805f60608486031215614c92575f80fd5b83356001600160401b03811115614ca7575f80fd5b840160a08187031215614cb8575f80fd5b9250614cc660208501614c6f565b91506040840135614cd681614c12565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d0557614d05614ce1565b9052565b5f5b83811015614d23578181015183820152602001614d0b565b50505f910152565b5f8151808452614d42816020860160208601614d09565b601f01601f19169290920160200192915050565b60208152614d68602082018351614cf5565b5f602083015160e06040840152614d83610100840182614d2b565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614de7575f80fd5b82356001600160401b0380821115614dfd575f80fd5b818501915085601f830112614e10575f80fd5b813581811115614e1e575f80fd5b866020828501011115614e2f575f80fd5b60209290920196919550909350505050565b600181811c90821680614e5557607f821691505b602082108103614b2257634e487b7160e01b5f52602260045260245ffd5b602081016110f58284614cf5565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614eb757614eb7614e81565b60405290565b604080519081016001600160401b0381118282101715614eb757614eb7614e81565b604051601f8201601f191681016001600160401b0381118282101715614f0757614f07614e81565b604052919050565b5f6001600160401b03821115614f2757614f27614e81565b50601f01601f191660200190565b5f82601f830112614f44575f80fd5b8151614f57614f5282614f0f565b614edf565b818152846020838601011115614f6b575f80fd5b6124ab826020830160208701614d09565b5f60208284031215614f8c575f80fd5b81516001600160401b03811115614fa1575f80fd5b6124ab84828501614f35565b602081525f611b026020830184614d2b565b5f60208284031215614fcf575f80fd5b5051919050565b5f60208284031215614fe6575f80fd5b8135611b0281614b97565b5f808335601e19843603018112615006575f80fd5b8301803591506001600160401b0382111561501f575f80fd5b6020019150600581901b3603821315613779575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261505e575f80fd5b9190910192915050565b5f82601f830112615077575f80fd5b8135615085614f5282614f0f565b818152846020838601011115615099575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150c5575f80fd5b6150cd614e95565b82356001600160401b03808211156150e3575f80fd5b6150ef36838701615068565b83526020850135915080821115615104575f80fd5b5061511136828601615068565b602083015250604083013561512581614c12565b604082015292915050565b5f825161505e818460208701614d09565b601f82111561073057805f5260205f20601f840160051c810160208510156151665750805b601f840160051c820191505b81811015611107575f8155600101615172565b81516001600160401b0381111561519e5761519e614e81565b6151b2816151ac8454614e41565b84615141565b602080601f8311600181146151e5575f84156151ce5750858301515b5f19600386901b1c1916600185901b17855561132f565b5f85815260208120601f198616915b82811015615213578886015182559484019460019091019084016151f4565b508582101561523057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808201808211156110f5576110f5615240565b5f63ffffffff80831681810361527f5761527f615240565b6001019392505050565b80820281158282048414176110f5576110f5615240565b5f808335601e198436030181126152b5575f80fd5b83016020810192503590506001600160401b038111156152d3575f80fd5b803603821315613779575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156153be57848303601f19018952813536889003605e19018112615345575f80fd5b8701606061535382806152a0565b82875261536383880182846152e1565b92505050615373868301836152a0565b868303888801526153858382846152e1565b92505050604080830135925061539a83614c12565b6001600160401b039290921694909101939093529783019790830190600101615320565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356153ef81614b97565b6001600160a01b031660608381019190915283013536849003601e19018112615416575f80fd5b83016020810190356001600160401b03811115615431575f80fd5b8060051b3603821315615442575f80fd5b60808085015261545660a085018284615309565b95945050505050565b5f8261547957634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061549257615492614ce1565b91905290565b5f805f606084860312156154aa575f80fd5b8351925060208401516154bc81614c12565b6040850151909250614cd681614c12565b5f80604083850312156154de575f80fd5b825191506020830151614c6481614a9f565b5f60208083525f845461550281614e41565b806020870152604060018084165f8114615523576001811461553f5761556c565b60ff19851660408a0152604084151560051b8a0101955061556c565b895f5260205f205f5b858110156155635781548b8201860152908301908801615548565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156125c2576125c2615240565b6001600160401b038281168282160390808211156125c2576125c2615240565b5f80604083850312156155da575f80fd5b82516001600160401b03808211156155f0575f80fd5b9084019060608287031215615603575f80fd5b61560b614e95565b82518152602083015161561d81614b97565b6020820152604083015182811115615633575f80fd5b61563f88828601614f35565b6040830152508094505050506020830151614c6481614a9f565b5f806040838503121561566a575f80fd5b825191506020830151614c6481614c12565b6001600160401b0381811683821602808216919082811461569f5761569f615240565b505092915050565b5f602082840312156156b7575f80fd5b611b0282614c6f565b5f602082840312156156d0575f80fd5b813560ff81168114611b02575f80fd5b818103818111156110f5576110f5615240565b5f8235603e1983360301811261505e575f80fd5b5f808335601e1984360301811261571c575f80fd5b8301803591506001600160401b03821115615735575f80fd5b602001915036819003821315613779575f80fd5b602081525f6124ab6020830184866152e1565b5f6040823603121561576c575f80fd5b615774614ebd565b61577d83614aac565b81526020808401356001600160401b0380821115615799575f80fd5b9085019036601f8301126157ab575f80fd5b8135818111156157bd576157bd614e81565b8060051b91506157ce848301614edf565b81815291830184019184810190368411156157e7575f80fd5b938501935b83851015615811578435925061580183614b97565b82825293850193908501906157ec565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b8083101561587e5784516001600160a01b03168252938301936001929092019190830190615855565b509695505050505050565b60208152815160208201525f602083015160e060408401526158af610100840182614d2b565b90506040840151601f19808584030160608601526158cd8383614d2b565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526158fd8383615823565b925060a08601519150808584030160c08601525061591b8282615823565b91505060c084015161593860e08501826001600160401b03169052565b509392505050565b5f8060408385031215615951575f80fd5b8251915060208301516001600160401b0381111561596d575f80fd5b61597985828601614f35565b9150509250929050565b6001600160401b0383111561599a5761599a614e81565b6159ae836159a88354614e41565b83615141565b5f601f8411600181146159df575f85156159c85750838201355b5f19600387901b1c1916600186901b178355611107565b5f83815260208120601f198716915b82811015615a0e57868501358255602094850194600190920191016159ee565b5086821015615a2a575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b0380831681810361527f5761527f61524056fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a26469706673582212204c1a7d94b509d38fc318a61418a702424651ca97c0a7c9db8400f184e3b73e8764736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index d26c9f763..e8d3cc059 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -628,7 +628,9 @@ abstract contract PoSValidatorManager is bool includeUptimeProof, uint32 messageIndex ) external { - _initializeEndDelegationWithCheck(delegationID, includeUptimeProof, messageIndex, address(0)); + _initializeEndDelegationWithCheck( + delegationID, includeUptimeProof, messageIndex, address(0) + ); } /** @@ -741,11 +743,8 @@ abstract contract PoSValidatorManager is ($._delegatorStakes[delegationID].endingNonce,) = _setValidatorWeight(validationID, validator.weight - delegator.weight); - uint256 reward = _calculateDelegationReward(delegator); - $._redeemableDelegatorRewards[delegationID] = reward; - if (rewardRecipient != address(0)) { - $._delegatorRewardRecipients[delegationID] = rewardRecipient; - } + uint256 reward = + _calculateAndSetDelegationReward(delegator, rewardRecipient, delegationID); emit DelegatorRemovalInitialized({ delegationID: delegationID, @@ -753,11 +752,7 @@ abstract contract PoSValidatorManager is }); return (reward > 0); } else if (validator.status == ValidatorStatus.Completed) { - $._redeemableDelegatorRewards[delegationID] = _calculateDelegationReward(delegator); - if (rewardRecipient != address(0)) { - $._delegatorRewardRecipients[delegationID] = rewardRecipient; - } - + _calculateAndSetDelegationReward(delegator, rewardRecipient, delegationID); _completeEndDelegation(delegationID); // If the validator has completed, then no further uptimes may be submitted, so we always // end the delegation. @@ -768,11 +763,12 @@ abstract contract PoSValidatorManager is } /// @dev Calculates the reward owed to the delegator based on the state of the delegator and its corresponding validator. - function _calculateDelegationReward(Delegator memory delegator) - private - view - returns (uint256) - { + /// then set the reward and reward recipient in the storage. + function _calculateAndSetDelegationReward( + Delegator memory delegator, + address rewardRecipient, + bytes32 delegationID + ) private returns (uint256) { PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); Validator memory validator = getValidator(delegator.validationID); @@ -794,13 +790,21 @@ abstract contract PoSValidatorManager is return 0; } - return $._rewardCalculator.calculateReward({ + uint256 reward = $._rewardCalculator.calculateReward({ stakeAmount: weightToValue(delegator.weight), validatorStartTime: validator.startedAt, stakingStartTime: delegator.startedAt, stakingEndTime: delegationEndTime, uptimeSeconds: $._posValidatorInfo[delegator.validationID].uptimeSeconds }); + + $._redeemableDelegatorRewards[delegationID] = reward; + + if (rewardRecipient != address(0)) { + $._delegatorRewardRecipients[delegationID] = rewardRecipient; + } + + return reward; } /** From 4af5b9b0e46f35c8e05c1bc21d949262d6eae5fc Mon Sep 17 00:00:00 2001 From: Richard Pringle Date: Thu, 21 Nov 2024 14:48:01 -0500 Subject: [PATCH 09/10] Add docs to new validator-manager interface methods --- .../ERC20TokenStakingManager.go | 2 +- .../NativeTokenStakingManager.go | 2 +- .../interfaces/IPoSValidatorManager.sol | 11 +++++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index bb000f102..2b3942685 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -104,7 +104,7 @@ type ValidatorRegistrationInput 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\":\"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\":[{\"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\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"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\":\"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\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"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\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"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\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"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\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"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\":\"DelegatorAdded\",\"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\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"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\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndValidation\",\"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\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"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\":\"structPoSValidatorManagerSettings\",\"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\":\"initializeDelegatorRegistration\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndValidation\",\"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\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"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\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"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\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"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: "0x608060405234801561000f575f80fd5b50604051615edb380380615edb83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d8e8061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061023f575f3560e01c806380dd672f11610135578063b771b3bc116100b4578063d5f20ff611610079578063d5f20ff614610516578063df93d8de14610536578063e4a63c4014610540578063fb8b11dd14610554578063fd7ac5e714610567575f80fd5b8063b771b3bc146104ae578063ba3a4b97146104d4578063bc5fbfec146104e7578063bee0a03f146104fb578063c974d1b61461050e575f80fd5b80639e1bc4ef116100fa5780639e1bc4ef1461044e5780639e478eea14610461578063a3a65e4814610474578063a9778a7a146102ee578063afb9809614610487575f80fd5b806380dd672f146103fa5780638280a25a1461040d5780638ef34c981461041557806393e24598146104285780639ae064471461043b575f80fd5b8063467ef06f116101c1578063620658561161018657806362065856146103a757806366435abf146103ba578063732214f8146103cd57806376f78621146103d45780637d8d2f77146103e7575f80fd5b8063467ef06f146103305780634bee0040146103435780635dd6a6cb1461036457806360305d621461037757806360ad778414610394575f80fd5b806325e1c7761161020757806325e1c776146102b05780632e2194d8146102c357806335455ded146102ee57806337b9be8f1461030a5780633a1cfff61461031d575f80fd5b80630118acc4146102435780630322ed9814610258578063151d30d11461026b5780631ec447241461028a57806320d91b7a1461029d575b5f80fd5b610256610251366004614cd2565b61057a565b005b610256610266366004614d0d565b61058b565b610273600a81565b60405160ff90911681526020015b60405180910390f35b610256610298366004614cd2565b61081b565b6102566102ab366004614d24565b610827565b6102566102be366004614d72565b610dac565b6102d66102d1366004614d0d565b610e20565b6040516001600160401b039091168152602001610281565b6102f761271081565b60405161ffff9091168152602001610281565b610256610318366004614da7565b610e74565b61025661032b366004614cd2565b610e87565b61025661033e366004614df5565b610e93565b610356610351366004614e33565b610f78565b604051908152602001610281565b610256610372366004614da7565b610fad565b61037f601481565b60405163ffffffff9091168152602001610281565b6102566103a2366004614d72565b610fb9565b6103566103b5366004614e9a565b611286565b6102d66103c8366004614d0d565b6112a6565b6103565f81565b6102566103e2366004614cd2565b6112ba565b6102566103f5366004614da7565b6112c6565b610256610408366004614d72565b6112d2565b610273603081565b610256610423366004614eb5565b61150c565b610256610436366004614d0d565b6115ee565b610256610449366004614da7565b611682565b61035661045c366004614ee3565b61168e565b61025661046f366004614f03565b6116ba565b610256610482366004614df5565b611799565b6103567f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104bc6005600160991b0181565b6040516001600160a01b039091168152602001610281565b6102566104e2366004614d0d565b61198e565b6103565f80516020615cf983398151915281565b610256610509366004614d0d565b611be7565b610273601481565b610529610524366004614d0d565b611d24565b6040516102819190614fab565b6102d66202a30081565b6103565f80516020615cd983398151915281565b610256610562366004614eb5565b611e73565b61035661057536600461502b565b611f3a565b6105868383835f611f95565b505050565b5f8181525f80516020615d398339815191526020526040808220815160e0810190925280545f80516020615cf983398151915293929190829060ff1660058111156105d8576105d8614f36565b60058111156105e9576105e9614f36565b81526020016001820180546105fd90615096565b80601f016020809104026020016040519081016040528092919081815260200182805461062990615096565b80156106745780601f1061064b57610100808354040283529160200191610674565b820191905f5260205f20905b81548152906001019060200180831161065757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156106df576106df614f36565b1461071b575f8381526007830160205260409081902054905163170cc93360e21b81526107129160ff16906004016150ce565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610792573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107b991908101906151d7565b6040518263ffffffff1660e01b81526004016107d59190615208565b6020604051808303815f875af11580156107f1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610815919061521a565b50505050565b6108158383835f611fc1565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615cf98339815191529060ff161561087957604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e0919061521a565b836020013514610909576040516372b0a7e760e11b815260208401356004820152602401610712565b3061091a6060850160408601615231565b6001600160a01b03161461095d576109386060840160408501615231565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610712565b5f61096b606085018561524c565b905090505f805b828163ffffffff161015610bd2575f61098e606088018861524c565b8363ffffffff168181106109a4576109a4615291565b90506020028101906109b691906152a5565b6109bf90615310565b80516040519192505f9160088801916109d79161538b565b90815260200160405180910390205414610a0757805160405163a41f772f60e01b81526107129190600401615208565b5f6002885f013584604051602001610a3692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a509161538b565b602060405180830381855afa158015610a6b573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a8e919061521a565b90508086600801835f0151604051610aa6919061538b565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610ae690826153e0565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610b6590856154af565b8251604051919550610b769161538b565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610bcb906154c2565b9050610972565b50600483018190556001830154606490610bf690600160401b900460ff16836154e4565b1015610c1857604051635943317f60e01b815260048101829052602401610712565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c3c876122ee565b604001516040518263ffffffff1660e01b8152600401610c5c9190615208565b602060405180830381865af4158015610c77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9b919061521a565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610cd59190615626565b5f60405180830381865af4158015610cef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d1691908101906151d7565b90505f600282604051610d29919061538b565b602060405180830381855afa158015610d44573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d67919061521a565b9050828114610d935760405163baaea89d60e01b81526004810182905260248101849052604401610712565b5050506009909201805460ff1916600117905550505050565b610db582612404565b610dd5576040516330efa98b60e01b815260048101839052602401610712565b5f610ddf83611d24565b5190506002816005811115610df657610df6614f36565b14610e16578060405163170cc93360e21b815260040161071291906150ce565b610815838361242d565b5f80610e2a6126cc565b60030154610e3890846156ba565b9050801580610e4d57506001600160401b0381115b15610e6e5760405163222d164360e21b815260048101849052602401610712565b92915050565b610e8084848484611fc1565b5050505050565b6108158383835f6126f0565b610e9b612912565b5f610ea46126cc565b90505f80610eb184612949565b91509150610ebe82612404565b610eca57505050610f5f565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b03918216911680610f01575080610f1f565b5f848152600b86016020526040902080546001600160a01b03191690555b600483516005811115610f3457610f34614f36565b03610f4357610f438185612cfc565b610f5982610f548560400151611286565b612d26565b50505050505b610f7560015f80516020615d1983398151915255565b50565b5f610f81612912565b610f8d85858585612d5c565b9050610fa560015f80516020615d1983398151915255565b949350505050565b61081584848484612ec1565b5f610fc26126cc565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610ffb57610ffb614f36565b600381111561100c5761100c614f36565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61108282611d24565b905060018351600381111561109957611099614f36565b146110ba578251604051633b0d540d60e21b815261071291906004016156d9565b6004815160058111156110cf576110cf614f36565b036110e5576110dd86612eed565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61110a896122ee565b604001516040518263ffffffff1660e01b815260040161112a9190615208565b606060405180830381865af4158015611145573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116991906156f3565b509150915081841461119657846040015160405163089938b360e11b815260040161071291815260200190565b806001600160401b031683606001516001600160401b031610806111cf5750806001600160401b03168560a001516001600160401b0316115b156111f857604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61128f6126cc565b60030154610e6e906001600160401b0384166154e4565b5f6112b082611d24565b6080015192915050565b6105868383835f612ec1565b610e80848484846126f0565b6112da612912565b5f6112e36126cc565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561131c5761131c614f36565b600381111561132d5761132d614f36565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113a6576113a6614f36565b146113c7578051604051633b0d540d60e21b815261071291906004016156d9565b60046113d68260400151611d24565b5160058111156113e8576113e8614f36565b146114e7575f6113f7846122ee565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016114369190615208565b606060405180830381865af4158015611451573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147591906156f3565b5091509150818460400151146114a15760405163089938b360e11b815260048101839052602401610712565b806001600160401b03168460c001516001600160401b031611156114e357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5050505b6114f084612eed565b505061150860015f80516020615d1983398151915255565b5050565b6001600160a01b03811661153e5760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f6115476126cc565b5f8481526006820160205260409020549091506001600160a01b0316331461159057335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610712565b336001600160a01b038316036115bf575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f6115f76126cc565b90505f61160383611d24565b519050600481600581111561161a5761161a614f36565b1461163a578060405163170cc93360e21b815260040161071291906150ce565b5f8381526006830160205260409020546001600160a01b0316331461165f573361156b565b5f838152600683016020526040902054610586906001600160a01b031684612cfc565b61081584848484611f95565b5f611697612912565b6116a28333846130fa565b9050610e6e60015f80516020615d1983398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611703575080546001600160401b03808416911610155b156117215760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561174c848461333f565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615cf98339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117cc866122ee565b604001516040518263ffffffff1660e01b81526004016117ec9190615208565b6040805180830381865af4158015611806573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061182a9190615733565b915091508061185057604051632d07135360e01b81528115156004820152602401610712565b5f8281526006840160205260409020805461186a90615096565b90505f0361188e5760405163089938b360e11b815260048101839052602401610712565b60015f83815260078501602052604090205460ff1660058111156118b4576118b4614f36565b146118e7575f8281526007840160205260409081902054905163170cc93360e21b81526107129160ff16906004016150ce565b5f82815260068401602052604081206118ff91614c21565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f6119976126cc565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119d0576119d0614f36565b60038111156119e1576119e1614f36565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a5a57611a5a614f36565b14158015611a7b5750600381516003811115611a7857611a78614f36565b14155b15611a9c578051604051633b0d540d60e21b815261071291906004016156d9565b5f611aaa8260400151611d24565b905080606001516001600160401b03165f03611adc576040516339b894f960e21b815260048101859052602401610712565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b4a93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b64573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b8b91908101906151d7565b6040518263ffffffff1660e01b8152600401611ba79190615208565b6020604051808303815f875af1158015611bc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e80919061521a565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615cf98339815191529190611c2e90615096565b90505f03611c525760405163089938b360e11b815260048101839052602401610712565b60015f83815260078301602052604090205460ff166005811115611c7857611c78614f36565b14611cab575f8281526007820160205260409081902054905163170cc93360e21b81526107129160ff16906004016150ce565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611ce49190600401615756565b6020604051808303815f875af1158015611d00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610586919061521a565b611d2c614c58565b5f8281525f80516020615d39833981519152602052604090819020815160e0810190925280545f80516020615cf9833981519152929190829060ff166005811115611d7957611d79614f36565b6005811115611d8a57611d8a614f36565b8152602001600182018054611d9e90615096565b80601f0160208091040260200160405190810160405280929190818152602001828054611dca90615096565b8015611e155780601f10611dec57610100808354040283529160200191611e15565b820191905f5260205f20905b815481529060010190602001808311611df857829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611ea55760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611eae6126cc565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611edc573361156b565b336001600160a01b03831603611f0b575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615cf9833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611f7d90869086906157e0565b90815260200160405180910390205491505092915050565b611fa184848484611fc1565b61081557604051631036cf9160e11b815260048101859052602401610712565b5f80611fcb6126cc565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561200457612004614f36565b600381111561201557612015614f36565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61208b82611d24565b90506002835160038111156120a2576120a2614f36565b146120c3578251604051633b0d540d60e21b815261071291906004016156d9565b60208301516001600160a01b0316331461215f575f8281526006850160205260409020546001600160a01b031633146120fc573361156b565b5f82815260068501602052604090205460a082015161212b91600160b01b90046001600160401b0316906157ef565b6001600160401b031642101561215f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b60028151600581111561217457612174614f36565b036122965760028401546080840151612196916001600160401b0316906157ef565b6001600160401b03164210156121ca5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b87156121dc576121da828861242d565b505b5f8981526007850160205260409020805460ff1916600317905560608301516080820151612215918491612210919061580f565b613359565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561225884888c613530565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610fa59350505050565b6004815160058111156122ab576122ab614f36565b036122d2576122bb83878b613530565b506122c589612eed565b6001945050505050610fa5565b805160405163170cc93360e21b815261071291906004016150ce565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612352573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612379919081019061582f565b915091508061239b57604051636b2f19e960e01b815260040160405180910390fd5b8151156123c1578151604051636ba589a560e01b81526004810191909152602401610712565b60208201516001600160a01b0316156123fd576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5092915050565b5f8061240e6126cc565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612478573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261249f919081019061582f565b91509150806124c157604051636b2f19e960e01b815260040160405180910390fd5b5f6124ca6126cc565b60058101548451919250146124f8578251604051636ba589a560e01b81526004810191909152602401610712565b60208301516001600160a01b031615612534576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b60208301516001600160a01b031615612570576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016125ad9190615208565b6040805180830381865af41580156125c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125eb91906158bf565b915091508188146126125760405163089938b360e11b815260048101899052602401610712565b5f8881526006840160205260409020600101546001600160401b0390811690821611156126a3575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26126c1565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806126fa6126cc565b90505f61270687613715565b905061271187612404565b61272057600192505050610fa5565b5f8781526006830160205260409020546001600160a01b03163314612745573361156b565b5f87815260068301602052604090205460a082015161277491600160b01b90046001600160401b0316906157ef565b6001600160401b03168160c001516001600160401b031610156127bb5760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610712565b5f86156127d3576127cc888761242d565b90506127f1565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f9061281690611286565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561287f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128a3919061521a565b90508084600a015f8b81526020019081526020015f205f8282546128c791906154af565b90915550506001600160a01b03861615612904575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615d1983398151915280546001190161294357604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612952614c58565b5f80516020615cf98339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612985886122ee565b604001516040518263ffffffff1660e01b81526004016129a59190615208565b6040805180830381865af41580156129bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129e39190615733565b915091508015612a0a57604051632d07135360e01b81528115156004820152602401610712565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612a3b57612a3b614f36565b6005811115612a4c57612a4c614f36565b8152602001600182018054612a6090615096565b80601f0160208091040260200160405190810160405280929190818152602001828054612a8c90615096565b8015612ad75780601f10612aae57610100808354040283529160200191612ad7565b820191905f5260205f20905b815481529060010190602001808311612aba57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612b4257612b42614f36565b14158015612b635750600181516005811115612b6057612b60614f36565b14155b15612b8457805160405163170cc93360e21b815261071291906004016150ce565b600381516005811115612b9957612b99614f36565b03612ba75760048152612bac565b600581525b836008018160200151604051612bc2919061538b565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612c0657612c06614f36565b021790555060208201516001820190612c1f90826153e0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612cc557612cc5614f36565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d056126cc565b5f838152600a820160205260408120805491905590915061081584826139f9565b5f80516020615cd983398151915254611508906001600160a01b03168383613a6f565b60015f80516020615d1983398151915255565b5f80612d666126cc565b600281015490915061ffff600160401b90910481169086161080612d8f575061271061ffff8616115b15612db357604051635f12e6c360e11b815261ffff86166004820152602401610712565b60028101546001600160401b039081169085161015612def576040516202a06d60e11b81526001600160401b0385166004820152602401610712565b8054831080612e015750806001015483115b15612e225760405163222d164360e21b815260048101849052602401610712565b5f612e2c84613ace565b90505f612e3882610e20565b90505f612e458983613af1565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b612ecd848484846126f0565b61081557604051635bff683f60e11b815260048101859052602401610712565b5f612ef66126cc565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f2f57612f2f614f36565b6003811115612f4057612f40614f36565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612fdd7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612fec91906157ef565b6001600160401b03164210156130205760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130705750602082015161308e565b5f858152600985016020526040902080546001600160a01b03191690555b5f8061309b838886614016565b915091506130b48560200151610f548760600151611286565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131046126cc565b90505f6131136102d185613ace565b90505f61311f87611d24565b905061312a87612404565b61314a576040516330efa98b60e01b815260048101889052602401610712565b60028151600581111561315f5761315f614f36565b1461318057805160405163170cc93360e21b815261071291906004016150ce565b5f82826080015161319191906157ef565b905083600201600a9054906101000a90046001600160401b031682604001516131ba91906158e2565b6001600160401b0316816001600160401b031611156131f757604051636d51fe0560e11b81526001600160401b0382166004820152602401610712565b5f806132038a84613359565b915091505f8a8360405160200161323192919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6133476140c3565b6133508261410e565b61150881614188565b5f8281525f80516020615d39833981519152602052604081206002015481905f80516020615cf983398151915290600160801b90046001600160401b03166133a185826141f0565b5f6133ab87614413565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613454573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261347b91908101906151d7565b6040518263ffffffff1660e01b81526004016134979190615208565b6020604051808303815f875af11580156134b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134d7919061521a565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061353a6126cc565b90505f61354a8660400151611d24565b90505f60038251600581111561356257613562614f36565b1480613580575060048251600581111561357e5761357e614f36565b145b15613590575060c08101516135cd565b6002825160058111156135a5576135a5614f36565b036135b15750426135cd565b815160405163170cc93360e21b815261071291906004016150ce565b86608001516001600160401b0316816001600160401b0316116135f5575f9350505050613338565b600483015460608801515f916001600160a01b031690634f22429f9061361a90611286565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561369b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136bf919061521a565b5f878152600886016020526040902081905590506001600160a01b038716156126c1575f868152600985016020526040902080546001600160a01b0319166001600160a01b038916179055979650505050505050565b61371d614c58565b5f8281525f80516020615d398339815191526020526040808220815160e0810190925280545f80516020615cf983398151915293929190829060ff16600581111561376a5761376a614f36565b600581111561377b5761377b614f36565b815260200160018201805461378f90615096565b80601f01602080910402602001604051908101604052809291908181526020018280546137bb90615096565b80156138065780601f106137dd57610100808354040283529160200191613806565b820191905f5260205f20905b8154815290600101906020018083116137e957829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561387457613874614f36565b146138a7575f8481526007830160205260409081902054905163170cc93360e21b81526107129160ff16906004016150ce565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff191660018360058111156138eb576138eb614f36565b02179055506020820151600182019061390490826153e0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139a28582613359565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b5f5f80516020615cd983398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a54575f80fd5b505af1158015613a66573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261058691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614488565b5f610e6e825f80516020615cd9833981519152546001600160a01b0316906144e9565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613b3557604051637fab81e560e01b815260040160405180910390fd5b5f80516020615cf983398151915242613b546060860160408701614e9a565b6001600160401b0316111580613b8e5750613b726202a300426154af565b613b826060860160408701614e9a565b6001600160401b031610155b15613bc857613ba36060850160408601614e9a565b604051635879da1360e11b81526001600160401b039091166004820152602401610712565b613bdd613bd8606086018661590d565b6144f5565b613bed613bd8608086018661590d565b6030613bfc6020860186615921565b905014613c2e57613c106020850185615921565b6040516326475b2f60e11b8152610712925060040190815260200190565b613c388480615921565b90505f03613c6557613c4a8480615921565b604051633e08a12560e11b8152600401610712929190615963565b5f60088201613c748680615921565b604051613c829291906157e0565b90815260200160405180910390205414613cbb57613ca08480615921565b60405163a41f772f60e01b8152600401610712929190615963565b613cc5835f6141f0565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d028a80615921565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613d4a908b018b615921565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613d9360608b0160408c01614e9a565b6001600160401b03168152602001613dae60608b018b61590d565b613db790615976565b8152602001613dc960808b018b61590d565b613dd290615976565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613e009190615aa3565b5f60405180830381865af4158015613e1a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e419190810190615b5a565b5f82815260068601602052604090209193509150613e5f82826153e0565b508160088401613e6f8880615921565b604051613e7d9291906157e0565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613eb9908590600401615208565b6020604051808303815f875af1158015613ed5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ef9919061521a565b5f8481526007860160205260409020805460ff191660011790559050613f1f8780615921565b5f858152600787016020526040902060010191613f3d919083615b9d565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613f9c8880615921565b604051613faa9291906157e0565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613fe89190614e9a565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f6140216126cc565b5f868152600882016020526040812080549082905591925090819080156140b5575f8781526006850160205260409020546127109061406b90600160a01b900461ffff16836154e4565b61407591906156ba565b91508184600a015f8981526020019081526020015f205f82825461409991906154af565b909155506140a990508282615c56565b92506140b589846139f9565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661410c57604051631afcd79f60e31b815260040160405180910390fd5b565b6141166140c3565b61411f8161465e565b614127614677565b610f756060820135608083013561414460c0850160a08601614e9a565b61415460e0860160c08701615c69565b614165610100870160e08801615c82565b61010087013561417d61014089016101208a01615231565b886101400135614687565b6141906140c3565b5f80516020615cd98339815191526001600160a01b0382166141d057604051637330680360e01b81526001600160a01b0383166004820152602401610712565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615cf98339815191525f6001600160401b0380841690851611156142245761421d838561580f565b9050614231565b61422e848461580f565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061429357506001840154815161428f916001600160401b0316906154af565b8210155b156142b9576001600160401b0383166060820152818152604081015160208201526142d8565b82816060018181516142cb91906157ef565b6001600160401b03169052505b60608101516142e89060646158e2565b602082015160018601546001600160401b0392909216916143139190600160401b900460ff166154e4565b101561434357606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610712565b856001600160401b03168160400181815161435e91906154af565b9052506040810180516001600160401b038716919061437e908390615c56565b905250600184015460408201516064916143a391600160401b90910460ff16906154e4565b10156143ca578060400151604051635943317f60e01b815260040161071291815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615d398339815191526020526040812060020180545f80516020615cf9833981519152919060089061445d90600160401b90046001600160401b0316615ca2565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61449c6001600160a01b0384168361486c565b905080515f141580156144c05750808060200190518101906144be9190615cbd565b155b1561058657604051635274afe760e01b81526001600160a01b0384166004820152602401610712565b5f613338833384614879565b6145026020820182614df5565b63ffffffff16158015614522575061451d602082018261524c565b151590505b15614569576145346020820182614df5565b614541602083018361524c565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610712565b614576602082018261524c565b90506145856020830183614df5565b63ffffffff16111561459e576145346020820182614df5565b60015b6145ae602083018361524c565b9050811015611508576145c4602083018361524c565b6145cf600184615c56565b8181106145de576145de615291565b90506020020160208101906145f39190615231565b6001600160a01b0316614609602084018461524c565b8381811061461957614619615291565b905060200201602081019061462e9190615231565b6001600160a01b0316101561465657604051630dbc8d5f60e31b815260040160405180910390fd5b6001016145a1565b6146666140c3565b61466e6149dc565b610f75816149e4565b61467f6140c3565b61410c614acc565b61468f6140c3565b5f6146986126cc565b905061ffff861615806146b0575061271061ffff8716115b156146d457604051635f12e6c360e11b815261ffff87166004820152602401610712565b878911156146f85760405163222d164360e21b8152600481018a9052602401610712565b60ff8516158061470b5750600a60ff8616115b1561472e5760405163170db35960e31b815260ff86166004820152602401610712565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614795576040516202a06d60e11b81526001600160401b0388166004820152602401610712565b835f036147b55760405163a733007160e01b815260040160405180910390fd5b816147d657604051632f6bd1db60e01b815260048101839052602401610712565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b606061333883835f614ad4565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148e3919061521a565b90506148fa6001600160a01b038616853086614b63565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa15801561493e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614962919061521a565b90508181116149c85760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610712565b6149d28282615c56565b9695505050505050565b61410c6140c3565b6149ec6140c3565b80355f80516020615cf98339815191529081556014614a116060840160408501615c82565b60ff161180614a305750614a2b6060830160408401615c82565b60ff16155b15614a6457614a456060830160408401615c82565b604051634a59bbff60e11b815260ff9091166004820152602401610712565b614a746060830160408401615c82565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa56040830160208401614e9a565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612d496140c3565b606081471015614af95760405163cd78605960e01b8152306004820152602401610712565b5f80856001600160a01b03168486604051614b14919061538b565b5f6040518083038185875af1925050503d805f8114614b4e576040519150601f19603f3d011682016040523d82523d5f602084013e614b53565b606091505b50915091506149d2868383614b9c565b6040516001600160a01b0384811660248301528381166044830152606482018390526108159186918216906323b872dd90608401613a9c565b606082614bb157614bac82614bf8565b613338565b8151158015614bc857506001600160a01b0384163b155b15614bf157604051639996b31560e01b81526001600160a01b0385166004820152602401610712565b5080613338565b805115614c085780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c2d90615096565b5f825580601f10614c3c575050565b601f0160209004905f5260205f2090810190610f759190614c95565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614ca9575f8155600101614c96565b5090565b8015158114610f75575f80fd5b803563ffffffff81168114614ccd575f80fd5b919050565b5f805f60608486031215614ce4575f80fd5b833592506020840135614cf681614cad565b9150614d0460408501614cba565b90509250925092565b5f60208284031215614d1d575f80fd5b5035919050565b5f8060408385031215614d35575f80fd5b82356001600160401b03811115614d4a575f80fd5b830160808186031215614d5b575f80fd5b9150614d6960208401614cba565b90509250929050565b5f8060408385031215614d83575f80fd5b82359150614d6960208401614cba565b6001600160a01b0381168114610f75575f80fd5b5f805f8060808587031215614dba575f80fd5b843593506020850135614dcc81614cad565b9250614dda60408601614cba565b91506060850135614dea81614d93565b939692955090935050565b5f60208284031215614e05575f80fd5b61333882614cba565b803561ffff81168114614ccd575f80fd5b6001600160401b0381168114610f75575f80fd5b5f805f8060808587031215614e46575f80fd5b84356001600160401b03811115614e5b575f80fd5b850160a08188031215614e6c575f80fd5b9350614e7a60208601614e0e565b92506040850135614e8a81614e1f565b9396929550929360600135925050565b5f60208284031215614eaa575f80fd5b813561333881614e1f565b5f8060408385031215614ec6575f80fd5b823591506020830135614ed881614d93565b809150509250929050565b5f8060408385031215614ef4575f80fd5b50508035926020909101359150565b5f80828403610180811215614f16575f80fd5b61016080821215614f25575f80fd5b8493508301359050614ed881614d93565b634e487b7160e01b5f52602160045260245ffd5b60068110614f5a57614f5a614f36565b9052565b5f5b83811015614f78578181015183820152602001614f60565b50505f910152565b5f8151808452614f97816020860160208601614f5e565b601f01601f19169290920160200192915050565b60208152614fbd602082018351614f4a565b5f602083015160e06040840152614fd8610100840182614f80565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f806020838503121561503c575f80fd5b82356001600160401b0380821115615052575f80fd5b818501915085601f830112615065575f80fd5b813581811115615073575f80fd5b866020828501011115615084575f80fd5b60209290920196919550909350505050565b600181811c908216806150aa57607f821691505b6020821081036150c857634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610e6e8284614f4a565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715615112576151126150dc565b60405290565b604080519081016001600160401b0381118282101715615112576151126150dc565b604051601f8201601f191681016001600160401b0381118282101715615162576151626150dc565b604052919050565b5f6001600160401b03821115615182576151826150dc565b50601f01601f191660200190565b5f82601f83011261519f575f80fd5b81516151b26151ad8261516a565b61513a565b8181528460208386010111156151c6575f80fd5b610fa5826020830160208701614f5e565b5f602082840312156151e7575f80fd5b81516001600160401b038111156151fc575f80fd5b610fa584828501615190565b602081525f6133386020830184614f80565b5f6020828403121561522a575f80fd5b5051919050565b5f60208284031215615241575f80fd5b813561333881614d93565b5f808335601e19843603018112615261575f80fd5b8301803591506001600160401b0382111561527a575f80fd5b6020019150600581901b3603821315613529575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152b9575f80fd5b9190910192915050565b5f82601f8301126152d2575f80fd5b81356152e06151ad8261516a565b8181528460208386010111156152f4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615320575f80fd5b6153286150f0565b82356001600160401b038082111561533e575f80fd5b61534a368387016152c3565b8352602085013591508082111561535f575f80fd5b5061536c368286016152c3565b602083015250604083013561538081614e1f565b604082015292915050565b5f82516152b9818460208701614f5e565b601f82111561058657805f5260205f20601f840160051c810160208510156153c15750805b601f840160051c820191505b81811015610e80575f81556001016153cd565b81516001600160401b038111156153f9576153f96150dc565b61540d816154078454615096565b8461539c565b602080601f831160018114615440575f84156154295750858301515b5f19600386901b1c1916600185901b1785556110dd565b5f85815260208120601f198616915b8281101561546e5788860151825594840194600190910190840161544f565b508582101561548b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610e6e57610e6e61549b565b5f63ffffffff8083168181036154da576154da61549b565b6001019392505050565b8082028115828204841417610e6e57610e6e61549b565b5f808335601e19843603018112615510575f80fd5b83016020810192503590506001600160401b0381111561552e575f80fd5b803603821315613529575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561561957848303601f19018952813536889003605e190181126155a0575f80fd5b870160606155ae82806154fb565b8287526155be838801828461553c565b925050506155ce868301836154fb565b868303888801526155e083828461553c565b9250505060408083013592506155f583614e1f565b6001600160401b03929092169490910193909352978301979083019060010161557b565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561564a81614d93565b6001600160a01b031660608381019190915283013536849003601e19018112615671575f80fd5b83016020810190356001600160401b0381111561568c575f80fd5b8060051b360382131561569d575f80fd5b6080808501526156b160a085018284615564565b95945050505050565b5f826156d457634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106156ed576156ed614f36565b91905290565b5f805f60608486031215615705575f80fd5b83519250602084015161571781614e1f565b604085015190925061572881614e1f565b809150509250925092565b5f8060408385031215615744575f80fd5b825191506020830151614ed881614cad565b5f60208083525f845461576881615096565b806020870152604060018084165f811461578957600181146157a5576157d2565b60ff19851660408a0152604084151560051b8a010195506157d2565b895f5260205f205f5b858110156157c95781548b82018601529083019088016157ae565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156123fd576123fd61549b565b6001600160401b038281168282160390808211156123fd576123fd61549b565b5f8060408385031215615840575f80fd5b82516001600160401b0380821115615856575f80fd5b9084019060608287031215615869575f80fd5b6158716150f0565b82518152602083015161588381614d93565b6020820152604083015182811115615899575f80fd5b6158a588828601615190565b6040830152508094505050506020830151614ed881614cad565b5f80604083850312156158d0575f80fd5b825191506020830151614ed881614e1f565b6001600160401b038181168382160280821691908281146159055761590561549b565b505092915050565b5f8235603e198336030181126152b9575f80fd5b5f808335601e19843603018112615936575f80fd5b8301803591506001600160401b0382111561594f575f80fd5b602001915036819003821315613529575f80fd5b602081525f610fa560208301848661553c565b5f60408236031215615986575f80fd5b61598e615118565b61599783614cba565b81526020808401356001600160401b03808211156159b3575f80fd5b9085019036601f8301126159c5575f80fd5b8135818111156159d7576159d76150dc565b8060051b91506159e884830161513a565b8181529183018401918481019036841115615a01575f80fd5b938501935b83851015615a2b5784359250615a1b83614d93565b8282529385019390850190615a06565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615a985784516001600160a01b03168252938301936001929092019190830190615a6f565b509695505050505050565b60208152815160208201525f602083015160e06040840152615ac9610100840182614f80565b90506040840151601f1980858403016060860152615ae78383614f80565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b178383615a3d565b925060a08601519150808584030160c086015250615b358282615a3d565b91505060c0840151615b5260e08501826001600160401b03169052565b509392505050565b5f8060408385031215615b6b575f80fd5b8251915060208301516001600160401b03811115615b87575f80fd5b615b9385828601615190565b9150509250929050565b6001600160401b03831115615bb457615bb46150dc565b615bc883615bc28354615096565b8361539c565b5f601f841160018114615bf9575f8515615be25750838201355b5f19600387901b1c1916600186901b178355610e80565b5f83815260208120601f198716915b82811015615c285786850135825560209485019460019092019101615c08565b5086821015615c44575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610e6e57610e6e61549b565b5f60208284031215615c79575f80fd5b61333882614e0e565b5f60208284031215615c92575f80fd5b813560ff81168114613338575f80fd5b5f6001600160401b038083168181036154da576154da61549b565b5f60208284031215615ccd575f80fd5b815161333881614cad56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a26469706673582212203e9af5257cc792d5e4d98fcc53cb7ccdd4a6cede1b6a93ef3c38e972203dbf2e64736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615edb380380615edb83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d8e8061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061023f575f3560e01c806380dd672f11610135578063b771b3bc116100b4578063d5f20ff611610079578063d5f20ff614610516578063df93d8de14610536578063e4a63c4014610540578063fb8b11dd14610554578063fd7ac5e714610567575f80fd5b8063b771b3bc146104ae578063ba3a4b97146104d4578063bc5fbfec146104e7578063bee0a03f146104fb578063c974d1b61461050e575f80fd5b80639e1bc4ef116100fa5780639e1bc4ef1461044e5780639e478eea14610461578063a3a65e4814610474578063a9778a7a146102ee578063afb9809614610487575f80fd5b806380dd672f146103fa5780638280a25a1461040d5780638ef34c981461041557806393e24598146104285780639ae064471461043b575f80fd5b8063467ef06f116101c1578063620658561161018657806362065856146103a757806366435abf146103ba578063732214f8146103cd57806376f78621146103d45780637d8d2f77146103e7575f80fd5b8063467ef06f146103305780634bee0040146103435780635dd6a6cb1461036457806360305d621461037757806360ad778414610394575f80fd5b806325e1c7761161020757806325e1c776146102b05780632e2194d8146102c357806335455ded146102ee57806337b9be8f1461030a5780633a1cfff61461031d575f80fd5b80630118acc4146102435780630322ed9814610258578063151d30d11461026b5780631ec447241461028a57806320d91b7a1461029d575b5f80fd5b610256610251366004614cd2565b61057a565b005b610256610266366004614d0d565b61058b565b610273600a81565b60405160ff90911681526020015b60405180910390f35b610256610298366004614cd2565b61081b565b6102566102ab366004614d24565b610827565b6102566102be366004614d72565b610dac565b6102d66102d1366004614d0d565b610e20565b6040516001600160401b039091168152602001610281565b6102f761271081565b60405161ffff9091168152602001610281565b610256610318366004614da7565b610e74565b61025661032b366004614cd2565b610e87565b61025661033e366004614df5565b610e93565b610356610351366004614e33565b610f78565b604051908152602001610281565b610256610372366004614da7565b610fad565b61037f601481565b60405163ffffffff9091168152602001610281565b6102566103a2366004614d72565b610fb9565b6103566103b5366004614e9a565b611286565b6102d66103c8366004614d0d565b6112a6565b6103565f81565b6102566103e2366004614cd2565b6112ba565b6102566103f5366004614da7565b6112c6565b610256610408366004614d72565b6112d2565b610273603081565b610256610423366004614eb5565b61150c565b610256610436366004614d0d565b6115ee565b610256610449366004614da7565b611682565b61035661045c366004614ee3565b61168e565b61025661046f366004614f03565b6116ba565b610256610482366004614df5565b611799565b6103567f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104bc6005600160991b0181565b6040516001600160a01b039091168152602001610281565b6102566104e2366004614d0d565b61198e565b6103565f80516020615cf983398151915281565b610256610509366004614d0d565b611be7565b610273601481565b610529610524366004614d0d565b611d24565b6040516102819190614fab565b6102d66202a30081565b6103565f80516020615cd983398151915281565b610256610562366004614eb5565b611e73565b61035661057536600461502b565b611f3a565b6105868383835f611f95565b505050565b5f8181525f80516020615d398339815191526020526040808220815160e0810190925280545f80516020615cf983398151915293929190829060ff1660058111156105d8576105d8614f36565b60058111156105e9576105e9614f36565b81526020016001820180546105fd90615096565b80601f016020809104026020016040519081016040528092919081815260200182805461062990615096565b80156106745780601f1061064b57610100808354040283529160200191610674565b820191905f5260205f20905b81548152906001019060200180831161065757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156106df576106df614f36565b1461071b575f8381526007830160205260409081902054905163170cc93360e21b81526107129160ff16906004016150ce565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610792573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107b991908101906151d7565b6040518263ffffffff1660e01b81526004016107d59190615208565b6020604051808303815f875af11580156107f1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610815919061521a565b50505050565b6108158383835f611fc1565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615cf98339815191529060ff161561087957604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e0919061521a565b836020013514610909576040516372b0a7e760e11b815260208401356004820152602401610712565b3061091a6060850160408601615231565b6001600160a01b03161461095d576109386060840160408501615231565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610712565b5f61096b606085018561524c565b905090505f805b828163ffffffff161015610bd2575f61098e606088018861524c565b8363ffffffff168181106109a4576109a4615291565b90506020028101906109b691906152a5565b6109bf90615310565b80516040519192505f9160088801916109d79161538b565b90815260200160405180910390205414610a0757805160405163a41f772f60e01b81526107129190600401615208565b5f6002885f013584604051602001610a3692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a509161538b565b602060405180830381855afa158015610a6b573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a8e919061521a565b90508086600801835f0151604051610aa6919061538b565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610ae690826153e0565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610b6590856154af565b8251604051919550610b769161538b565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610bcb906154c2565b9050610972565b50600483018190556001830154606490610bf690600160401b900460ff16836154e4565b1015610c1857604051635943317f60e01b815260048101829052602401610712565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c3c876122ee565b604001516040518263ffffffff1660e01b8152600401610c5c9190615208565b602060405180830381865af4158015610c77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9b919061521a565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610cd59190615626565b5f60405180830381865af4158015610cef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d1691908101906151d7565b90505f600282604051610d29919061538b565b602060405180830381855afa158015610d44573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d67919061521a565b9050828114610d935760405163baaea89d60e01b81526004810182905260248101849052604401610712565b5050506009909201805460ff1916600117905550505050565b610db582612404565b610dd5576040516330efa98b60e01b815260048101839052602401610712565b5f610ddf83611d24565b5190506002816005811115610df657610df6614f36565b14610e16578060405163170cc93360e21b815260040161071291906150ce565b610815838361242d565b5f80610e2a6126cc565b60030154610e3890846156ba565b9050801580610e4d57506001600160401b0381115b15610e6e5760405163222d164360e21b815260048101849052602401610712565b92915050565b610e8084848484611fc1565b5050505050565b6108158383835f6126f0565b610e9b612912565b5f610ea46126cc565b90505f80610eb184612949565b91509150610ebe82612404565b610eca57505050610f5f565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b03918216911680610f01575080610f1f565b5f848152600b86016020526040902080546001600160a01b03191690555b600483516005811115610f3457610f34614f36565b03610f4357610f438185612cfc565b610f5982610f548560400151611286565b612d26565b50505050505b610f7560015f80516020615d1983398151915255565b50565b5f610f81612912565b610f8d85858585612d5c565b9050610fa560015f80516020615d1983398151915255565b949350505050565b61081584848484612ec1565b5f610fc26126cc565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610ffb57610ffb614f36565b600381111561100c5761100c614f36565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61108282611d24565b905060018351600381111561109957611099614f36565b146110ba578251604051633b0d540d60e21b815261071291906004016156d9565b6004815160058111156110cf576110cf614f36565b036110e5576110dd86612eed565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61110a896122ee565b604001516040518263ffffffff1660e01b815260040161112a9190615208565b606060405180830381865af4158015611145573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116991906156f3565b509150915081841461119657846040015160405163089938b360e11b815260040161071291815260200190565b806001600160401b031683606001516001600160401b031610806111cf5750806001600160401b03168560a001516001600160401b0316115b156111f857604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61128f6126cc565b60030154610e6e906001600160401b0384166154e4565b5f6112b082611d24565b6080015192915050565b6105868383835f612ec1565b610e80848484846126f0565b6112da612912565b5f6112e36126cc565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561131c5761131c614f36565b600381111561132d5761132d614f36565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113a6576113a6614f36565b146113c7578051604051633b0d540d60e21b815261071291906004016156d9565b60046113d68260400151611d24565b5160058111156113e8576113e8614f36565b146114e7575f6113f7846122ee565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016114369190615208565b606060405180830381865af4158015611451573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147591906156f3565b5091509150818460400151146114a15760405163089938b360e11b815260048101839052602401610712565b806001600160401b03168460c001516001600160401b031611156114e357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5050505b6114f084612eed565b505061150860015f80516020615d1983398151915255565b5050565b6001600160a01b03811661153e5760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f6115476126cc565b5f8481526006820160205260409020549091506001600160a01b0316331461159057335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610712565b336001600160a01b038316036115bf575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f6115f76126cc565b90505f61160383611d24565b519050600481600581111561161a5761161a614f36565b1461163a578060405163170cc93360e21b815260040161071291906150ce565b5f8381526006830160205260409020546001600160a01b0316331461165f573361156b565b5f838152600683016020526040902054610586906001600160a01b031684612cfc565b61081584848484611f95565b5f611697612912565b6116a28333846130fa565b9050610e6e60015f80516020615d1983398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611703575080546001600160401b03808416911610155b156117215760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561174c848461333f565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615cf98339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117cc866122ee565b604001516040518263ffffffff1660e01b81526004016117ec9190615208565b6040805180830381865af4158015611806573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061182a9190615733565b915091508061185057604051632d07135360e01b81528115156004820152602401610712565b5f8281526006840160205260409020805461186a90615096565b90505f0361188e5760405163089938b360e11b815260048101839052602401610712565b60015f83815260078501602052604090205460ff1660058111156118b4576118b4614f36565b146118e7575f8281526007840160205260409081902054905163170cc93360e21b81526107129160ff16906004016150ce565b5f82815260068401602052604081206118ff91614c21565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f6119976126cc565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119d0576119d0614f36565b60038111156119e1576119e1614f36565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a5a57611a5a614f36565b14158015611a7b5750600381516003811115611a7857611a78614f36565b14155b15611a9c578051604051633b0d540d60e21b815261071291906004016156d9565b5f611aaa8260400151611d24565b905080606001516001600160401b03165f03611adc576040516339b894f960e21b815260048101859052602401610712565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b4a93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b64573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b8b91908101906151d7565b6040518263ffffffff1660e01b8152600401611ba79190615208565b6020604051808303815f875af1158015611bc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e80919061521a565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615cf98339815191529190611c2e90615096565b90505f03611c525760405163089938b360e11b815260048101839052602401610712565b60015f83815260078301602052604090205460ff166005811115611c7857611c78614f36565b14611cab575f8281526007820160205260409081902054905163170cc93360e21b81526107129160ff16906004016150ce565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611ce49190600401615756565b6020604051808303815f875af1158015611d00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610586919061521a565b611d2c614c58565b5f8281525f80516020615d39833981519152602052604090819020815160e0810190925280545f80516020615cf9833981519152929190829060ff166005811115611d7957611d79614f36565b6005811115611d8a57611d8a614f36565b8152602001600182018054611d9e90615096565b80601f0160208091040260200160405190810160405280929190818152602001828054611dca90615096565b8015611e155780601f10611dec57610100808354040283529160200191611e15565b820191905f5260205f20905b815481529060010190602001808311611df857829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611ea55760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611eae6126cc565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611edc573361156b565b336001600160a01b03831603611f0b575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615cf9833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611f7d90869086906157e0565b90815260200160405180910390205491505092915050565b611fa184848484611fc1565b61081557604051631036cf9160e11b815260048101859052602401610712565b5f80611fcb6126cc565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561200457612004614f36565b600381111561201557612015614f36565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61208b82611d24565b90506002835160038111156120a2576120a2614f36565b146120c3578251604051633b0d540d60e21b815261071291906004016156d9565b60208301516001600160a01b0316331461215f575f8281526006850160205260409020546001600160a01b031633146120fc573361156b565b5f82815260068501602052604090205460a082015161212b91600160b01b90046001600160401b0316906157ef565b6001600160401b031642101561215f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b60028151600581111561217457612174614f36565b036122965760028401546080840151612196916001600160401b0316906157ef565b6001600160401b03164210156121ca5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b87156121dc576121da828861242d565b505b5f8981526007850160205260409020805460ff1916600317905560608301516080820151612215918491612210919061580f565b613359565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561225884888c613530565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610fa59350505050565b6004815160058111156122ab576122ab614f36565b036122d2576122bb83878b613530565b506122c589612eed565b6001945050505050610fa5565b805160405163170cc93360e21b815261071291906004016150ce565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612352573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612379919081019061582f565b915091508061239b57604051636b2f19e960e01b815260040160405180910390fd5b8151156123c1578151604051636ba589a560e01b81526004810191909152602401610712565b60208201516001600160a01b0316156123fd576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5092915050565b5f8061240e6126cc565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612478573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261249f919081019061582f565b91509150806124c157604051636b2f19e960e01b815260040160405180910390fd5b5f6124ca6126cc565b60058101548451919250146124f8578251604051636ba589a560e01b81526004810191909152602401610712565b60208301516001600160a01b031615612534576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b60208301516001600160a01b031615612570576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016125ad9190615208565b6040805180830381865af41580156125c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125eb91906158bf565b915091508188146126125760405163089938b360e11b815260048101899052602401610712565b5f8881526006840160205260409020600101546001600160401b0390811690821611156126a3575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26126c1565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806126fa6126cc565b90505f61270687613715565b905061271187612404565b61272057600192505050610fa5565b5f8781526006830160205260409020546001600160a01b03163314612745573361156b565b5f87815260068301602052604090205460a082015161277491600160b01b90046001600160401b0316906157ef565b6001600160401b03168160c001516001600160401b031610156127bb5760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610712565b5f86156127d3576127cc888761242d565b90506127f1565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f9061281690611286565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561287f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128a3919061521a565b90508084600a015f8b81526020019081526020015f205f8282546128c791906154af565b90915550506001600160a01b03861615612904575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615d1983398151915280546001190161294357604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612952614c58565b5f80516020615cf98339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612985886122ee565b604001516040518263ffffffff1660e01b81526004016129a59190615208565b6040805180830381865af41580156129bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129e39190615733565b915091508015612a0a57604051632d07135360e01b81528115156004820152602401610712565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612a3b57612a3b614f36565b6005811115612a4c57612a4c614f36565b8152602001600182018054612a6090615096565b80601f0160208091040260200160405190810160405280929190818152602001828054612a8c90615096565b8015612ad75780601f10612aae57610100808354040283529160200191612ad7565b820191905f5260205f20905b815481529060010190602001808311612aba57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612b4257612b42614f36565b14158015612b635750600181516005811115612b6057612b60614f36565b14155b15612b8457805160405163170cc93360e21b815261071291906004016150ce565b600381516005811115612b9957612b99614f36565b03612ba75760048152612bac565b600581525b836008018160200151604051612bc2919061538b565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612c0657612c06614f36565b021790555060208201516001820190612c1f90826153e0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612cc557612cc5614f36565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d056126cc565b5f838152600a820160205260408120805491905590915061081584826139f9565b5f80516020615cd983398151915254611508906001600160a01b03168383613a6f565b60015f80516020615d1983398151915255565b5f80612d666126cc565b600281015490915061ffff600160401b90910481169086161080612d8f575061271061ffff8616115b15612db357604051635f12e6c360e11b815261ffff86166004820152602401610712565b60028101546001600160401b039081169085161015612def576040516202a06d60e11b81526001600160401b0385166004820152602401610712565b8054831080612e015750806001015483115b15612e225760405163222d164360e21b815260048101849052602401610712565b5f612e2c84613ace565b90505f612e3882610e20565b90505f612e458983613af1565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b612ecd848484846126f0565b61081557604051635bff683f60e11b815260048101859052602401610712565b5f612ef66126cc565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f2f57612f2f614f36565b6003811115612f4057612f40614f36565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612fdd7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612fec91906157ef565b6001600160401b03164210156130205760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130705750602082015161308e565b5f858152600985016020526040902080546001600160a01b03191690555b5f8061309b838886614016565b915091506130b48560200151610f548760600151611286565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131046126cc565b90505f6131136102d185613ace565b90505f61311f87611d24565b905061312a87612404565b61314a576040516330efa98b60e01b815260048101889052602401610712565b60028151600581111561315f5761315f614f36565b1461318057805160405163170cc93360e21b815261071291906004016150ce565b5f82826080015161319191906157ef565b905083600201600a9054906101000a90046001600160401b031682604001516131ba91906158e2565b6001600160401b0316816001600160401b031611156131f757604051636d51fe0560e11b81526001600160401b0382166004820152602401610712565b5f806132038a84613359565b915091505f8a8360405160200161323192919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6133476140c3565b6133508261410e565b61150881614188565b5f8281525f80516020615d39833981519152602052604081206002015481905f80516020615cf983398151915290600160801b90046001600160401b03166133a185826141f0565b5f6133ab87614413565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613454573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261347b91908101906151d7565b6040518263ffffffff1660e01b81526004016134979190615208565b6020604051808303815f875af11580156134b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134d7919061521a565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061353a6126cc565b90505f61354a8660400151611d24565b90505f60038251600581111561356257613562614f36565b1480613580575060048251600581111561357e5761357e614f36565b145b15613590575060c08101516135cd565b6002825160058111156135a5576135a5614f36565b036135b15750426135cd565b815160405163170cc93360e21b815261071291906004016150ce565b86608001516001600160401b0316816001600160401b0316116135f5575f9350505050613338565b600483015460608801515f916001600160a01b031690634f22429f9061361a90611286565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561369b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136bf919061521a565b5f878152600886016020526040902081905590506001600160a01b038716156126c1575f868152600985016020526040902080546001600160a01b0319166001600160a01b038916179055979650505050505050565b61371d614c58565b5f8281525f80516020615d398339815191526020526040808220815160e0810190925280545f80516020615cf983398151915293929190829060ff16600581111561376a5761376a614f36565b600581111561377b5761377b614f36565b815260200160018201805461378f90615096565b80601f01602080910402602001604051908101604052809291908181526020018280546137bb90615096565b80156138065780601f106137dd57610100808354040283529160200191613806565b820191905f5260205f20905b8154815290600101906020018083116137e957829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561387457613874614f36565b146138a7575f8481526007830160205260409081902054905163170cc93360e21b81526107129160ff16906004016150ce565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff191660018360058111156138eb576138eb614f36565b02179055506020820151600182019061390490826153e0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139a28582613359565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b5f5f80516020615cd983398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a54575f80fd5b505af1158015613a66573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261058691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614488565b5f610e6e825f80516020615cd9833981519152546001600160a01b0316906144e9565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613b3557604051637fab81e560e01b815260040160405180910390fd5b5f80516020615cf983398151915242613b546060860160408701614e9a565b6001600160401b0316111580613b8e5750613b726202a300426154af565b613b826060860160408701614e9a565b6001600160401b031610155b15613bc857613ba36060850160408601614e9a565b604051635879da1360e11b81526001600160401b039091166004820152602401610712565b613bdd613bd8606086018661590d565b6144f5565b613bed613bd8608086018661590d565b6030613bfc6020860186615921565b905014613c2e57613c106020850185615921565b6040516326475b2f60e11b8152610712925060040190815260200190565b613c388480615921565b90505f03613c6557613c4a8480615921565b604051633e08a12560e11b8152600401610712929190615963565b5f60088201613c748680615921565b604051613c829291906157e0565b90815260200160405180910390205414613cbb57613ca08480615921565b60405163a41f772f60e01b8152600401610712929190615963565b613cc5835f6141f0565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d028a80615921565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613d4a908b018b615921565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613d9360608b0160408c01614e9a565b6001600160401b03168152602001613dae60608b018b61590d565b613db790615976565b8152602001613dc960808b018b61590d565b613dd290615976565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613e009190615aa3565b5f60405180830381865af4158015613e1a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e419190810190615b5a565b5f82815260068601602052604090209193509150613e5f82826153e0565b508160088401613e6f8880615921565b604051613e7d9291906157e0565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613eb9908590600401615208565b6020604051808303815f875af1158015613ed5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ef9919061521a565b5f8481526007860160205260409020805460ff191660011790559050613f1f8780615921565b5f858152600787016020526040902060010191613f3d919083615b9d565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613f9c8880615921565b604051613faa9291906157e0565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613fe89190614e9a565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f6140216126cc565b5f868152600882016020526040812080549082905591925090819080156140b5575f8781526006850160205260409020546127109061406b90600160a01b900461ffff16836154e4565b61407591906156ba565b91508184600a015f8981526020019081526020015f205f82825461409991906154af565b909155506140a990508282615c56565b92506140b589846139f9565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661410c57604051631afcd79f60e31b815260040160405180910390fd5b565b6141166140c3565b61411f8161465e565b614127614677565b610f756060820135608083013561414460c0850160a08601614e9a565b61415460e0860160c08701615c69565b614165610100870160e08801615c82565b61010087013561417d61014089016101208a01615231565b886101400135614687565b6141906140c3565b5f80516020615cd98339815191526001600160a01b0382166141d057604051637330680360e01b81526001600160a01b0383166004820152602401610712565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615cf98339815191525f6001600160401b0380841690851611156142245761421d838561580f565b9050614231565b61422e848461580f565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061429357506001840154815161428f916001600160401b0316906154af565b8210155b156142b9576001600160401b0383166060820152818152604081015160208201526142d8565b82816060018181516142cb91906157ef565b6001600160401b03169052505b60608101516142e89060646158e2565b602082015160018601546001600160401b0392909216916143139190600160401b900460ff166154e4565b101561434357606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610712565b856001600160401b03168160400181815161435e91906154af565b9052506040810180516001600160401b038716919061437e908390615c56565b905250600184015460408201516064916143a391600160401b90910460ff16906154e4565b10156143ca578060400151604051635943317f60e01b815260040161071291815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615d398339815191526020526040812060020180545f80516020615cf9833981519152919060089061445d90600160401b90046001600160401b0316615ca2565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61449c6001600160a01b0384168361486c565b905080515f141580156144c05750808060200190518101906144be9190615cbd565b155b1561058657604051635274afe760e01b81526001600160a01b0384166004820152602401610712565b5f613338833384614879565b6145026020820182614df5565b63ffffffff16158015614522575061451d602082018261524c565b151590505b15614569576145346020820182614df5565b614541602083018361524c565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610712565b614576602082018261524c565b90506145856020830183614df5565b63ffffffff16111561459e576145346020820182614df5565b60015b6145ae602083018361524c565b9050811015611508576145c4602083018361524c565b6145cf600184615c56565b8181106145de576145de615291565b90506020020160208101906145f39190615231565b6001600160a01b0316614609602084018461524c565b8381811061461957614619615291565b905060200201602081019061462e9190615231565b6001600160a01b0316101561465657604051630dbc8d5f60e31b815260040160405180910390fd5b6001016145a1565b6146666140c3565b61466e6149dc565b610f75816149e4565b61467f6140c3565b61410c614acc565b61468f6140c3565b5f6146986126cc565b905061ffff861615806146b0575061271061ffff8716115b156146d457604051635f12e6c360e11b815261ffff87166004820152602401610712565b878911156146f85760405163222d164360e21b8152600481018a9052602401610712565b60ff8516158061470b5750600a60ff8616115b1561472e5760405163170db35960e31b815260ff86166004820152602401610712565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614795576040516202a06d60e11b81526001600160401b0388166004820152602401610712565b835f036147b55760405163a733007160e01b815260040160405180910390fd5b816147d657604051632f6bd1db60e01b815260048101839052602401610712565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b606061333883835f614ad4565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148e3919061521a565b90506148fa6001600160a01b038616853086614b63565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa15801561493e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614962919061521a565b90508181116149c85760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610712565b6149d28282615c56565b9695505050505050565b61410c6140c3565b6149ec6140c3565b80355f80516020615cf98339815191529081556014614a116060840160408501615c82565b60ff161180614a305750614a2b6060830160408401615c82565b60ff16155b15614a6457614a456060830160408401615c82565b604051634a59bbff60e11b815260ff9091166004820152602401610712565b614a746060830160408401615c82565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa56040830160208401614e9a565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612d496140c3565b606081471015614af95760405163cd78605960e01b8152306004820152602401610712565b5f80856001600160a01b03168486604051614b14919061538b565b5f6040518083038185875af1925050503d805f8114614b4e576040519150601f19603f3d011682016040523d82523d5f602084013e614b53565b606091505b50915091506149d2868383614b9c565b6040516001600160a01b0384811660248301528381166044830152606482018390526108159186918216906323b872dd90608401613a9c565b606082614bb157614bac82614bf8565b613338565b8151158015614bc857506001600160a01b0384163b155b15614bf157604051639996b31560e01b81526001600160a01b0385166004820152602401610712565b5080613338565b805115614c085780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c2d90615096565b5f825580601f10614c3c575050565b601f0160209004905f5260205f2090810190610f759190614c95565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614ca9575f8155600101614c96565b5090565b8015158114610f75575f80fd5b803563ffffffff81168114614ccd575f80fd5b919050565b5f805f60608486031215614ce4575f80fd5b833592506020840135614cf681614cad565b9150614d0460408501614cba565b90509250925092565b5f60208284031215614d1d575f80fd5b5035919050565b5f8060408385031215614d35575f80fd5b82356001600160401b03811115614d4a575f80fd5b830160808186031215614d5b575f80fd5b9150614d6960208401614cba565b90509250929050565b5f8060408385031215614d83575f80fd5b82359150614d6960208401614cba565b6001600160a01b0381168114610f75575f80fd5b5f805f8060808587031215614dba575f80fd5b843593506020850135614dcc81614cad565b9250614dda60408601614cba565b91506060850135614dea81614d93565b939692955090935050565b5f60208284031215614e05575f80fd5b61333882614cba565b803561ffff81168114614ccd575f80fd5b6001600160401b0381168114610f75575f80fd5b5f805f8060808587031215614e46575f80fd5b84356001600160401b03811115614e5b575f80fd5b850160a08188031215614e6c575f80fd5b9350614e7a60208601614e0e565b92506040850135614e8a81614e1f565b9396929550929360600135925050565b5f60208284031215614eaa575f80fd5b813561333881614e1f565b5f8060408385031215614ec6575f80fd5b823591506020830135614ed881614d93565b809150509250929050565b5f8060408385031215614ef4575f80fd5b50508035926020909101359150565b5f80828403610180811215614f16575f80fd5b61016080821215614f25575f80fd5b8493508301359050614ed881614d93565b634e487b7160e01b5f52602160045260245ffd5b60068110614f5a57614f5a614f36565b9052565b5f5b83811015614f78578181015183820152602001614f60565b50505f910152565b5f8151808452614f97816020860160208601614f5e565b601f01601f19169290920160200192915050565b60208152614fbd602082018351614f4a565b5f602083015160e06040840152614fd8610100840182614f80565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f806020838503121561503c575f80fd5b82356001600160401b0380821115615052575f80fd5b818501915085601f830112615065575f80fd5b813581811115615073575f80fd5b866020828501011115615084575f80fd5b60209290920196919550909350505050565b600181811c908216806150aa57607f821691505b6020821081036150c857634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610e6e8284614f4a565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715615112576151126150dc565b60405290565b604080519081016001600160401b0381118282101715615112576151126150dc565b604051601f8201601f191681016001600160401b0381118282101715615162576151626150dc565b604052919050565b5f6001600160401b03821115615182576151826150dc565b50601f01601f191660200190565b5f82601f83011261519f575f80fd5b81516151b26151ad8261516a565b61513a565b8181528460208386010111156151c6575f80fd5b610fa5826020830160208701614f5e565b5f602082840312156151e7575f80fd5b81516001600160401b038111156151fc575f80fd5b610fa584828501615190565b602081525f6133386020830184614f80565b5f6020828403121561522a575f80fd5b5051919050565b5f60208284031215615241575f80fd5b813561333881614d93565b5f808335601e19843603018112615261575f80fd5b8301803591506001600160401b0382111561527a575f80fd5b6020019150600581901b3603821315613529575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152b9575f80fd5b9190910192915050565b5f82601f8301126152d2575f80fd5b81356152e06151ad8261516a565b8181528460208386010111156152f4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615320575f80fd5b6153286150f0565b82356001600160401b038082111561533e575f80fd5b61534a368387016152c3565b8352602085013591508082111561535f575f80fd5b5061536c368286016152c3565b602083015250604083013561538081614e1f565b604082015292915050565b5f82516152b9818460208701614f5e565b601f82111561058657805f5260205f20601f840160051c810160208510156153c15750805b601f840160051c820191505b81811015610e80575f81556001016153cd565b81516001600160401b038111156153f9576153f96150dc565b61540d816154078454615096565b8461539c565b602080601f831160018114615440575f84156154295750858301515b5f19600386901b1c1916600185901b1785556110dd565b5f85815260208120601f198616915b8281101561546e5788860151825594840194600190910190840161544f565b508582101561548b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610e6e57610e6e61549b565b5f63ffffffff8083168181036154da576154da61549b565b6001019392505050565b8082028115828204841417610e6e57610e6e61549b565b5f808335601e19843603018112615510575f80fd5b83016020810192503590506001600160401b0381111561552e575f80fd5b803603821315613529575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561561957848303601f19018952813536889003605e190181126155a0575f80fd5b870160606155ae82806154fb565b8287526155be838801828461553c565b925050506155ce868301836154fb565b868303888801526155e083828461553c565b9250505060408083013592506155f583614e1f565b6001600160401b03929092169490910193909352978301979083019060010161557b565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561564a81614d93565b6001600160a01b031660608381019190915283013536849003601e19018112615671575f80fd5b83016020810190356001600160401b0381111561568c575f80fd5b8060051b360382131561569d575f80fd5b6080808501526156b160a085018284615564565b95945050505050565b5f826156d457634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106156ed576156ed614f36565b91905290565b5f805f60608486031215615705575f80fd5b83519250602084015161571781614e1f565b604085015190925061572881614e1f565b809150509250925092565b5f8060408385031215615744575f80fd5b825191506020830151614ed881614cad565b5f60208083525f845461576881615096565b806020870152604060018084165f811461578957600181146157a5576157d2565b60ff19851660408a0152604084151560051b8a010195506157d2565b895f5260205f205f5b858110156157c95781548b82018601529083019088016157ae565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156123fd576123fd61549b565b6001600160401b038281168282160390808211156123fd576123fd61549b565b5f8060408385031215615840575f80fd5b82516001600160401b0380821115615856575f80fd5b9084019060608287031215615869575f80fd5b6158716150f0565b82518152602083015161588381614d93565b6020820152604083015182811115615899575f80fd5b6158a588828601615190565b6040830152508094505050506020830151614ed881614cad565b5f80604083850312156158d0575f80fd5b825191506020830151614ed881614e1f565b6001600160401b038181168382160280821691908281146159055761590561549b565b505092915050565b5f8235603e198336030181126152b9575f80fd5b5f808335601e19843603018112615936575f80fd5b8301803591506001600160401b0382111561594f575f80fd5b602001915036819003821315613529575f80fd5b602081525f610fa560208301848661553c565b5f60408236031215615986575f80fd5b61598e615118565b61599783614cba565b81526020808401356001600160401b03808211156159b3575f80fd5b9085019036601f8301126159c5575f80fd5b8135818111156159d7576159d76150dc565b8060051b91506159e884830161513a565b8181529183018401918481019036841115615a01575f80fd5b938501935b83851015615a2b5784359250615a1b83614d93565b8282529385019390850190615a06565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615a985784516001600160a01b03168252938301936001929092019190830190615a6f565b509695505050505050565b60208152815160208201525f602083015160e06040840152615ac9610100840182614f80565b90506040840151601f1980858403016060860152615ae78383614f80565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b178383615a3d565b925060a08601519150808584030160c086015250615b358282615a3d565b91505060c0840151615b5260e08501826001600160401b03169052565b509392505050565b5f8060408385031215615b6b575f80fd5b8251915060208301516001600160401b03811115615b87575f80fd5b615b9385828601615190565b9150509250929050565b6001600160401b03831115615bb457615bb46150dc565b615bc883615bc28354615096565b8361539c565b5f601f841160018114615bf9575f8515615be25750838201355b5f19600387901b1c1916600186901b178355610e80565b5f83815260208120601f198716915b82811015615c285786850135825560209485019460019092019101615c08565b5086821015615c44575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610e6e57610e6e61549b565b5f60208284031215615c79575f80fd5b61333882614e0e565b5f60208284031215615c92575f80fd5b813560ff81168114613338575f80fd5b5f6001600160401b038083168181036154da576154da61549b565b5f60208284031215615ccd575f80fd5b815161333881614cad56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220867614b8b054b4e521199dd7bfc2eb3b65806a1b8cd67dead4bafc97554b6a6c64736f6c63430008190033", } // 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 7359ff486..1f46d0ddd 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -104,7 +104,7 @@ type ValidatorRegistrationInput 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\":\"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\":[{\"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\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"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\":\"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\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"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\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"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\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"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\":\"DelegatorAdded\",\"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\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"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\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"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_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndValidation\",\"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\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"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\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndValidation\",\"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\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"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\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"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\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"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: "0x608060405234801561000f575f80fd5b50604051615c3a380380615c3a83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615aed8061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614abf565b610724565b005b348015610263575f80fd5b50610256610272366004614afa565b610735565b348015610282575f80fd5b50610256610291366004614b11565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614abf565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614b28565b610aae565b34801561030a575f80fd5b50610256610319366004614b76565b611033565b348015610329575f80fd5b5061033d610338366004614afa565b6110a7565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614bab565b6110fb565b3480156103d9575f80fd5b506102566103e8366004614abf565b61110e565b3480156103f8575f80fd5b50610256610407366004614bf9565b61111a565b348015610417575f80fd5b50610256610426366004614bab565b6111ff565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614b76565b61120b565b34801561047e575f80fd5b5061049261048d366004614c26565b6114d8565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614afa565b6114f8565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614abf565b61150c565b3480156104fc575f80fd5b5061025661050b366004614bab565b611518565b34801561051b575f80fd5b5061025661052a366004614b76565b611524565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614c41565b61175e565b34801561056d575f80fd5b5061025661057c366004614afa565b611840565b34801561058c575f80fd5b5061025661059b366004614bab565b6118d4565b3480156105ab575f80fd5b506102566105ba366004614bf9565b6118e0565b6104926105cd366004614c80565b611ad5565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614afa565b611b09565b348015610649575f80fd5b506104925f80516020615a5883398151915281565b348015610669575f80fd5b50610256610678366004614afa565b611d62565b61049261068b366004614afa565b611e9f565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614afa565b611ed0565b6040516102b89190614d56565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614c41565b61201f565b348015610710575f80fd5b5061049261071f366004614dd6565b6120e6565b6107308383835f612141565b505050565b5f8181525f80516020615a988339815191526020526040808220815160e0810190925280545f80516020615a5883398151915293929190829060ff16600581111561078257610782614ce1565b600581111561079357610793614ce1565b81526020016001820180546107a790614e41565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614e41565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614ce1565b146108c5575f8381526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e73565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190614f7c565b6040518263ffffffff1660e01b815260040161097f9190614fad565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf9190614fbf565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a568361216d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f61217e565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615a588339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b679190614fbf565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba16060850160408601614fd6565b6001600160a01b031614610be457610bbf6060840160408501614fd6565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf26060850185614ff1565b905090505f805b828163ffffffff161015610e59575f610c156060880188614ff1565b8363ffffffff16818110610c2b57610c2b615036565b9050602002810190610c3d919061504a565b610c46906150b5565b80516040519192505f916008880191610c5e91615130565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc9190600401614fad565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd791615130565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d159190614fbf565b90508086600801835f0151604051610d2d9190615130565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610d6d9082615185565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610dec9085615254565b8251604051919550610dfd91615130565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610e5290615267565b9050610bf9565b50600483018190556001830154606490610e7d90600160401b900460ff1683615289565b1015610e9f57604051635943317f60e01b8152600481018290526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ec3876124b3565b604001516040518263ffffffff1660e01b8152600401610ee39190614fad565b602060405180830381865af4158015610efe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f229190614fbf565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f5c91906153cb565b5f60405180830381865af4158015610f76573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f9d9190810190614f7c565b90505f600282604051610fb09190615130565b602060405180830381855afa158015610fcb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610fee9190614fbf565b905082811461101a5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506009909201805460ff1916600117905550505050565b61103c826125c9565b61105c576040516330efa98b60e01b8152600481018390526024016108bc565b5f61106683611ed0565b519050600281600581111561107d5761107d614ce1565b1461109d578060405163170cc93360e21b81526004016108bc9190614e73565b6109bf83836125f2565b5f806110b1612891565b600301546110bf908461545f565b90508015806110d457506001600160401b0381115b156110f55760405163222d164360e21b8152600481018490526024016108bc565b92915050565b6111078484848461217e565b5050505050565b6109bf8383835f6128b5565b611122612ad7565b5f61112b612891565b90505f8061113884612b0e565b91509150611145826125c9565b611151575050506111e6565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b039182169116806111885750806111a6565b5f848152600b86016020526040902080546001600160a01b03191690555b6004835160058111156111bb576111bb614ce1565b036111ca576111ca8185612ec1565b6111e0826111db85604001516114d8565b612eeb565b50505050505b6111fc60015f80516020615a7883398151915255565b50565b6109bf84848484612f11565b5f611214612891565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561124d5761124d614ce1565b600381111561125e5761125e614ce1565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112d482611ed0565b90506001835160038111156112eb576112eb614ce1565b1461130c578251604051633b0d540d60e21b81526108bc919060040161547e565b60048151600581111561132157611321614ce1565b036113375761132f86612f3d565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61135c896124b3565b604001516040518263ffffffff1660e01b815260040161137c9190614fad565b606060405180830381865af4158015611397573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113bb9190615498565b50915091508184146113e857846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b031610806114215750806001600160401b03168560a001516001600160401b0316115b1561144a57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114e1612891565b600301546110f5906001600160401b038416615289565b5f61150282611ed0565b6080015192915050565b6107308383835f612f11565b611107848484846128b5565b61152c612ad7565b5f611535612891565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561156e5761156e614ce1565b600381111561157f5761157f614ce1565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156115f8576115f8614ce1565b14611619578051604051633b0d540d60e21b81526108bc919060040161547e565b60046116288260400151611ed0565b51600581111561163a5761163a614ce1565b14611739575f611649846124b3565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116889190614fad565b606060405180830381865af41580156116a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c79190615498565b5091509150818460400151146116f35760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561173557604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61174284612f3d565b505061175a60015f80516020615a7883398151915255565b5050565b6001600160a01b0381166117905760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f611799612891565b5f8481526006820160205260409020549091506001600160a01b031633146117e257335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b336001600160a01b03831603611811575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f611849612891565b90505f61185583611ed0565b519050600481600581111561186c5761186c614ce1565b1461188c578060405163170cc93360e21b81526004016108bc9190614e73565b5f8381526006830160205260409020546001600160a01b031633146118b157336117bd565b5f838152600683016020526040902054610730906001600160a01b031684612ec1565b6109bf84848484612141565b5f80516020615a588339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f611913866124b3565b604001516040518263ffffffff1660e01b81526004016119339190614fad565b6040805180830381865af415801561194d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197191906154cd565b915091508061199757604051632d07135360e01b815281151560048201526024016108bc565b5f828152600684016020526040902080546119b190614e41565b90505f036119d55760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078501602052604090205460ff1660058111156119fb576119fb614ce1565b14611a2e575f8281526007840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e73565b5f8281526006840160205260408120611a4691614a13565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611ade612ad7565b611aea8484843461314a565b9050611b0260015f80516020615a7883398151915255565b9392505050565b5f611b12612891565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b4b57611b4b614ce1565b6003811115611b5c57611b5c614ce1565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611bd557611bd5614ce1565b14158015611bf65750600381516003811115611bf357611bf3614ce1565b14155b15611c17578051604051633b0d540d60e21b81526108bc919060040161547e565b5f611c258260400151611ed0565b905080606001516001600160401b03165f03611c57576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611cc593906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611cdf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d069190810190614f7c565b6040518263ffffffff1660e01b8152600401611d229190614fad565b6020604051808303815f875af1158015611d3e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111079190614fbf565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615a588339815191529190611da990614e41565b90505f03611dcd5760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078301602052604090205460ff166005811115611df357611df3614ce1565b14611e26575f8281526007820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e73565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611e5f91906004016154f0565b6020604051808303815f875af1158015611e7b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107309190614fbf565b5f611ea8612ad7565b611eb38233346132a4565b9050611ecb60015f80516020615a7883398151915255565b919050565b611ed8614a4a565b5f8281525f80516020615a98833981519152602052604090819020815160e0810190925280545f80516020615a58833981519152929190829060ff166005811115611f2557611f25614ce1565b6005811115611f3657611f36614ce1565b8152602001600182018054611f4a90614e41565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7690614e41565b8015611fc15780601f10611f9857610100808354040283529160200191611fc1565b820191905f5260205f20905b815481529060010190602001808311611fa457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b0381166120515760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f61205a612891565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461208857336117bd565b336001600160a01b038316036120b7575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615a58833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890612129908690869061557a565b90815260200160405180910390205491505092915050565b61214d8484848461217e565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b6121756134e4565b6111fc8161352f565b5f80612188612891565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156121c1576121c1614ce1565b60038111156121d2576121d2614ce1565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61224882611ed0565b905060028351600381111561225f5761225f614ce1565b14612280578251604051633b0d540d60e21b81526108bc919060040161547e565b60208301516001600160a01b0316331461231c575f8281526006850160205260409020546001600160a01b031633146122b957336117bd565b5f82815260068501602052604090205460a08201516122e891600160b01b90046001600160401b031690615589565b6001600160401b031642101561231c5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b60028151600581111561233157612331614ce1565b036124535760028401546080840151612353916001600160401b031690615589565b6001600160401b03164210156123875760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b87156123995761239782886125f2565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516123d29184916123cd91906155a9565b6135a9565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561241584888c613780565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506124ab9350505050565b60048151600581111561246857612468614ce1565b0361248f5761247883878b613780565b5061248289612f3d565b60019450505050506124ab565b805160405163170cc93360e21b81526108bc9190600401614e73565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612517573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261253e91908101906155c9565b915091508061256057604051636b2f19e960e01b815260040160405180910390fd5b815115612586578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b0316156125c2576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f806125d3612891565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa15801561263d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261266491908101906155c9565b915091508061268657604051636b2f19e960e01b815260040160405180910390fd5b5f61268f612891565b60058101548451919250146126bd578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b0316156126f9576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b031615612735576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016127729190614fad565b6040805180830381865af415801561278c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127b09190615659565b915091508188146127d75760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b039081169082161115612868575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612886565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806128bf612891565b90505f6128cb87613965565b90506128d6876125c9565b6128e5576001925050506124ab565b5f8781526006830160205260409020546001600160a01b0316331461290a57336117bd565b5f87815260068301602052604090205460a082015161293991600160b01b90046001600160401b031690615589565b6001600160401b03168160c001516001600160401b031610156129805760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f86156129985761299188876125f2565b90506129b6565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906129db906114d8565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612a44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a689190614fbf565b90508084600a015f8b81526020019081526020015f205f828254612a8c9190615254565b90915550506001600160a01b03861615612ac9575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615a78833981519152805460011901612b0857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612b17614a4a565b5f80516020615a588339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612b4a886124b3565b604001516040518263ffffffff1660e01b8152600401612b6a9190614fad565b6040805180830381865af4158015612b84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba891906154cd565b915091508015612bcf57604051632d07135360e01b815281151560048201526024016108bc565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612c0057612c00614ce1565b6005811115612c1157612c11614ce1565b8152602001600182018054612c2590614e41565b80601f0160208091040260200160405190810160405280929190818152602001828054612c5190614e41565b8015612c9c5780601f10612c7357610100808354040283529160200191612c9c565b820191905f5260205f20905b815481529060010190602001808311612c7f57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612d0757612d07614ce1565b14158015612d285750600181516005811115612d2557612d25614ce1565b14155b15612d4957805160405163170cc93360e21b81526108bc9190600401614e73565b600381516005811115612d5e57612d5e614ce1565b03612d6c5760048152612d71565b600581525b836008018160200151604051612d879190615130565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612dcb57612dcb614ce1565b021790555060208201516001820190612de49082615185565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612e8a57612e8a614ce1565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612eca612891565b5f838152600a82016020526040812080549190559091506109bf8482613c49565b61175a6001600160a01b03831682613ca7565b60015f80516020615a7883398151915255565b612f1d848484846128b5565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612f46612891565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f7f57612f7f614ce1565b6003811115612f9057612f90614ce1565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015281015190915061302d7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b826080015161303c9190615589565b6001600160401b03164210156130705760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130c0575060208201516130de565b5f858152600985016020526040902080546001600160a01b03191690555b5f806130eb838886613d3a565b9150915061310485602001516111db87606001516114d8565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80613154612891565b600281015490915061ffff600160401b9091048116908616108061317d575061271061ffff8616115b156131a157604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b0390811690851610156131dd576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b80548310806131ef5750806001015483115b156132105760405163222d164360e21b8152600481018490526024016108bc565b825f61321b826110a7565b90505f6132288983613de7565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f806132ae612891565b90505f6132ba846110a7565b90505f6132c687611ed0565b90506132d1876125c9565b6132f1576040516330efa98b60e01b8152600481018890526024016108bc565b60028151600581111561330657613306614ce1565b1461332757805160405163170cc93360e21b81526108bc9190600401614e73565b5f8282608001516133389190615589565b905083600201600a9054906101000a90046001600160401b03168260400151613361919061567c565b6001600160401b0316816001600160401b0316111561339e57604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f806133aa8a846135a9565b915091505f8a836040516020016133d892919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661352d57604051631afcd79f60e31b815260040160405180910390fd5b565b6135376134e4565b6135408161430c565b613548614325565b6111fc6060820135608083013561356560c0850160a08601614c26565b61357560e0860160c087016156a7565b613586610100870160e088016156c0565b61010087013561359e61014089016101208a01614fd6565b886101400135614335565b5f8281525f80516020615a98833981519152602052604081206002015481905f80516020615a5883398151915290600160801b90046001600160401b03166135f1858261451a565b5f6135fb8761473d565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156136a4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136cb9190810190614f7c565b6040518263ffffffff1660e01b81526004016136e79190614fad565b6020604051808303815f875af1158015613703573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137279190614fbf565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061378a612891565b90505f61379a8660400151611ed0565b90505f6003825160058111156137b2576137b2614ce1565b14806137d057506004825160058111156137ce576137ce614ce1565b145b156137e0575060c081015161381d565b6002825160058111156137f5576137f5614ce1565b0361380157504261381d565b815160405163170cc93360e21b81526108bc9190600401614e73565b86608001516001600160401b0316816001600160401b031611613845575f9350505050611b02565b600483015460608801515f916001600160a01b031690634f22429f9061386a906114d8565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa1580156138eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061390f9190614fbf565b5f878152600886016020526040902081905590506001600160a01b03871615612886575f868152600985016020526040902080546001600160a01b0319166001600160a01b038916179055979650505050505050565b61396d614a4a565b5f8281525f80516020615a988339815191526020526040808220815160e0810190925280545f80516020615a5883398151915293929190829060ff1660058111156139ba576139ba614ce1565b60058111156139cb576139cb614ce1565b81526020016001820180546139df90614e41565b80601f0160208091040260200160405190810160405280929190818152602001828054613a0b90614e41565b8015613a565780601f10613a2d57610100808354040283529160200191613a56565b820191905f5260205f20905b815481529060010190602001808311613a3957829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613ac457613ac4614ce1565b14613af7575f8481526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e73565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613b3b57613b3b614ce1565b021790555060208201516001820190613b549082615185565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613bf285826135a9565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613c95575f80fd5b505af115801561132f573d5f803e3d5ffd5b80471015613cca5760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613d13576040519150601f19603f3d011682016040523d82523d5f602084013e613d18565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d45612891565b5f86815260088201602052604081208054908290559192509081908015613dd9575f87815260068501602052604090205461271090613d8f90600160a01b900461ffff1683615289565b613d99919061545f565b91508184600a015f8981526020019081526020015f205f828254613dbd9190615254565b90915550613dcd905082826156e0565b9250613dd98984613c49565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613e2b57604051637fab81e560e01b815260040160405180910390fd5b5f80516020615a5883398151915242613e4a6060860160408701614c26565b6001600160401b0316111580613e845750613e686202a30042615254565b613e786060860160408701614c26565b6001600160401b031610155b15613ebe57613e996060850160408601614c26565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b613ed3613ece60608601866156f3565b6147b2565b613ee3613ece60808601866156f3565b6030613ef26020860186615707565b905014613f2457613f066020850185615707565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613f2e8480615707565b90505f03613f5b57613f408480615707565b604051633e08a12560e11b81526004016108bc929190615749565b5f60088201613f6a8680615707565b604051613f7892919061557a565b90815260200160405180910390205414613fb157613f968480615707565b60405163a41f772f60e01b81526004016108bc929190615749565b613fbb835f61451a565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613ff88a80615707565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190614040908b018b615707565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060200161408960608b0160408c01614c26565b6001600160401b031681526020016140a460608b018b6156f3565b6140ad9061575c565b81526020016140bf60808b018b6156f3565b6140c89061575c565b8152602001886001600160401b03168152506040518263ffffffff1660e01b81526004016140f69190615889565b5f60405180830381865af4158015614110573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141379190810190615940565b5f828152600686016020526040902091935091506141558282615185565b5081600884016141658880615707565b60405161417392919061557a565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141af908590600401614fad565b6020604051808303815f875af11580156141cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141ef9190614fbf565b5f8481526007860160205260409020805460ff1916600117905590506142158780615707565b5f858152600787016020526040902060010191614233919083615983565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806142928880615707565b6040516142a092919061557a565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b60400160208101906142de9190614c26565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b6143146134e4565b61431c61491b565b6111fc81614923565b61432d6134e4565b61352d614a0b565b61433d6134e4565b5f614346612891565b905061ffff8616158061435e575061271061ffff8716115b1561438257604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156143a65760405163222d164360e21b8152600481018a90526024016108bc565b60ff851615806143b95750600a60ff8616115b156143dc5760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614443576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f036144635760405163a733007160e01b815260040160405180910390fd5b8161448457604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615a588339815191525f6001600160401b03808416908516111561454e5761454783856155a9565b905061455b565b61455884846155a9565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806145bd5750600184015481516145b9916001600160401b031690615254565b8210155b156145e3576001600160401b038316606082015281815260408101516020820152614602565b82816060018181516145f59190615589565b6001600160401b03169052505b606081015161461290606461567c565b602082015160018601546001600160401b03929092169161463d9190600160401b900460ff16615289565b101561466d57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b856001600160401b0316816040018181516146889190615254565b9052506040810180516001600160401b03871691906146a89083906156e0565b905250600184015460408201516064916146cd91600160401b90910460ff1690615289565b10156146f4578060400151604051635943317f60e01b81526004016108bc91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615a988339815191526020526040812060020180545f80516020615a58833981519152919060089061478790600160401b90046001600160401b0316615a3c565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6147bf6020820182614bf9565b63ffffffff161580156147df57506147da6020820182614ff1565b151590505b15614826576147f16020820182614bf9565b6147fe6020830183614ff1565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b6148336020820182614ff1565b90506148426020830183614bf9565b63ffffffff16111561485b576147f16020820182614bf9565b60015b61486b6020830183614ff1565b905081101561175a576148816020830183614ff1565b61488c6001846156e0565b81811061489b5761489b615036565b90506020020160208101906148b09190614fd6565b6001600160a01b03166148c66020840184614ff1565b838181106148d6576148d6615036565b90506020020160208101906148eb9190614fd6565b6001600160a01b0316101561491357604051630dbc8d5f60e31b815260040160405180910390fd5b60010161485e565b61352d6134e4565b61492b6134e4565b80355f80516020615a58833981519152908155601461495060608401604085016156c0565b60ff16118061496f575061496a60608301604084016156c0565b60ff16155b156149a35761498460608301604084016156c0565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b6149b360608301604084016156c0565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149e46040830160208401614c26565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612efe6134e4565b508054614a1f90614e41565b5f825580601f10614a2e575050565b601f0160209004905f5260205f20908101906111fc9190614a87565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614a9b575f8155600101614a88565b5090565b80151581146111fc575f80fd5b803563ffffffff81168114611ecb575f80fd5b5f805f60608486031215614ad1575f80fd5b833592506020840135614ae381614a9f565b9150614af160408501614aac565b90509250925092565b5f60208284031215614b0a575f80fd5b5035919050565b5f6101608284031215614b22575f80fd5b50919050565b5f8060408385031215614b39575f80fd5b82356001600160401b03811115614b4e575f80fd5b830160808186031215614b5f575f80fd5b9150614b6d60208401614aac565b90509250929050565b5f8060408385031215614b87575f80fd5b82359150614b6d60208401614aac565b6001600160a01b03811681146111fc575f80fd5b5f805f8060808587031215614bbe575f80fd5b843593506020850135614bd081614a9f565b9250614bde60408601614aac565b91506060850135614bee81614b97565b939692955090935050565b5f60208284031215614c09575f80fd5b611b0282614aac565b6001600160401b03811681146111fc575f80fd5b5f60208284031215614c36575f80fd5b8135611b0281614c12565b5f8060408385031215614c52575f80fd5b823591506020830135614c6481614b97565b809150509250929050565b803561ffff81168114611ecb575f80fd5b5f805f60608486031215614c92575f80fd5b83356001600160401b03811115614ca7575f80fd5b840160a08187031215614cb8575f80fd5b9250614cc660208501614c6f565b91506040840135614cd681614c12565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d0557614d05614ce1565b9052565b5f5b83811015614d23578181015183820152602001614d0b565b50505f910152565b5f8151808452614d42816020860160208601614d09565b601f01601f19169290920160200192915050565b60208152614d68602082018351614cf5565b5f602083015160e06040840152614d83610100840182614d2b565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614de7575f80fd5b82356001600160401b0380821115614dfd575f80fd5b818501915085601f830112614e10575f80fd5b813581811115614e1e575f80fd5b866020828501011115614e2f575f80fd5b60209290920196919550909350505050565b600181811c90821680614e5557607f821691505b602082108103614b2257634e487b7160e01b5f52602260045260245ffd5b602081016110f58284614cf5565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614eb757614eb7614e81565b60405290565b604080519081016001600160401b0381118282101715614eb757614eb7614e81565b604051601f8201601f191681016001600160401b0381118282101715614f0757614f07614e81565b604052919050565b5f6001600160401b03821115614f2757614f27614e81565b50601f01601f191660200190565b5f82601f830112614f44575f80fd5b8151614f57614f5282614f0f565b614edf565b818152846020838601011115614f6b575f80fd5b6124ab826020830160208701614d09565b5f60208284031215614f8c575f80fd5b81516001600160401b03811115614fa1575f80fd5b6124ab84828501614f35565b602081525f611b026020830184614d2b565b5f60208284031215614fcf575f80fd5b5051919050565b5f60208284031215614fe6575f80fd5b8135611b0281614b97565b5f808335601e19843603018112615006575f80fd5b8301803591506001600160401b0382111561501f575f80fd5b6020019150600581901b3603821315613779575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261505e575f80fd5b9190910192915050565b5f82601f830112615077575f80fd5b8135615085614f5282614f0f565b818152846020838601011115615099575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150c5575f80fd5b6150cd614e95565b82356001600160401b03808211156150e3575f80fd5b6150ef36838701615068565b83526020850135915080821115615104575f80fd5b5061511136828601615068565b602083015250604083013561512581614c12565b604082015292915050565b5f825161505e818460208701614d09565b601f82111561073057805f5260205f20601f840160051c810160208510156151665750805b601f840160051c820191505b81811015611107575f8155600101615172565b81516001600160401b0381111561519e5761519e614e81565b6151b2816151ac8454614e41565b84615141565b602080601f8311600181146151e5575f84156151ce5750858301515b5f19600386901b1c1916600185901b17855561132f565b5f85815260208120601f198616915b82811015615213578886015182559484019460019091019084016151f4565b508582101561523057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808201808211156110f5576110f5615240565b5f63ffffffff80831681810361527f5761527f615240565b6001019392505050565b80820281158282048414176110f5576110f5615240565b5f808335601e198436030181126152b5575f80fd5b83016020810192503590506001600160401b038111156152d3575f80fd5b803603821315613779575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156153be57848303601f19018952813536889003605e19018112615345575f80fd5b8701606061535382806152a0565b82875261536383880182846152e1565b92505050615373868301836152a0565b868303888801526153858382846152e1565b92505050604080830135925061539a83614c12565b6001600160401b039290921694909101939093529783019790830190600101615320565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356153ef81614b97565b6001600160a01b031660608381019190915283013536849003601e19018112615416575f80fd5b83016020810190356001600160401b03811115615431575f80fd5b8060051b3603821315615442575f80fd5b60808085015261545660a085018284615309565b95945050505050565b5f8261547957634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061549257615492614ce1565b91905290565b5f805f606084860312156154aa575f80fd5b8351925060208401516154bc81614c12565b6040850151909250614cd681614c12565b5f80604083850312156154de575f80fd5b825191506020830151614c6481614a9f565b5f60208083525f845461550281614e41565b806020870152604060018084165f8114615523576001811461553f5761556c565b60ff19851660408a0152604084151560051b8a0101955061556c565b895f5260205f205f5b858110156155635781548b8201860152908301908801615548565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156125c2576125c2615240565b6001600160401b038281168282160390808211156125c2576125c2615240565b5f80604083850312156155da575f80fd5b82516001600160401b03808211156155f0575f80fd5b9084019060608287031215615603575f80fd5b61560b614e95565b82518152602083015161561d81614b97565b6020820152604083015182811115615633575f80fd5b61563f88828601614f35565b6040830152508094505050506020830151614c6481614a9f565b5f806040838503121561566a575f80fd5b825191506020830151614c6481614c12565b6001600160401b0381811683821602808216919082811461569f5761569f615240565b505092915050565b5f602082840312156156b7575f80fd5b611b0282614c6f565b5f602082840312156156d0575f80fd5b813560ff81168114611b02575f80fd5b818103818111156110f5576110f5615240565b5f8235603e1983360301811261505e575f80fd5b5f808335601e1984360301811261571c575f80fd5b8301803591506001600160401b03821115615735575f80fd5b602001915036819003821315613779575f80fd5b602081525f6124ab6020830184866152e1565b5f6040823603121561576c575f80fd5b615774614ebd565b61577d83614aac565b81526020808401356001600160401b0380821115615799575f80fd5b9085019036601f8301126157ab575f80fd5b8135818111156157bd576157bd614e81565b8060051b91506157ce848301614edf565b81815291830184019184810190368411156157e7575f80fd5b938501935b83851015615811578435925061580183614b97565b82825293850193908501906157ec565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b8083101561587e5784516001600160a01b03168252938301936001929092019190830190615855565b509695505050505050565b60208152815160208201525f602083015160e060408401526158af610100840182614d2b565b90506040840151601f19808584030160608601526158cd8383614d2b565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526158fd8383615823565b925060a08601519150808584030160c08601525061591b8282615823565b91505060c084015161593860e08501826001600160401b03169052565b509392505050565b5f8060408385031215615951575f80fd5b8251915060208301516001600160401b0381111561596d575f80fd5b61597985828601614f35565b9150509250929050565b6001600160401b0383111561599a5761599a614e81565b6159ae836159a88354614e41565b83615141565b5f601f8411600181146159df575f85156159c85750838201355b5f19600387901b1c1916600186901b178355611107565b5f83815260208120601f198716915b82811015615a0e57868501358255602094850194600190920191016159ee565b5086821015615a2a575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b0380831681810361527f5761527f61524056fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a26469706673582212204c1a7d94b509d38fc318a61418a702424651ca97c0a7c9db8400f184e3b73e8764736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615c3a380380615c3a83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615aed8061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614abf565b610724565b005b348015610263575f80fd5b50610256610272366004614afa565b610735565b348015610282575f80fd5b50610256610291366004614b11565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614abf565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614b28565b610aae565b34801561030a575f80fd5b50610256610319366004614b76565b611033565b348015610329575f80fd5b5061033d610338366004614afa565b6110a7565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614bab565b6110fb565b3480156103d9575f80fd5b506102566103e8366004614abf565b61110e565b3480156103f8575f80fd5b50610256610407366004614bf9565b61111a565b348015610417575f80fd5b50610256610426366004614bab565b6111ff565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614b76565b61120b565b34801561047e575f80fd5b5061049261048d366004614c26565b6114d8565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614afa565b6114f8565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614abf565b61150c565b3480156104fc575f80fd5b5061025661050b366004614bab565b611518565b34801561051b575f80fd5b5061025661052a366004614b76565b611524565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614c41565b61175e565b34801561056d575f80fd5b5061025661057c366004614afa565b611840565b34801561058c575f80fd5b5061025661059b366004614bab565b6118d4565b3480156105ab575f80fd5b506102566105ba366004614bf9565b6118e0565b6104926105cd366004614c80565b611ad5565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614afa565b611b09565b348015610649575f80fd5b506104925f80516020615a5883398151915281565b348015610669575f80fd5b50610256610678366004614afa565b611d62565b61049261068b366004614afa565b611e9f565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614afa565b611ed0565b6040516102b89190614d56565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614c41565b61201f565b348015610710575f80fd5b5061049261071f366004614dd6565b6120e6565b6107308383835f612141565b505050565b5f8181525f80516020615a988339815191526020526040808220815160e0810190925280545f80516020615a5883398151915293929190829060ff16600581111561078257610782614ce1565b600581111561079357610793614ce1565b81526020016001820180546107a790614e41565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614e41565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614ce1565b146108c5575f8381526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e73565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190614f7c565b6040518263ffffffff1660e01b815260040161097f9190614fad565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf9190614fbf565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a568361216d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f61217e565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615a588339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b679190614fbf565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba16060850160408601614fd6565b6001600160a01b031614610be457610bbf6060840160408501614fd6565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf26060850185614ff1565b905090505f805b828163ffffffff161015610e59575f610c156060880188614ff1565b8363ffffffff16818110610c2b57610c2b615036565b9050602002810190610c3d919061504a565b610c46906150b5565b80516040519192505f916008880191610c5e91615130565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc9190600401614fad565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd791615130565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d159190614fbf565b90508086600801835f0151604051610d2d9190615130565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610d6d9082615185565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610dec9085615254565b8251604051919550610dfd91615130565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610e5290615267565b9050610bf9565b50600483018190556001830154606490610e7d90600160401b900460ff1683615289565b1015610e9f57604051635943317f60e01b8152600481018290526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ec3876124b3565b604001516040518263ffffffff1660e01b8152600401610ee39190614fad565b602060405180830381865af4158015610efe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f229190614fbf565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f5c91906153cb565b5f60405180830381865af4158015610f76573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f9d9190810190614f7c565b90505f600282604051610fb09190615130565b602060405180830381855afa158015610fcb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610fee9190614fbf565b905082811461101a5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506009909201805460ff1916600117905550505050565b61103c826125c9565b61105c576040516330efa98b60e01b8152600481018390526024016108bc565b5f61106683611ed0565b519050600281600581111561107d5761107d614ce1565b1461109d578060405163170cc93360e21b81526004016108bc9190614e73565b6109bf83836125f2565b5f806110b1612891565b600301546110bf908461545f565b90508015806110d457506001600160401b0381115b156110f55760405163222d164360e21b8152600481018490526024016108bc565b92915050565b6111078484848461217e565b5050505050565b6109bf8383835f6128b5565b611122612ad7565b5f61112b612891565b90505f8061113884612b0e565b91509150611145826125c9565b611151575050506111e6565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b039182169116806111885750806111a6565b5f848152600b86016020526040902080546001600160a01b03191690555b6004835160058111156111bb576111bb614ce1565b036111ca576111ca8185612ec1565b6111e0826111db85604001516114d8565b612eeb565b50505050505b6111fc60015f80516020615a7883398151915255565b50565b6109bf84848484612f11565b5f611214612891565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561124d5761124d614ce1565b600381111561125e5761125e614ce1565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112d482611ed0565b90506001835160038111156112eb576112eb614ce1565b1461130c578251604051633b0d540d60e21b81526108bc919060040161547e565b60048151600581111561132157611321614ce1565b036113375761132f86612f3d565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61135c896124b3565b604001516040518263ffffffff1660e01b815260040161137c9190614fad565b606060405180830381865af4158015611397573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113bb9190615498565b50915091508184146113e857846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b031610806114215750806001600160401b03168560a001516001600160401b0316115b1561144a57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114e1612891565b600301546110f5906001600160401b038416615289565b5f61150282611ed0565b6080015192915050565b6107308383835f612f11565b611107848484846128b5565b61152c612ad7565b5f611535612891565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561156e5761156e614ce1565b600381111561157f5761157f614ce1565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156115f8576115f8614ce1565b14611619578051604051633b0d540d60e21b81526108bc919060040161547e565b60046116288260400151611ed0565b51600581111561163a5761163a614ce1565b14611739575f611649846124b3565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116889190614fad565b606060405180830381865af41580156116a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c79190615498565b5091509150818460400151146116f35760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561173557604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61174284612f3d565b505061175a60015f80516020615a7883398151915255565b5050565b6001600160a01b0381166117905760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f611799612891565b5f8481526006820160205260409020549091506001600160a01b031633146117e257335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b336001600160a01b03831603611811575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f611849612891565b90505f61185583611ed0565b519050600481600581111561186c5761186c614ce1565b1461188c578060405163170cc93360e21b81526004016108bc9190614e73565b5f8381526006830160205260409020546001600160a01b031633146118b157336117bd565b5f838152600683016020526040902054610730906001600160a01b031684612ec1565b6109bf84848484612141565b5f80516020615a588339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f611913866124b3565b604001516040518263ffffffff1660e01b81526004016119339190614fad565b6040805180830381865af415801561194d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197191906154cd565b915091508061199757604051632d07135360e01b815281151560048201526024016108bc565b5f828152600684016020526040902080546119b190614e41565b90505f036119d55760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078501602052604090205460ff1660058111156119fb576119fb614ce1565b14611a2e575f8281526007840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e73565b5f8281526006840160205260408120611a4691614a13565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611ade612ad7565b611aea8484843461314a565b9050611b0260015f80516020615a7883398151915255565b9392505050565b5f611b12612891565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b4b57611b4b614ce1565b6003811115611b5c57611b5c614ce1565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611bd557611bd5614ce1565b14158015611bf65750600381516003811115611bf357611bf3614ce1565b14155b15611c17578051604051633b0d540d60e21b81526108bc919060040161547e565b5f611c258260400151611ed0565b905080606001516001600160401b03165f03611c57576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611cc593906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611cdf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d069190810190614f7c565b6040518263ffffffff1660e01b8152600401611d229190614fad565b6020604051808303815f875af1158015611d3e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111079190614fbf565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615a588339815191529190611da990614e41565b90505f03611dcd5760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078301602052604090205460ff166005811115611df357611df3614ce1565b14611e26575f8281526007820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e73565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611e5f91906004016154f0565b6020604051808303815f875af1158015611e7b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107309190614fbf565b5f611ea8612ad7565b611eb38233346132a4565b9050611ecb60015f80516020615a7883398151915255565b919050565b611ed8614a4a565b5f8281525f80516020615a98833981519152602052604090819020815160e0810190925280545f80516020615a58833981519152929190829060ff166005811115611f2557611f25614ce1565b6005811115611f3657611f36614ce1565b8152602001600182018054611f4a90614e41565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7690614e41565b8015611fc15780601f10611f9857610100808354040283529160200191611fc1565b820191905f5260205f20905b815481529060010190602001808311611fa457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b0381166120515760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f61205a612891565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461208857336117bd565b336001600160a01b038316036120b7575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615a58833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890612129908690869061557a565b90815260200160405180910390205491505092915050565b61214d8484848461217e565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b6121756134e4565b6111fc8161352f565b5f80612188612891565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156121c1576121c1614ce1565b60038111156121d2576121d2614ce1565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61224882611ed0565b905060028351600381111561225f5761225f614ce1565b14612280578251604051633b0d540d60e21b81526108bc919060040161547e565b60208301516001600160a01b0316331461231c575f8281526006850160205260409020546001600160a01b031633146122b957336117bd565b5f82815260068501602052604090205460a08201516122e891600160b01b90046001600160401b031690615589565b6001600160401b031642101561231c5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b60028151600581111561233157612331614ce1565b036124535760028401546080840151612353916001600160401b031690615589565b6001600160401b03164210156123875760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b87156123995761239782886125f2565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516123d29184916123cd91906155a9565b6135a9565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561241584888c613780565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506124ab9350505050565b60048151600581111561246857612468614ce1565b0361248f5761247883878b613780565b5061248289612f3d565b60019450505050506124ab565b805160405163170cc93360e21b81526108bc9190600401614e73565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612517573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261253e91908101906155c9565b915091508061256057604051636b2f19e960e01b815260040160405180910390fd5b815115612586578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b0316156125c2576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f806125d3612891565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa15801561263d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261266491908101906155c9565b915091508061268657604051636b2f19e960e01b815260040160405180910390fd5b5f61268f612891565b60058101548451919250146126bd578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b0316156126f9576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b031615612735576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016127729190614fad565b6040805180830381865af415801561278c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127b09190615659565b915091508188146127d75760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b039081169082161115612868575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612886565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806128bf612891565b90505f6128cb87613965565b90506128d6876125c9565b6128e5576001925050506124ab565b5f8781526006830160205260409020546001600160a01b0316331461290a57336117bd565b5f87815260068301602052604090205460a082015161293991600160b01b90046001600160401b031690615589565b6001600160401b03168160c001516001600160401b031610156129805760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f86156129985761299188876125f2565b90506129b6565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906129db906114d8565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612a44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a689190614fbf565b90508084600a015f8b81526020019081526020015f205f828254612a8c9190615254565b90915550506001600160a01b03861615612ac9575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615a78833981519152805460011901612b0857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612b17614a4a565b5f80516020615a588339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612b4a886124b3565b604001516040518263ffffffff1660e01b8152600401612b6a9190614fad565b6040805180830381865af4158015612b84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba891906154cd565b915091508015612bcf57604051632d07135360e01b815281151560048201526024016108bc565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612c0057612c00614ce1565b6005811115612c1157612c11614ce1565b8152602001600182018054612c2590614e41565b80601f0160208091040260200160405190810160405280929190818152602001828054612c5190614e41565b8015612c9c5780601f10612c7357610100808354040283529160200191612c9c565b820191905f5260205f20905b815481529060010190602001808311612c7f57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612d0757612d07614ce1565b14158015612d285750600181516005811115612d2557612d25614ce1565b14155b15612d4957805160405163170cc93360e21b81526108bc9190600401614e73565b600381516005811115612d5e57612d5e614ce1565b03612d6c5760048152612d71565b600581525b836008018160200151604051612d879190615130565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612dcb57612dcb614ce1565b021790555060208201516001820190612de49082615185565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612e8a57612e8a614ce1565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612eca612891565b5f838152600a82016020526040812080549190559091506109bf8482613c49565b61175a6001600160a01b03831682613ca7565b60015f80516020615a7883398151915255565b612f1d848484846128b5565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612f46612891565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f7f57612f7f614ce1565b6003811115612f9057612f90614ce1565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015281015190915061302d7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b826080015161303c9190615589565b6001600160401b03164210156130705760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130c0575060208201516130de565b5f858152600985016020526040902080546001600160a01b03191690555b5f806130eb838886613d3a565b9150915061310485602001516111db87606001516114d8565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80613154612891565b600281015490915061ffff600160401b9091048116908616108061317d575061271061ffff8616115b156131a157604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b0390811690851610156131dd576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b80548310806131ef5750806001015483115b156132105760405163222d164360e21b8152600481018490526024016108bc565b825f61321b826110a7565b90505f6132288983613de7565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f806132ae612891565b90505f6132ba846110a7565b90505f6132c687611ed0565b90506132d1876125c9565b6132f1576040516330efa98b60e01b8152600481018890526024016108bc565b60028151600581111561330657613306614ce1565b1461332757805160405163170cc93360e21b81526108bc9190600401614e73565b5f8282608001516133389190615589565b905083600201600a9054906101000a90046001600160401b03168260400151613361919061567c565b6001600160401b0316816001600160401b0316111561339e57604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f806133aa8a846135a9565b915091505f8a836040516020016133d892919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661352d57604051631afcd79f60e31b815260040160405180910390fd5b565b6135376134e4565b6135408161430c565b613548614325565b6111fc6060820135608083013561356560c0850160a08601614c26565b61357560e0860160c087016156a7565b613586610100870160e088016156c0565b61010087013561359e61014089016101208a01614fd6565b886101400135614335565b5f8281525f80516020615a98833981519152602052604081206002015481905f80516020615a5883398151915290600160801b90046001600160401b03166135f1858261451a565b5f6135fb8761473d565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156136a4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136cb9190810190614f7c565b6040518263ffffffff1660e01b81526004016136e79190614fad565b6020604051808303815f875af1158015613703573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137279190614fbf565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061378a612891565b90505f61379a8660400151611ed0565b90505f6003825160058111156137b2576137b2614ce1565b14806137d057506004825160058111156137ce576137ce614ce1565b145b156137e0575060c081015161381d565b6002825160058111156137f5576137f5614ce1565b0361380157504261381d565b815160405163170cc93360e21b81526108bc9190600401614e73565b86608001516001600160401b0316816001600160401b031611613845575f9350505050611b02565b600483015460608801515f916001600160a01b031690634f22429f9061386a906114d8565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa1580156138eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061390f9190614fbf565b5f878152600886016020526040902081905590506001600160a01b03871615612886575f868152600985016020526040902080546001600160a01b0319166001600160a01b038916179055979650505050505050565b61396d614a4a565b5f8281525f80516020615a988339815191526020526040808220815160e0810190925280545f80516020615a5883398151915293929190829060ff1660058111156139ba576139ba614ce1565b60058111156139cb576139cb614ce1565b81526020016001820180546139df90614e41565b80601f0160208091040260200160405190810160405280929190818152602001828054613a0b90614e41565b8015613a565780601f10613a2d57610100808354040283529160200191613a56565b820191905f5260205f20905b815481529060010190602001808311613a3957829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613ac457613ac4614ce1565b14613af7575f8481526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e73565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613b3b57613b3b614ce1565b021790555060208201516001820190613b549082615185565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613bf285826135a9565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613c95575f80fd5b505af115801561132f573d5f803e3d5ffd5b80471015613cca5760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613d13576040519150601f19603f3d011682016040523d82523d5f602084013e613d18565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d45612891565b5f86815260088201602052604081208054908290559192509081908015613dd9575f87815260068501602052604090205461271090613d8f90600160a01b900461ffff1683615289565b613d99919061545f565b91508184600a015f8981526020019081526020015f205f828254613dbd9190615254565b90915550613dcd905082826156e0565b9250613dd98984613c49565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613e2b57604051637fab81e560e01b815260040160405180910390fd5b5f80516020615a5883398151915242613e4a6060860160408701614c26565b6001600160401b0316111580613e845750613e686202a30042615254565b613e786060860160408701614c26565b6001600160401b031610155b15613ebe57613e996060850160408601614c26565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b613ed3613ece60608601866156f3565b6147b2565b613ee3613ece60808601866156f3565b6030613ef26020860186615707565b905014613f2457613f066020850185615707565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613f2e8480615707565b90505f03613f5b57613f408480615707565b604051633e08a12560e11b81526004016108bc929190615749565b5f60088201613f6a8680615707565b604051613f7892919061557a565b90815260200160405180910390205414613fb157613f968480615707565b60405163a41f772f60e01b81526004016108bc929190615749565b613fbb835f61451a565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613ff88a80615707565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190614040908b018b615707565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060200161408960608b0160408c01614c26565b6001600160401b031681526020016140a460608b018b6156f3565b6140ad9061575c565b81526020016140bf60808b018b6156f3565b6140c89061575c565b8152602001886001600160401b03168152506040518263ffffffff1660e01b81526004016140f69190615889565b5f60405180830381865af4158015614110573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141379190810190615940565b5f828152600686016020526040902091935091506141558282615185565b5081600884016141658880615707565b60405161417392919061557a565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141af908590600401614fad565b6020604051808303815f875af11580156141cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141ef9190614fbf565b5f8481526007860160205260409020805460ff1916600117905590506142158780615707565b5f858152600787016020526040902060010191614233919083615983565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806142928880615707565b6040516142a092919061557a565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b60400160208101906142de9190614c26565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b6143146134e4565b61431c61491b565b6111fc81614923565b61432d6134e4565b61352d614a0b565b61433d6134e4565b5f614346612891565b905061ffff8616158061435e575061271061ffff8716115b1561438257604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156143a65760405163222d164360e21b8152600481018a90526024016108bc565b60ff851615806143b95750600a60ff8616115b156143dc5760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614443576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f036144635760405163a733007160e01b815260040160405180910390fd5b8161448457604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615a588339815191525f6001600160401b03808416908516111561454e5761454783856155a9565b905061455b565b61455884846155a9565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806145bd5750600184015481516145b9916001600160401b031690615254565b8210155b156145e3576001600160401b038316606082015281815260408101516020820152614602565b82816060018181516145f59190615589565b6001600160401b03169052505b606081015161461290606461567c565b602082015160018601546001600160401b03929092169161463d9190600160401b900460ff16615289565b101561466d57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b856001600160401b0316816040018181516146889190615254565b9052506040810180516001600160401b03871691906146a89083906156e0565b905250600184015460408201516064916146cd91600160401b90910460ff1690615289565b10156146f4578060400151604051635943317f60e01b81526004016108bc91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615a988339815191526020526040812060020180545f80516020615a58833981519152919060089061478790600160401b90046001600160401b0316615a3c565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6147bf6020820182614bf9565b63ffffffff161580156147df57506147da6020820182614ff1565b151590505b15614826576147f16020820182614bf9565b6147fe6020830183614ff1565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b6148336020820182614ff1565b90506148426020830183614bf9565b63ffffffff16111561485b576147f16020820182614bf9565b60015b61486b6020830183614ff1565b905081101561175a576148816020830183614ff1565b61488c6001846156e0565b81811061489b5761489b615036565b90506020020160208101906148b09190614fd6565b6001600160a01b03166148c66020840184614ff1565b838181106148d6576148d6615036565b90506020020160208101906148eb9190614fd6565b6001600160a01b0316101561491357604051630dbc8d5f60e31b815260040160405180910390fd5b60010161485e565b61352d6134e4565b61492b6134e4565b80355f80516020615a58833981519152908155601461495060608401604085016156c0565b60ff16118061496f575061496a60608301604084016156c0565b60ff16155b156149a35761498460608301604084016156c0565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b6149b360608301604084016156c0565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149e46040830160208401614c26565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612efe6134e4565b508054614a1f90614e41565b5f825580601f10614a2e575050565b601f0160209004905f5260205f20908101906111fc9190614a87565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614a9b575f8155600101614a88565b5090565b80151581146111fc575f80fd5b803563ffffffff81168114611ecb575f80fd5b5f805f60608486031215614ad1575f80fd5b833592506020840135614ae381614a9f565b9150614af160408501614aac565b90509250925092565b5f60208284031215614b0a575f80fd5b5035919050565b5f6101608284031215614b22575f80fd5b50919050565b5f8060408385031215614b39575f80fd5b82356001600160401b03811115614b4e575f80fd5b830160808186031215614b5f575f80fd5b9150614b6d60208401614aac565b90509250929050565b5f8060408385031215614b87575f80fd5b82359150614b6d60208401614aac565b6001600160a01b03811681146111fc575f80fd5b5f805f8060808587031215614bbe575f80fd5b843593506020850135614bd081614a9f565b9250614bde60408601614aac565b91506060850135614bee81614b97565b939692955090935050565b5f60208284031215614c09575f80fd5b611b0282614aac565b6001600160401b03811681146111fc575f80fd5b5f60208284031215614c36575f80fd5b8135611b0281614c12565b5f8060408385031215614c52575f80fd5b823591506020830135614c6481614b97565b809150509250929050565b803561ffff81168114611ecb575f80fd5b5f805f60608486031215614c92575f80fd5b83356001600160401b03811115614ca7575f80fd5b840160a08187031215614cb8575f80fd5b9250614cc660208501614c6f565b91506040840135614cd681614c12565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d0557614d05614ce1565b9052565b5f5b83811015614d23578181015183820152602001614d0b565b50505f910152565b5f8151808452614d42816020860160208601614d09565b601f01601f19169290920160200192915050565b60208152614d68602082018351614cf5565b5f602083015160e06040840152614d83610100840182614d2b565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614de7575f80fd5b82356001600160401b0380821115614dfd575f80fd5b818501915085601f830112614e10575f80fd5b813581811115614e1e575f80fd5b866020828501011115614e2f575f80fd5b60209290920196919550909350505050565b600181811c90821680614e5557607f821691505b602082108103614b2257634e487b7160e01b5f52602260045260245ffd5b602081016110f58284614cf5565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614eb757614eb7614e81565b60405290565b604080519081016001600160401b0381118282101715614eb757614eb7614e81565b604051601f8201601f191681016001600160401b0381118282101715614f0757614f07614e81565b604052919050565b5f6001600160401b03821115614f2757614f27614e81565b50601f01601f191660200190565b5f82601f830112614f44575f80fd5b8151614f57614f5282614f0f565b614edf565b818152846020838601011115614f6b575f80fd5b6124ab826020830160208701614d09565b5f60208284031215614f8c575f80fd5b81516001600160401b03811115614fa1575f80fd5b6124ab84828501614f35565b602081525f611b026020830184614d2b565b5f60208284031215614fcf575f80fd5b5051919050565b5f60208284031215614fe6575f80fd5b8135611b0281614b97565b5f808335601e19843603018112615006575f80fd5b8301803591506001600160401b0382111561501f575f80fd5b6020019150600581901b3603821315613779575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261505e575f80fd5b9190910192915050565b5f82601f830112615077575f80fd5b8135615085614f5282614f0f565b818152846020838601011115615099575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150c5575f80fd5b6150cd614e95565b82356001600160401b03808211156150e3575f80fd5b6150ef36838701615068565b83526020850135915080821115615104575f80fd5b5061511136828601615068565b602083015250604083013561512581614c12565b604082015292915050565b5f825161505e818460208701614d09565b601f82111561073057805f5260205f20601f840160051c810160208510156151665750805b601f840160051c820191505b81811015611107575f8155600101615172565b81516001600160401b0381111561519e5761519e614e81565b6151b2816151ac8454614e41565b84615141565b602080601f8311600181146151e5575f84156151ce5750858301515b5f19600386901b1c1916600185901b17855561132f565b5f85815260208120601f198616915b82811015615213578886015182559484019460019091019084016151f4565b508582101561523057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808201808211156110f5576110f5615240565b5f63ffffffff80831681810361527f5761527f615240565b6001019392505050565b80820281158282048414176110f5576110f5615240565b5f808335601e198436030181126152b5575f80fd5b83016020810192503590506001600160401b038111156152d3575f80fd5b803603821315613779575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156153be57848303601f19018952813536889003605e19018112615345575f80fd5b8701606061535382806152a0565b82875261536383880182846152e1565b92505050615373868301836152a0565b868303888801526153858382846152e1565b92505050604080830135925061539a83614c12565b6001600160401b039290921694909101939093529783019790830190600101615320565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356153ef81614b97565b6001600160a01b031660608381019190915283013536849003601e19018112615416575f80fd5b83016020810190356001600160401b03811115615431575f80fd5b8060051b3603821315615442575f80fd5b60808085015261545660a085018284615309565b95945050505050565b5f8261547957634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061549257615492614ce1565b91905290565b5f805f606084860312156154aa575f80fd5b8351925060208401516154bc81614c12565b6040850151909250614cd681614c12565b5f80604083850312156154de575f80fd5b825191506020830151614c6481614a9f565b5f60208083525f845461550281614e41565b806020870152604060018084165f8114615523576001811461553f5761556c565b60ff19851660408a0152604084151560051b8a0101955061556c565b895f5260205f205f5b858110156155635781548b8201860152908301908801615548565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156125c2576125c2615240565b6001600160401b038281168282160390808211156125c2576125c2615240565b5f80604083850312156155da575f80fd5b82516001600160401b03808211156155f0575f80fd5b9084019060608287031215615603575f80fd5b61560b614e95565b82518152602083015161561d81614b97565b6020820152604083015182811115615633575f80fd5b61563f88828601614f35565b6040830152508094505050506020830151614c6481614a9f565b5f806040838503121561566a575f80fd5b825191506020830151614c6481614c12565b6001600160401b0381811683821602808216919082811461569f5761569f615240565b505092915050565b5f602082840312156156b7575f80fd5b611b0282614c6f565b5f602082840312156156d0575f80fd5b813560ff81168114611b02575f80fd5b818103818111156110f5576110f5615240565b5f8235603e1983360301811261505e575f80fd5b5f808335601e1984360301811261571c575f80fd5b8301803591506001600160401b03821115615735575f80fd5b602001915036819003821315613779575f80fd5b602081525f6124ab6020830184866152e1565b5f6040823603121561576c575f80fd5b615774614ebd565b61577d83614aac565b81526020808401356001600160401b0380821115615799575f80fd5b9085019036601f8301126157ab575f80fd5b8135818111156157bd576157bd614e81565b8060051b91506157ce848301614edf565b81815291830184019184810190368411156157e7575f80fd5b938501935b83851015615811578435925061580183614b97565b82825293850193908501906157ec565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b8083101561587e5784516001600160a01b03168252938301936001929092019190830190615855565b509695505050505050565b60208152815160208201525f602083015160e060408401526158af610100840182614d2b565b90506040840151601f19808584030160608601526158cd8383614d2b565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526158fd8383615823565b925060a08601519150808584030160c08601525061591b8282615823565b91505060c084015161593860e08501826001600160401b03169052565b509392505050565b5f8060408385031215615951575f80fd5b8251915060208301516001600160401b0381111561596d575f80fd5b61597985828601614f35565b9150509250929050565b6001600160401b0383111561599a5761599a614e81565b6159ae836159a88354614e41565b83615141565b5f601f8411600181146159df575f85156159c85750838201355b5f19600387901b1c1916600186901b178355611107565b5f83815260208120601f198716915b82811015615a0e57868501358255602094850194600190920191016159ee565b5086821015615a2a575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b0380831681810361527f5761527f61524056fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220fea5d6dfa72371283856f773bad36bd16bbb6f41f9282f7dc10b4617900619ae64736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol index 5f6cdede6..c4c5b7bb4 100644 --- a/contracts/validator-manager/interfaces/IPoSValidatorManager.sol +++ b/contracts/validator-manager/interfaces/IPoSValidatorManager.sol @@ -223,6 +223,7 @@ interface IPoSValidatorManager is IValidatorManager { bool includeUptimeProof, uint32 messageIndex ) external; + /** * @notice See {IPoSValidatorManager-initializeEndDelegation} for details of the first three parameters * @param recipientAddress The address to receive the rewards. @@ -291,7 +292,17 @@ interface IPoSValidatorManager is IValidatorManager { */ function claimDelegationFees(bytes32 validationID) external; + /** + * @notice Changes the address of the recipient of the validator's rewards for a validation period. This method can be called any time before {completeEndValidation}. + * @param validationID The ID of the validation period being ended. + * @param recipient The address to receive the rewards. + */ function changeValidatorRewardRecipient(bytes32 validationID, address recipient) external; + /** + * @notice Changes the address of the recipient of the delegator's rewards for a delegation period. This method can be called any time before {completeEndDelegation}. + * @param delegationID The ID of the validation period being ended. + * @param recipient The address to receive the rewards. + */ function changeDelegatorRewardRecipient(bytes32 delegationID, address recipient) external; } From 8773bcb1614d721de0db4aba4f2b442b925affa0 Mon Sep 17 00:00:00 2001 From: Richard Pringle Date: Thu, 21 Nov 2024 14:56:22 -0500 Subject: [PATCH 10/10] Make fetching storage the first operation --- .../ERC20TokenStakingManager/ERC20TokenStakingManager.go | 2 +- .../NativeTokenStakingManager/NativeTokenStakingManager.go | 2 +- contracts/validator-manager/PoSValidatorManager.sol | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index 2b3942685..9fbc69364 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -104,7 +104,7 @@ type ValidatorRegistrationInput 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\":\"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\":[{\"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\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"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\":\"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\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"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\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"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\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"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\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"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\":\"DelegatorAdded\",\"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\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"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\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BLS_PUBLIC_KEY_LENGTH\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ERC20_STAKING_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_CHURN_PERCENTAGE_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_STAKE_MULTIPLIER_LIMIT\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndValidation\",\"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\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"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\":\"structPoSValidatorManagerSettings\",\"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\":\"initializeDelegatorRegistration\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndValidation\",\"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\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"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\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"stakeAmount\",\"type\":\"uint256\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"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\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"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: "0x608060405234801561000f575f80fd5b50604051615edb380380615edb83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d8e8061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061023f575f3560e01c806380dd672f11610135578063b771b3bc116100b4578063d5f20ff611610079578063d5f20ff614610516578063df93d8de14610536578063e4a63c4014610540578063fb8b11dd14610554578063fd7ac5e714610567575f80fd5b8063b771b3bc146104ae578063ba3a4b97146104d4578063bc5fbfec146104e7578063bee0a03f146104fb578063c974d1b61461050e575f80fd5b80639e1bc4ef116100fa5780639e1bc4ef1461044e5780639e478eea14610461578063a3a65e4814610474578063a9778a7a146102ee578063afb9809614610487575f80fd5b806380dd672f146103fa5780638280a25a1461040d5780638ef34c981461041557806393e24598146104285780639ae064471461043b575f80fd5b8063467ef06f116101c1578063620658561161018657806362065856146103a757806366435abf146103ba578063732214f8146103cd57806376f78621146103d45780637d8d2f77146103e7575f80fd5b8063467ef06f146103305780634bee0040146103435780635dd6a6cb1461036457806360305d621461037757806360ad778414610394575f80fd5b806325e1c7761161020757806325e1c776146102b05780632e2194d8146102c357806335455ded146102ee57806337b9be8f1461030a5780633a1cfff61461031d575f80fd5b80630118acc4146102435780630322ed9814610258578063151d30d11461026b5780631ec447241461028a57806320d91b7a1461029d575b5f80fd5b610256610251366004614cd2565b61057a565b005b610256610266366004614d0d565b61058b565b610273600a81565b60405160ff90911681526020015b60405180910390f35b610256610298366004614cd2565b61081b565b6102566102ab366004614d24565b610827565b6102566102be366004614d72565b610dac565b6102d66102d1366004614d0d565b610e20565b6040516001600160401b039091168152602001610281565b6102f761271081565b60405161ffff9091168152602001610281565b610256610318366004614da7565b610e74565b61025661032b366004614cd2565b610e87565b61025661033e366004614df5565b610e93565b610356610351366004614e33565b610f78565b604051908152602001610281565b610256610372366004614da7565b610fad565b61037f601481565b60405163ffffffff9091168152602001610281565b6102566103a2366004614d72565b610fb9565b6103566103b5366004614e9a565b611286565b6102d66103c8366004614d0d565b6112a6565b6103565f81565b6102566103e2366004614cd2565b6112ba565b6102566103f5366004614da7565b6112c6565b610256610408366004614d72565b6112d2565b610273603081565b610256610423366004614eb5565b61150c565b610256610436366004614d0d565b6115ee565b610256610449366004614da7565b611682565b61035661045c366004614ee3565b61168e565b61025661046f366004614f03565b6116ba565b610256610482366004614df5565b611799565b6103567f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104bc6005600160991b0181565b6040516001600160a01b039091168152602001610281565b6102566104e2366004614d0d565b61198e565b6103565f80516020615cf983398151915281565b610256610509366004614d0d565b611be7565b610273601481565b610529610524366004614d0d565b611d24565b6040516102819190614fab565b6102d66202a30081565b6103565f80516020615cd983398151915281565b610256610562366004614eb5565b611e73565b61035661057536600461502b565b611f3a565b6105868383835f611f95565b505050565b5f8181525f80516020615d398339815191526020526040808220815160e0810190925280545f80516020615cf983398151915293929190829060ff1660058111156105d8576105d8614f36565b60058111156105e9576105e9614f36565b81526020016001820180546105fd90615096565b80601f016020809104026020016040519081016040528092919081815260200182805461062990615096565b80156106745780601f1061064b57610100808354040283529160200191610674565b820191905f5260205f20905b81548152906001019060200180831161065757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156106df576106df614f36565b1461071b575f8381526007830160205260409081902054905163170cc93360e21b81526107129160ff16906004016150ce565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610792573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107b991908101906151d7565b6040518263ffffffff1660e01b81526004016107d59190615208565b6020604051808303815f875af11580156107f1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610815919061521a565b50505050565b6108158383835f611fc1565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615cf98339815191529060ff161561087957604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e0919061521a565b836020013514610909576040516372b0a7e760e11b815260208401356004820152602401610712565b3061091a6060850160408601615231565b6001600160a01b03161461095d576109386060840160408501615231565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610712565b5f61096b606085018561524c565b905090505f805b828163ffffffff161015610bd2575f61098e606088018861524c565b8363ffffffff168181106109a4576109a4615291565b90506020028101906109b691906152a5565b6109bf90615310565b80516040519192505f9160088801916109d79161538b565b90815260200160405180910390205414610a0757805160405163a41f772f60e01b81526107129190600401615208565b5f6002885f013584604051602001610a3692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a509161538b565b602060405180830381855afa158015610a6b573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a8e919061521a565b90508086600801835f0151604051610aa6919061538b565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610ae690826153e0565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610b6590856154af565b8251604051919550610b769161538b565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610bcb906154c2565b9050610972565b50600483018190556001830154606490610bf690600160401b900460ff16836154e4565b1015610c1857604051635943317f60e01b815260048101829052602401610712565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c3c876122ee565b604001516040518263ffffffff1660e01b8152600401610c5c9190615208565b602060405180830381865af4158015610c77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9b919061521a565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610cd59190615626565b5f60405180830381865af4158015610cef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d1691908101906151d7565b90505f600282604051610d29919061538b565b602060405180830381855afa158015610d44573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d67919061521a565b9050828114610d935760405163baaea89d60e01b81526004810182905260248101849052604401610712565b5050506009909201805460ff1916600117905550505050565b610db582612404565b610dd5576040516330efa98b60e01b815260048101839052602401610712565b5f610ddf83611d24565b5190506002816005811115610df657610df6614f36565b14610e16578060405163170cc93360e21b815260040161071291906150ce565b610815838361242d565b5f80610e2a6126cc565b60030154610e3890846156ba565b9050801580610e4d57506001600160401b0381115b15610e6e5760405163222d164360e21b815260048101849052602401610712565b92915050565b610e8084848484611fc1565b5050505050565b6108158383835f6126f0565b610e9b612912565b5f610ea46126cc565b90505f80610eb184612949565b91509150610ebe82612404565b610eca57505050610f5f565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b03918216911680610f01575080610f1f565b5f848152600b86016020526040902080546001600160a01b03191690555b600483516005811115610f3457610f34614f36565b03610f4357610f438185612cfc565b610f5982610f548560400151611286565b612d26565b50505050505b610f7560015f80516020615d1983398151915255565b50565b5f610f81612912565b610f8d85858585612d5c565b9050610fa560015f80516020615d1983398151915255565b949350505050565b61081584848484612ec1565b5f610fc26126cc565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610ffb57610ffb614f36565b600381111561100c5761100c614f36565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61108282611d24565b905060018351600381111561109957611099614f36565b146110ba578251604051633b0d540d60e21b815261071291906004016156d9565b6004815160058111156110cf576110cf614f36565b036110e5576110dd86612eed565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61110a896122ee565b604001516040518263ffffffff1660e01b815260040161112a9190615208565b606060405180830381865af4158015611145573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116991906156f3565b509150915081841461119657846040015160405163089938b360e11b815260040161071291815260200190565b806001600160401b031683606001516001600160401b031610806111cf5750806001600160401b03168560a001516001600160401b0316115b156111f857604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61128f6126cc565b60030154610e6e906001600160401b0384166154e4565b5f6112b082611d24565b6080015192915050565b6105868383835f612ec1565b610e80848484846126f0565b6112da612912565b5f6112e36126cc565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561131c5761131c614f36565b600381111561132d5761132d614f36565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113a6576113a6614f36565b146113c7578051604051633b0d540d60e21b815261071291906004016156d9565b60046113d68260400151611d24565b5160058111156113e8576113e8614f36565b146114e7575f6113f7846122ee565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016114369190615208565b606060405180830381865af4158015611451573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147591906156f3565b5091509150818460400151146114a15760405163089938b360e11b815260048101839052602401610712565b806001600160401b03168460c001516001600160401b031611156114e357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5050505b6114f084612eed565b505061150860015f80516020615d1983398151915255565b5050565b6001600160a01b03811661153e5760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f6115476126cc565b5f8481526006820160205260409020549091506001600160a01b0316331461159057335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610712565b336001600160a01b038316036115bf575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f6115f76126cc565b90505f61160383611d24565b519050600481600581111561161a5761161a614f36565b1461163a578060405163170cc93360e21b815260040161071291906150ce565b5f8381526006830160205260409020546001600160a01b0316331461165f573361156b565b5f838152600683016020526040902054610586906001600160a01b031684612cfc565b61081584848484611f95565b5f611697612912565b6116a28333846130fa565b9050610e6e60015f80516020615d1983398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611703575080546001600160401b03808416911610155b156117215760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561174c848461333f565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615cf98339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117cc866122ee565b604001516040518263ffffffff1660e01b81526004016117ec9190615208565b6040805180830381865af4158015611806573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061182a9190615733565b915091508061185057604051632d07135360e01b81528115156004820152602401610712565b5f8281526006840160205260409020805461186a90615096565b90505f0361188e5760405163089938b360e11b815260048101839052602401610712565b60015f83815260078501602052604090205460ff1660058111156118b4576118b4614f36565b146118e7575f8281526007840160205260409081902054905163170cc93360e21b81526107129160ff16906004016150ce565b5f82815260068401602052604081206118ff91614c21565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f6119976126cc565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119d0576119d0614f36565b60038111156119e1576119e1614f36565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a5a57611a5a614f36565b14158015611a7b5750600381516003811115611a7857611a78614f36565b14155b15611a9c578051604051633b0d540d60e21b815261071291906004016156d9565b5f611aaa8260400151611d24565b905080606001516001600160401b03165f03611adc576040516339b894f960e21b815260048101859052602401610712565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b4a93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b64573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b8b91908101906151d7565b6040518263ffffffff1660e01b8152600401611ba79190615208565b6020604051808303815f875af1158015611bc3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e80919061521a565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615cf98339815191529190611c2e90615096565b90505f03611c525760405163089938b360e11b815260048101839052602401610712565b60015f83815260078301602052604090205460ff166005811115611c7857611c78614f36565b14611cab575f8281526007820160205260409081902054905163170cc93360e21b81526107129160ff16906004016150ce565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611ce49190600401615756565b6020604051808303815f875af1158015611d00573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610586919061521a565b611d2c614c58565b5f8281525f80516020615d39833981519152602052604090819020815160e0810190925280545f80516020615cf9833981519152929190829060ff166005811115611d7957611d79614f36565b6005811115611d8a57611d8a614f36565b8152602001600182018054611d9e90615096565b80601f0160208091040260200160405190810160405280929190818152602001828054611dca90615096565b8015611e155780601f10611dec57610100808354040283529160200191611e15565b820191905f5260205f20905b815481529060010190602001808311611df857829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611ea55760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611eae6126cc565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611edc573361156b565b336001600160a01b03831603611f0b575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615cf9833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611f7d90869086906157e0565b90815260200160405180910390205491505092915050565b611fa184848484611fc1565b61081557604051631036cf9160e11b815260048101859052602401610712565b5f80611fcb6126cc565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561200457612004614f36565b600381111561201557612015614f36565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61208b82611d24565b90506002835160038111156120a2576120a2614f36565b146120c3578251604051633b0d540d60e21b815261071291906004016156d9565b60208301516001600160a01b0316331461215f575f8281526006850160205260409020546001600160a01b031633146120fc573361156b565b5f82815260068501602052604090205460a082015161212b91600160b01b90046001600160401b0316906157ef565b6001600160401b031642101561215f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b60028151600581111561217457612174614f36565b036122965760028401546080840151612196916001600160401b0316906157ef565b6001600160401b03164210156121ca5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b87156121dc576121da828861242d565b505b5f8981526007850160205260409020805460ff1916600317905560608301516080820151612215918491612210919061580f565b613359565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561225884888c613530565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610fa59350505050565b6004815160058111156122ab576122ab614f36565b036122d2576122bb83878b613530565b506122c589612eed565b6001945050505050610fa5565b805160405163170cc93360e21b815261071291906004016150ce565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612352573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612379919081019061582f565b915091508061239b57604051636b2f19e960e01b815260040160405180910390fd5b8151156123c1578151604051636ba589a560e01b81526004810191909152602401610712565b60208201516001600160a01b0316156123fd576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5092915050565b5f8061240e6126cc565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612478573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261249f919081019061582f565b91509150806124c157604051636b2f19e960e01b815260040160405180910390fd5b5f6124ca6126cc565b60058101548451919250146124f8578251604051636ba589a560e01b81526004810191909152602401610712565b60208301516001600160a01b031615612534576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b60208301516001600160a01b031615612570576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016125ad9190615208565b6040805180830381865af41580156125c7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125eb91906158bf565b915091508188146126125760405163089938b360e11b815260048101899052602401610712565b5f8881526006840160205260409020600101546001600160401b0390811690821611156126a3575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26126c1565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806126fa6126cc565b90505f61270687613715565b905061271187612404565b61272057600192505050610fa5565b5f8781526006830160205260409020546001600160a01b03163314612745573361156b565b5f87815260068301602052604090205460a082015161277491600160b01b90046001600160401b0316906157ef565b6001600160401b03168160c001516001600160401b031610156127bb5760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610712565b5f86156127d3576127cc888761242d565b90506127f1565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f9061281690611286565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561287f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128a3919061521a565b90508084600a015f8b81526020019081526020015f205f8282546128c791906154af565b90915550506001600160a01b03861615612904575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615d1983398151915280546001190161294357604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612952614c58565b5f80516020615cf98339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612985886122ee565b604001516040518263ffffffff1660e01b81526004016129a59190615208565b6040805180830381865af41580156129bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129e39190615733565b915091508015612a0a57604051632d07135360e01b81528115156004820152602401610712565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612a3b57612a3b614f36565b6005811115612a4c57612a4c614f36565b8152602001600182018054612a6090615096565b80601f0160208091040260200160405190810160405280929190818152602001828054612a8c90615096565b8015612ad75780601f10612aae57610100808354040283529160200191612ad7565b820191905f5260205f20905b815481529060010190602001808311612aba57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612b4257612b42614f36565b14158015612b635750600181516005811115612b6057612b60614f36565b14155b15612b8457805160405163170cc93360e21b815261071291906004016150ce565b600381516005811115612b9957612b99614f36565b03612ba75760048152612bac565b600581525b836008018160200151604051612bc2919061538b565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612c0657612c06614f36565b021790555060208201516001820190612c1f90826153e0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612cc557612cc5614f36565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d056126cc565b5f838152600a820160205260408120805491905590915061081584826139f9565b5f80516020615cd983398151915254611508906001600160a01b03168383613a6f565b60015f80516020615d1983398151915255565b5f80612d666126cc565b600281015490915061ffff600160401b90910481169086161080612d8f575061271061ffff8616115b15612db357604051635f12e6c360e11b815261ffff86166004820152602401610712565b60028101546001600160401b039081169085161015612def576040516202a06d60e11b81526001600160401b0385166004820152602401610712565b8054831080612e015750806001015483115b15612e225760405163222d164360e21b815260048101849052602401610712565b5f612e2c84613ace565b90505f612e3882610e20565b90505f612e458983613af1565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b612ecd848484846126f0565b61081557604051635bff683f60e11b815260048101859052602401610712565b5f612ef66126cc565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f2f57612f2f614f36565b6003811115612f4057612f40614f36565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612fdd7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612fec91906157ef565b6001600160401b03164210156130205760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130705750602082015161308e565b5f858152600985016020526040902080546001600160a01b03191690555b5f8061309b838886614016565b915091506130b48560200151610f548760600151611286565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131046126cc565b90505f6131136102d185613ace565b90505f61311f87611d24565b905061312a87612404565b61314a576040516330efa98b60e01b815260048101889052602401610712565b60028151600581111561315f5761315f614f36565b1461318057805160405163170cc93360e21b815261071291906004016150ce565b5f82826080015161319191906157ef565b905083600201600a9054906101000a90046001600160401b031682604001516131ba91906158e2565b6001600160401b0316816001600160401b031611156131f757604051636d51fe0560e11b81526001600160401b0382166004820152602401610712565b5f806132038a84613359565b915091505f8a8360405160200161323192919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6133476140c3565b6133508261410e565b61150881614188565b5f8281525f80516020615d39833981519152602052604081206002015481905f80516020615cf983398151915290600160801b90046001600160401b03166133a185826141f0565b5f6133ab87614413565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613454573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261347b91908101906151d7565b6040518263ffffffff1660e01b81526004016134979190615208565b6020604051808303815f875af11580156134b3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134d7919061521a565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061353a6126cc565b90505f61354a8660400151611d24565b90505f60038251600581111561356257613562614f36565b1480613580575060048251600581111561357e5761357e614f36565b145b15613590575060c08101516135cd565b6002825160058111156135a5576135a5614f36565b036135b15750426135cd565b815160405163170cc93360e21b815261071291906004016150ce565b86608001516001600160401b0316816001600160401b0316116135f5575f9350505050613338565b600483015460608801515f916001600160a01b031690634f22429f9061361a90611286565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561369b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136bf919061521a565b5f878152600886016020526040902081905590506001600160a01b038716156126c1575f868152600985016020526040902080546001600160a01b0319166001600160a01b038916179055979650505050505050565b61371d614c58565b5f8281525f80516020615d398339815191526020526040808220815160e0810190925280545f80516020615cf983398151915293929190829060ff16600581111561376a5761376a614f36565b600581111561377b5761377b614f36565b815260200160018201805461378f90615096565b80601f01602080910402602001604051908101604052809291908181526020018280546137bb90615096565b80156138065780601f106137dd57610100808354040283529160200191613806565b820191905f5260205f20905b8154815290600101906020018083116137e957829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561387457613874614f36565b146138a7575f8481526007830160205260409081902054905163170cc93360e21b81526107129160ff16906004016150ce565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff191660018360058111156138eb576138eb614f36565b02179055506020820151600182019061390490826153e0565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139a28582613359565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b5f5f80516020615cd983398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a54575f80fd5b505af1158015613a66573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261058691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614488565b5f610e6e825f80516020615cd9833981519152546001600160a01b0316906144e9565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613b3557604051637fab81e560e01b815260040160405180910390fd5b5f80516020615cf983398151915242613b546060860160408701614e9a565b6001600160401b0316111580613b8e5750613b726202a300426154af565b613b826060860160408701614e9a565b6001600160401b031610155b15613bc857613ba36060850160408601614e9a565b604051635879da1360e11b81526001600160401b039091166004820152602401610712565b613bdd613bd8606086018661590d565b6144f5565b613bed613bd8608086018661590d565b6030613bfc6020860186615921565b905014613c2e57613c106020850185615921565b6040516326475b2f60e11b8152610712925060040190815260200190565b613c388480615921565b90505f03613c6557613c4a8480615921565b604051633e08a12560e11b8152600401610712929190615963565b5f60088201613c748680615921565b604051613c829291906157e0565b90815260200160405180910390205414613cbb57613ca08480615921565b60405163a41f772f60e01b8152600401610712929190615963565b613cc5835f6141f0565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d028a80615921565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613d4a908b018b615921565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613d9360608b0160408c01614e9a565b6001600160401b03168152602001613dae60608b018b61590d565b613db790615976565b8152602001613dc960808b018b61590d565b613dd290615976565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613e009190615aa3565b5f60405180830381865af4158015613e1a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e419190810190615b5a565b5f82815260068601602052604090209193509150613e5f82826153e0565b508160088401613e6f8880615921565b604051613e7d9291906157e0565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613eb9908590600401615208565b6020604051808303815f875af1158015613ed5573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ef9919061521a565b5f8481526007860160205260409020805460ff191660011790559050613f1f8780615921565b5f858152600787016020526040902060010191613f3d919083615b9d565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613f9c8880615921565b604051613faa9291906157e0565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613fe89190614e9a565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f6140216126cc565b5f868152600882016020526040812080549082905591925090819080156140b5575f8781526006850160205260409020546127109061406b90600160a01b900461ffff16836154e4565b61407591906156ba565b91508184600a015f8981526020019081526020015f205f82825461409991906154af565b909155506140a990508282615c56565b92506140b589846139f9565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661410c57604051631afcd79f60e31b815260040160405180910390fd5b565b6141166140c3565b61411f8161465e565b614127614677565b610f756060820135608083013561414460c0850160a08601614e9a565b61415460e0860160c08701615c69565b614165610100870160e08801615c82565b61010087013561417d61014089016101208a01615231565b886101400135614687565b6141906140c3565b5f80516020615cd98339815191526001600160a01b0382166141d057604051637330680360e01b81526001600160a01b0383166004820152602401610712565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615cf98339815191525f6001600160401b0380841690851611156142245761421d838561580f565b9050614231565b61422e848461580f565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061429357506001840154815161428f916001600160401b0316906154af565b8210155b156142b9576001600160401b0383166060820152818152604081015160208201526142d8565b82816060018181516142cb91906157ef565b6001600160401b03169052505b60608101516142e89060646158e2565b602082015160018601546001600160401b0392909216916143139190600160401b900460ff166154e4565b101561434357606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610712565b856001600160401b03168160400181815161435e91906154af565b9052506040810180516001600160401b038716919061437e908390615c56565b905250600184015460408201516064916143a391600160401b90910460ff16906154e4565b10156143ca578060400151604051635943317f60e01b815260040161071291815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615d398339815191526020526040812060020180545f80516020615cf9833981519152919060089061445d90600160401b90046001600160401b0316615ca2565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61449c6001600160a01b0384168361486c565b905080515f141580156144c05750808060200190518101906144be9190615cbd565b155b1561058657604051635274afe760e01b81526001600160a01b0384166004820152602401610712565b5f613338833384614879565b6145026020820182614df5565b63ffffffff16158015614522575061451d602082018261524c565b151590505b15614569576145346020820182614df5565b614541602083018361524c565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610712565b614576602082018261524c565b90506145856020830183614df5565b63ffffffff16111561459e576145346020820182614df5565b60015b6145ae602083018361524c565b9050811015611508576145c4602083018361524c565b6145cf600184615c56565b8181106145de576145de615291565b90506020020160208101906145f39190615231565b6001600160a01b0316614609602084018461524c565b8381811061461957614619615291565b905060200201602081019061462e9190615231565b6001600160a01b0316101561465657604051630dbc8d5f60e31b815260040160405180910390fd5b6001016145a1565b6146666140c3565b61466e6149dc565b610f75816149e4565b61467f6140c3565b61410c614acc565b61468f6140c3565b5f6146986126cc565b905061ffff861615806146b0575061271061ffff8716115b156146d457604051635f12e6c360e11b815261ffff87166004820152602401610712565b878911156146f85760405163222d164360e21b8152600481018a9052602401610712565b60ff8516158061470b5750600a60ff8616115b1561472e5760405163170db35960e31b815260ff86166004820152602401610712565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614795576040516202a06d60e11b81526001600160401b0388166004820152602401610712565b835f036147b55760405163a733007160e01b815260040160405180910390fd5b816147d657604051632f6bd1db60e01b815260048101839052602401610712565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b606061333883835f614ad4565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148e3919061521a565b90506148fa6001600160a01b038616853086614b63565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa15801561493e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190614962919061521a565b90508181116149c85760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610712565b6149d28282615c56565b9695505050505050565b61410c6140c3565b6149ec6140c3565b80355f80516020615cf98339815191529081556014614a116060840160408501615c82565b60ff161180614a305750614a2b6060830160408401615c82565b60ff16155b15614a6457614a456060830160408401615c82565b604051634a59bbff60e11b815260ff9091166004820152602401610712565b614a746060830160408401615c82565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa56040830160208401614e9a565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612d496140c3565b606081471015614af95760405163cd78605960e01b8152306004820152602401610712565b5f80856001600160a01b03168486604051614b14919061538b565b5f6040518083038185875af1925050503d805f8114614b4e576040519150601f19603f3d011682016040523d82523d5f602084013e614b53565b606091505b50915091506149d2868383614b9c565b6040516001600160a01b0384811660248301528381166044830152606482018390526108159186918216906323b872dd90608401613a9c565b606082614bb157614bac82614bf8565b613338565b8151158015614bc857506001600160a01b0384163b155b15614bf157604051639996b31560e01b81526001600160a01b0385166004820152602401610712565b5080613338565b805115614c085780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c2d90615096565b5f825580601f10614c3c575050565b601f0160209004905f5260205f2090810190610f759190614c95565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614ca9575f8155600101614c96565b5090565b8015158114610f75575f80fd5b803563ffffffff81168114614ccd575f80fd5b919050565b5f805f60608486031215614ce4575f80fd5b833592506020840135614cf681614cad565b9150614d0460408501614cba565b90509250925092565b5f60208284031215614d1d575f80fd5b5035919050565b5f8060408385031215614d35575f80fd5b82356001600160401b03811115614d4a575f80fd5b830160808186031215614d5b575f80fd5b9150614d6960208401614cba565b90509250929050565b5f8060408385031215614d83575f80fd5b82359150614d6960208401614cba565b6001600160a01b0381168114610f75575f80fd5b5f805f8060808587031215614dba575f80fd5b843593506020850135614dcc81614cad565b9250614dda60408601614cba565b91506060850135614dea81614d93565b939692955090935050565b5f60208284031215614e05575f80fd5b61333882614cba565b803561ffff81168114614ccd575f80fd5b6001600160401b0381168114610f75575f80fd5b5f805f8060808587031215614e46575f80fd5b84356001600160401b03811115614e5b575f80fd5b850160a08188031215614e6c575f80fd5b9350614e7a60208601614e0e565b92506040850135614e8a81614e1f565b9396929550929360600135925050565b5f60208284031215614eaa575f80fd5b813561333881614e1f565b5f8060408385031215614ec6575f80fd5b823591506020830135614ed881614d93565b809150509250929050565b5f8060408385031215614ef4575f80fd5b50508035926020909101359150565b5f80828403610180811215614f16575f80fd5b61016080821215614f25575f80fd5b8493508301359050614ed881614d93565b634e487b7160e01b5f52602160045260245ffd5b60068110614f5a57614f5a614f36565b9052565b5f5b83811015614f78578181015183820152602001614f60565b50505f910152565b5f8151808452614f97816020860160208601614f5e565b601f01601f19169290920160200192915050565b60208152614fbd602082018351614f4a565b5f602083015160e06040840152614fd8610100840182614f80565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f806020838503121561503c575f80fd5b82356001600160401b0380821115615052575f80fd5b818501915085601f830112615065575f80fd5b813581811115615073575f80fd5b866020828501011115615084575f80fd5b60209290920196919550909350505050565b600181811c908216806150aa57607f821691505b6020821081036150c857634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610e6e8284614f4a565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715615112576151126150dc565b60405290565b604080519081016001600160401b0381118282101715615112576151126150dc565b604051601f8201601f191681016001600160401b0381118282101715615162576151626150dc565b604052919050565b5f6001600160401b03821115615182576151826150dc565b50601f01601f191660200190565b5f82601f83011261519f575f80fd5b81516151b26151ad8261516a565b61513a565b8181528460208386010111156151c6575f80fd5b610fa5826020830160208701614f5e565b5f602082840312156151e7575f80fd5b81516001600160401b038111156151fc575f80fd5b610fa584828501615190565b602081525f6133386020830184614f80565b5f6020828403121561522a575f80fd5b5051919050565b5f60208284031215615241575f80fd5b813561333881614d93565b5f808335601e19843603018112615261575f80fd5b8301803591506001600160401b0382111561527a575f80fd5b6020019150600581901b3603821315613529575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152b9575f80fd5b9190910192915050565b5f82601f8301126152d2575f80fd5b81356152e06151ad8261516a565b8181528460208386010111156152f4575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215615320575f80fd5b6153286150f0565b82356001600160401b038082111561533e575f80fd5b61534a368387016152c3565b8352602085013591508082111561535f575f80fd5b5061536c368286016152c3565b602083015250604083013561538081614e1f565b604082015292915050565b5f82516152b9818460208701614f5e565b601f82111561058657805f5260205f20601f840160051c810160208510156153c15750805b601f840160051c820191505b81811015610e80575f81556001016153cd565b81516001600160401b038111156153f9576153f96150dc565b61540d816154078454615096565b8461539c565b602080601f831160018114615440575f84156154295750858301515b5f19600386901b1c1916600185901b1785556110dd565b5f85815260208120601f198616915b8281101561546e5788860151825594840194600190910190840161544f565b508582101561548b57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610e6e57610e6e61549b565b5f63ffffffff8083168181036154da576154da61549b565b6001019392505050565b8082028115828204841417610e6e57610e6e61549b565b5f808335601e19843603018112615510575f80fd5b83016020810192503590506001600160401b0381111561552e575f80fd5b803603821315613529575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561561957848303601f19018952813536889003605e190181126155a0575f80fd5b870160606155ae82806154fb565b8287526155be838801828461553c565b925050506155ce868301836154fb565b868303888801526155e083828461553c565b9250505060408083013592506155f583614e1f565b6001600160401b03929092169490910193909352978301979083019060010161557b565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561564a81614d93565b6001600160a01b031660608381019190915283013536849003601e19018112615671575f80fd5b83016020810190356001600160401b0381111561568c575f80fd5b8060051b360382131561569d575f80fd5b6080808501526156b160a085018284615564565b95945050505050565b5f826156d457634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106156ed576156ed614f36565b91905290565b5f805f60608486031215615705575f80fd5b83519250602084015161571781614e1f565b604085015190925061572881614e1f565b809150509250925092565b5f8060408385031215615744575f80fd5b825191506020830151614ed881614cad565b5f60208083525f845461576881615096565b806020870152604060018084165f811461578957600181146157a5576157d2565b60ff19851660408a0152604084151560051b8a010195506157d2565b895f5260205f205f5b858110156157c95781548b82018601529083019088016157ae565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156123fd576123fd61549b565b6001600160401b038281168282160390808211156123fd576123fd61549b565b5f8060408385031215615840575f80fd5b82516001600160401b0380821115615856575f80fd5b9084019060608287031215615869575f80fd5b6158716150f0565b82518152602083015161588381614d93565b6020820152604083015182811115615899575f80fd5b6158a588828601615190565b6040830152508094505050506020830151614ed881614cad565b5f80604083850312156158d0575f80fd5b825191506020830151614ed881614e1f565b6001600160401b038181168382160280821691908281146159055761590561549b565b505092915050565b5f8235603e198336030181126152b9575f80fd5b5f808335601e19843603018112615936575f80fd5b8301803591506001600160401b0382111561594f575f80fd5b602001915036819003821315613529575f80fd5b602081525f610fa560208301848661553c565b5f60408236031215615986575f80fd5b61598e615118565b61599783614cba565b81526020808401356001600160401b03808211156159b3575f80fd5b9085019036601f8301126159c5575f80fd5b8135818111156159d7576159d76150dc565b8060051b91506159e884830161513a565b8181529183018401918481019036841115615a01575f80fd5b938501935b83851015615a2b5784359250615a1b83614d93565b8282529385019390850190615a06565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615a985784516001600160a01b03168252938301936001929092019190830190615a6f565b509695505050505050565b60208152815160208201525f602083015160e06040840152615ac9610100840182614f80565b90506040840151601f1980858403016060860152615ae78383614f80565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b178383615a3d565b925060a08601519150808584030160c086015250615b358282615a3d565b91505060c0840151615b5260e08501826001600160401b03169052565b509392505050565b5f8060408385031215615b6b575f80fd5b8251915060208301516001600160401b03811115615b87575f80fd5b615b9385828601615190565b9150509250929050565b6001600160401b03831115615bb457615bb46150dc565b615bc883615bc28354615096565b8361539c565b5f601f841160018114615bf9575f8515615be25750838201355b5f19600387901b1c1916600186901b178355610e80565b5f83815260208120601f198716915b82811015615c285786850135825560209485019460019092019101615c08565b5086821015615c44575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610e6e57610e6e61549b565b5f60208284031215615c79575f80fd5b61333882614e0e565b5f60208284031215615c92575f80fd5b813560ff81168114613338575f80fd5b5f6001600160401b038083168181036154da576154da61549b565b5f60208284031215615ccd575f80fd5b815161333881614cad56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220867614b8b054b4e521199dd7bfc2eb3b65806a1b8cd67dead4bafc97554b6a6c64736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615eda380380615eda83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615d8d8061014d5f395ff3fe608060405234801561000f575f80fd5b506004361061023f575f3560e01c806380dd672f11610135578063b771b3bc116100b4578063d5f20ff611610079578063d5f20ff614610516578063df93d8de14610536578063e4a63c4014610540578063fb8b11dd14610554578063fd7ac5e714610567575f80fd5b8063b771b3bc146104ae578063ba3a4b97146104d4578063bc5fbfec146104e7578063bee0a03f146104fb578063c974d1b61461050e575f80fd5b80639e1bc4ef116100fa5780639e1bc4ef1461044e5780639e478eea14610461578063a3a65e4814610474578063a9778a7a146102ee578063afb9809614610487575f80fd5b806380dd672f146103fa5780638280a25a1461040d5780638ef34c981461041557806393e24598146104285780639ae064471461043b575f80fd5b8063467ef06f116101c1578063620658561161018657806362065856146103a757806366435abf146103ba578063732214f8146103cd57806376f78621146103d45780637d8d2f77146103e7575f80fd5b8063467ef06f146103305780634bee0040146103435780635dd6a6cb1461036457806360305d621461037757806360ad778414610394575f80fd5b806325e1c7761161020757806325e1c776146102b05780632e2194d8146102c357806335455ded146102ee57806337b9be8f1461030a5780633a1cfff61461031d575f80fd5b80630118acc4146102435780630322ed9814610258578063151d30d11461026b5780631ec447241461028a57806320d91b7a1461029d575b5f80fd5b610256610251366004614cd1565b61057a565b005b610256610266366004614d0c565b61058b565b610273600a81565b60405160ff90911681526020015b60405180910390f35b610256610298366004614cd1565b61081b565b6102566102ab366004614d23565b610827565b6102566102be366004614d71565b610dac565b6102d66102d1366004614d0c565b610e20565b6040516001600160401b039091168152602001610281565b6102f761271081565b60405161ffff9091168152602001610281565b610256610318366004614da6565b610e74565b61025661032b366004614cd1565b610e87565b61025661033e366004614df4565b610e93565b610356610351366004614e32565b610f78565b604051908152602001610281565b610256610372366004614da6565b610fad565b61037f601481565b60405163ffffffff9091168152602001610281565b6102566103a2366004614d71565b610fb9565b6103566103b5366004614e99565b611286565b6102d66103c8366004614d0c565b6112a6565b6103565f81565b6102566103e2366004614cd1565b6112ba565b6102566103f5366004614da6565b6112c6565b610256610408366004614d71565b6112d2565b610273603081565b610256610423366004614eb4565b61150c565b610256610436366004614d0c565b6115ed565b610256610449366004614da6565b611681565b61035661045c366004614ee2565b61168d565b61025661046f366004614f02565b6116b9565b610256610482366004614df4565b611798565b6103567f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104bc6005600160991b0181565b6040516001600160a01b039091168152602001610281565b6102566104e2366004614d0c565b61198d565b6103565f80516020615cf883398151915281565b610256610509366004614d0c565b611be6565b610273601481565b610529610524366004614d0c565b611d23565b6040516102819190614faa565b6102d66202a30081565b6103565f80516020615cd883398151915281565b610256610562366004614eb4565b611e72565b61035661057536600461502a565b611f39565b6105868383835f611f94565b505050565b5f8181525f80516020615d388339815191526020526040808220815160e0810190925280545f80516020615cf883398151915293929190829060ff1660058111156105d8576105d8614f35565b60058111156105e9576105e9614f35565b81526020016001820180546105fd90615095565b80601f016020809104026020016040519081016040528092919081815260200182805461062990615095565b80156106745780601f1061064b57610100808354040283529160200191610674565b820191905f5260205f20905b81548152906001019060200180831161065757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156106df576106df614f35565b1461071b575f8381526007830160205260409081902054905163170cc93360e21b81526107129160ff16906004016150cd565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610792573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107b991908101906151d6565b6040518263ffffffff1660e01b81526004016107d59190615207565b6020604051808303815f875af11580156107f1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108159190615219565b50505050565b6108158383835f611fc0565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615cf88339815191529060ff161561087957604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108e09190615219565b836020013514610909576040516372b0a7e760e11b815260208401356004820152602401610712565b3061091a6060850160408601615230565b6001600160a01b03161461095d576109386060840160408501615230565b604051632f88120d60e21b81526001600160a01b039091166004820152602401610712565b5f61096b606085018561524b565b905090505f805b828163ffffffff161015610bd2575f61098e606088018861524b565b8363ffffffff168181106109a4576109a4615290565b90506020028101906109b691906152a4565b6109bf9061530f565b80516040519192505f9160088801916109d79161538a565b90815260200160405180910390205414610a0757805160405163a41f772f60e01b81526107129190600401615207565b5f6002885f013584604051602001610a3692919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610a509161538a565b602060405180830381855afa158015610a6b573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610a8e9190615219565b90508086600801835f0151604051610aa6919061538a565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610ae690826153df565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610b6590856154ae565b8251604051919550610b769161538a565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610bcb906154c1565b9050610972565b50600483018190556001830154606490610bf690600160401b900460ff16836154e3565b1015610c1857604051635943317f60e01b815260048101829052602401610712565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610c3c876122ed565b604001516040518263ffffffff1660e01b8152600401610c5c9190615207565b602060405180830381865af4158015610c77573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c9b9190615219565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610cd59190615625565b5f60405180830381865af4158015610cef573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610d1691908101906151d6565b90505f600282604051610d29919061538a565b602060405180830381855afa158015610d44573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d679190615219565b9050828114610d935760405163baaea89d60e01b81526004810182905260248101849052604401610712565b5050506009909201805460ff1916600117905550505050565b610db582612403565b610dd5576040516330efa98b60e01b815260048101839052602401610712565b5f610ddf83611d23565b5190506002816005811115610df657610df6614f35565b14610e16578060405163170cc93360e21b815260040161071291906150cd565b610815838361242c565b5f80610e2a6126cb565b60030154610e3890846156b9565b9050801580610e4d57506001600160401b0381115b15610e6e5760405163222d164360e21b815260048101849052602401610712565b92915050565b610e8084848484611fc0565b5050505050565b6108158383835f6126ef565b610e9b612911565b5f610ea46126cb565b90505f80610eb184612948565b91509150610ebe82612403565b610eca57505050610f5f565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b03918216911680610f01575080610f1f565b5f848152600b86016020526040902080546001600160a01b03191690555b600483516005811115610f3457610f34614f35565b03610f4357610f438185612cfb565b610f5982610f548560400151611286565b612d25565b50505050505b610f7560015f80516020615d1883398151915255565b50565b5f610f81612911565b610f8d85858585612d5b565b9050610fa560015f80516020615d1883398151915255565b949350505050565b61081584848484612ec0565b5f610fc26126cb565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115610ffb57610ffb614f35565b600381111561100c5761100c614f35565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61108282611d23565b905060018351600381111561109957611099614f35565b146110ba578251604051633b0d540d60e21b815261071291906004016156d8565b6004815160058111156110cf576110cf614f35565b036110e5576110dd86612eec565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61110a896122ed565b604001516040518263ffffffff1660e01b815260040161112a9190615207565b606060405180830381865af4158015611145573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116991906156f2565b509150915081841461119657846040015160405163089938b360e11b815260040161071291815260200190565b806001600160401b031683606001516001600160401b031610806111cf5750806001600160401b03168560a001516001600160401b0316115b156111f857604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f61128f6126cb565b60030154610e6e906001600160401b0384166154e3565b5f6112b082611d23565b6080015192915050565b6105868383835f612ec0565b610e80848484846126ef565b6112da612911565b5f6112e36126cb565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561131c5761131c614f35565b600381111561132d5761132d614f35565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113a6576113a6614f35565b146113c7578051604051633b0d540d60e21b815261071291906004016156d8565b60046113d68260400151611d23565b5160058111156113e8576113e8614f35565b146114e7575f6113f7846122ed565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016114369190615207565b606060405180830381865af4158015611451573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061147591906156f2565b5091509150818460400151146114a15760405163089938b360e11b815260048101839052602401610712565b806001600160401b03168460c001516001600160401b031611156114e357604051632e19bc2d60e11b81526001600160401b0382166004820152602401610712565b5050505b6114f084612eec565b505061150860015f80516020615d1883398151915255565b5050565b5f6115156126cb565b90506001600160a01b0382166115495760405163caa903f960e01b81526001600160a01b0383166004820152602401610712565b5f8381526006820160205260409020546001600160a01b0316331461158f57335b604051636e2ccd7560e11b81526001600160a01b039091166004820152602401610712565b336001600160a01b038316036115be575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f6115f66126cb565b90505f61160283611d23565b519050600481600581111561161957611619614f35565b14611639578060405163170cc93360e21b815260040161071291906150cd565b5f8381526006830160205260409020546001600160a01b0316331461165e573361156a565b5f838152600683016020526040902054610586906001600160a01b031684612cfb565b61081584848484611f94565b5f611696612911565b6116a18333846130f9565b9050610e6e60015f80516020615d1883398151915255565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611702575080546001600160401b03808416911610155b156117205760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b17815561174b848461333e565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b5f80516020615cf88339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6117cb866122ed565b604001516040518263ffffffff1660e01b81526004016117eb9190615207565b6040805180830381865af4158015611805573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118299190615732565b915091508061184f57604051632d07135360e01b81528115156004820152602401610712565b5f8281526006840160205260409020805461186990615095565b90505f0361188d5760405163089938b360e11b815260048101839052602401610712565b60015f83815260078501602052604090205460ff1660058111156118b3576118b3614f35565b146118e6575f8281526007840160205260409081902054905163170cc93360e21b81526107129160ff16906004016150cd565b5f82815260068401602052604081206118fe91614c20565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f6119966126cb565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156119cf576119cf614f35565b60038111156119e0576119e0614f35565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611a5957611a59614f35565b14158015611a7a5750600381516003811115611a7757611a77614f35565b14155b15611a9b578051604051633b0d540d60e21b815261071291906004016156d8565b5f611aa98260400151611d23565b905080606001516001600160401b03165f03611adb576040516339b894f960e21b815260048101859052602401610712565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611b4993906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611b63573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611b8a91908101906151d6565b6040518263ffffffff1660e01b8152600401611ba69190615207565b6020604051808303815f875af1158015611bc2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e809190615219565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615cf88339815191529190611c2d90615095565b90505f03611c515760405163089938b360e11b815260048101839052602401610712565b60015f83815260078301602052604090205460ff166005811115611c7757611c77614f35565b14611caa575f8281526007820160205260409081902054905163170cc93360e21b81526107129160ff16906004016150cd565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611ce39190600401615755565b6020604051808303815f875af1158015611cff573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105869190615219565b611d2b614c57565b5f8281525f80516020615d38833981519152602052604090819020815160e0810190925280545f80516020615cf8833981519152929190829060ff166005811115611d7857611d78614f35565b6005811115611d8957611d89614f35565b8152602001600182018054611d9d90615095565b80601f0160208091040260200160405190810160405280929190818152602001828054611dc990615095565b8015611e145780601f10611deb57610100808354040283529160200191611e14565b820191905f5260205f20905b815481529060010190602001808311611df757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b038116611ea45760405163caa903f960e01b81526001600160a01b0382166004820152602401610712565b5f611ead6126cb565b5f8481526007820160205260409020549091506001600160a01b03610100909104163314611edb573361156a565b336001600160a01b03831603611f0a575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615cf8833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611f7c90869086906157df565b90815260200160405180910390205491505092915050565b611fa084848484611fc0565b61081557604051631036cf9160e11b815260048101859052602401610712565b5f80611fca6126cb565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561200357612003614f35565b600381111561201457612014614f35565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61208a82611d23565b90506002835160038111156120a1576120a1614f35565b146120c2578251604051633b0d540d60e21b815261071291906004016156d8565b60208301516001600160a01b0316331461215e575f8281526006850160205260409020546001600160a01b031633146120fb573361156a565b5f82815260068501602052604090205460a082015161212a91600160b01b90046001600160401b0316906157ee565b6001600160401b031642101561215e5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b60028151600581111561217357612173614f35565b036122955760028401546080840151612195916001600160401b0316906157ee565b6001600160401b03164210156121c95760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b87156121db576121d9828861242c565b505b5f8981526007850160205260409020805460ff191660031790556060830151608082015161221491849161220f919061580e565b613358565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561225784888c61352f565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a315159450610fa59350505050565b6004815160058111156122aa576122aa614f35565b036122d1576122ba83878b61352f565b506122c489612eec565b6001945050505050610fa5565b805160405163170cc93360e21b815261071291906004016150cd565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612351573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612378919081019061582e565b915091508061239a57604051636b2f19e960e01b815260040160405180910390fd5b8151156123c0578151604051636ba589a560e01b81526004810191909152602401610712565b60208201516001600160a01b0316156123fc576020820151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5092915050565b5f8061240d6126cb565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612477573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261249e919081019061582e565b91509150806124c057604051636b2f19e960e01b815260040160405180910390fd5b5f6124c96126cb565b60058101548451919250146124f7578251604051636ba589a560e01b81526004810191909152602401610712565b60208301516001600160a01b031615612533576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b60208301516001600160a01b03161561256f576020830151604051624de75d60e31b81526001600160a01b039091166004820152602401610712565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016125ac9190615207565b6040805180830381865af41580156125c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125ea91906158be565b915091508188146126115760405163089938b360e11b815260048101899052602401610712565b5f8881526006840160205260409020600101546001600160401b0390811690821611156126a2575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26126c0565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806126f96126cb565b90505f61270587613714565b905061271087612403565b61271f57600192505050610fa5565b5f8781526006830160205260409020546001600160a01b03163314612744573361156a565b5f87815260068301602052604090205460a082015161277391600160b01b90046001600160401b0316906157ee565b6001600160401b03168160c001516001600160401b031610156127ba5760c081015160405163fb6ce63f60e01b81526001600160401b039091166004820152602401610712565b5f86156127d2576127cb888761242c565b90506127f0565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f9061281590611286565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561287e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128a29190615219565b90508084600a015f8b81526020019081526020015f205f8282546128c691906154ae565b90915550506001600160a01b03861615612903575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615d1883398151915280546001190161294257604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612951614c57565b5f80516020615cf88339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612984886122ed565b604001516040518263ffffffff1660e01b81526004016129a49190615207565b6040805180830381865af41580156129be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129e29190615732565b915091508015612a0957604051632d07135360e01b81528115156004820152602401610712565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612a3a57612a3a614f35565b6005811115612a4b57612a4b614f35565b8152602001600182018054612a5f90615095565b80601f0160208091040260200160405190810160405280929190818152602001828054612a8b90615095565b8015612ad65780601f10612aad57610100808354040283529160200191612ad6565b820191905f5260205f20905b815481529060010190602001808311612ab957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612b4157612b41614f35565b14158015612b625750600181516005811115612b5f57612b5f614f35565b14155b15612b8357805160405163170cc93360e21b815261071291906004016150cd565b600381516005811115612b9857612b98614f35565b03612ba65760048152612bab565b600581525b836008018160200151604051612bc1919061538a565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612c0557612c05614f35565b021790555060208201516001820190612c1e90826153df565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612cc457612cc4614f35565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612d046126cb565b5f838152600a820160205260408120805491905590915061081584826139f8565b5f80516020615cd883398151915254611508906001600160a01b03168383613a6e565b60015f80516020615d1883398151915255565b5f80612d656126cb565b600281015490915061ffff600160401b90910481169086161080612d8e575061271061ffff8616115b15612db257604051635f12e6c360e11b815261ffff86166004820152602401610712565b60028101546001600160401b039081169085161015612dee576040516202a06d60e11b81526001600160401b0385166004820152602401610712565b8054831080612e005750806001015483115b15612e215760405163222d164360e21b815260048101849052602401610712565b5f612e2b84613acd565b90505f612e3782610e20565b90505f612e448983613af0565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b612ecc848484846126ef565b61081557604051635bff683f60e11b815260048101859052602401610712565b5f612ef56126cb565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f2e57612f2e614f35565b6003811115612f3f57612f3f614f35565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612fdc7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612feb91906157ee565b6001600160401b031642101561301f5760405163fb6ce63f60e01b81526001600160401b0342166004820152602401610712565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b03168061306f5750602082015161308d565b5f858152600985016020526040902080546001600160a01b03191690555b5f8061309a838886614015565b915091506130b38560200151610f548760600151611286565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f806131036126cb565b90505f6131126102d185613acd565b90505f61311e87611d23565b905061312987612403565b613149576040516330efa98b60e01b815260048101889052602401610712565b60028151600581111561315e5761315e614f35565b1461317f57805160405163170cc93360e21b815261071291906004016150cd565b5f82826080015161319091906157ee565b905083600201600a9054906101000a90046001600160401b031682604001516131b991906158e1565b6001600160401b0316816001600160401b031611156131f657604051636d51fe0560e11b81526001600160401b0382166004820152602401610712565b5f806132028a84613358565b915091505f8a8360405160200161323092919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a496505050505050505b9392505050565b6133466140c2565b61334f8261410d565b61150881614187565b5f8281525f80516020615d38833981519152602052604081206002015481905f80516020615cf883398151915290600160801b90046001600160401b03166133a085826141ef565b5f6133aa87614412565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613453573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261347a91908101906151d6565b6040518263ffffffff1660e01b81526004016134969190615207565b6020604051808303815f875af11580156134b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134d69190615219565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f806135396126cb565b90505f6135498660400151611d23565b90505f60038251600581111561356157613561614f35565b148061357f575060048251600581111561357d5761357d614f35565b145b1561358f575060c08101516135cc565b6002825160058111156135a4576135a4614f35565b036135b05750426135cc565b815160405163170cc93360e21b815261071291906004016150cd565b86608001516001600160401b0316816001600160401b0316116135f4575f9350505050613337565b600483015460608801515f916001600160a01b031690634f22429f9061361990611286565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa15801561369a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136be9190615219565b5f878152600886016020526040902081905590506001600160a01b038716156126c0575f868152600985016020526040902080546001600160a01b0319166001600160a01b038916179055979650505050505050565b61371c614c57565b5f8281525f80516020615d388339815191526020526040808220815160e0810190925280545f80516020615cf883398151915293929190829060ff16600581111561376957613769614f35565b600581111561377a5761377a614f35565b815260200160018201805461378e90615095565b80601f01602080910402602001604051908101604052809291908181526020018280546137ba90615095565b80156138055780601f106137dc57610100808354040283529160200191613805565b820191905f5260205f20905b8154815290600101906020018083116137e857829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561387357613873614f35565b146138a6575f8481526007830160205260409081902054905163170cc93360e21b81526107129160ff16906004016150cd565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff191660018360058111156138ea576138ea614f35565b02179055506020820151600182019061390390826153df565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6139a18582613358565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b5f5f80516020615cd883398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015613a53575f80fd5b505af1158015613a65573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b0383811660248301526044820183905261058691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614487565b5f610e6e825f80516020615cd8833981519152546001600160a01b0316906144e8565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613b3457604051637fab81e560e01b815260040160405180910390fd5b5f80516020615cf883398151915242613b536060860160408701614e99565b6001600160401b0316111580613b8d5750613b716202a300426154ae565b613b816060860160408701614e99565b6001600160401b031610155b15613bc757613ba26060850160408601614e99565b604051635879da1360e11b81526001600160401b039091166004820152602401610712565b613bdc613bd7606086018661590c565b6144f4565b613bec613bd7608086018661590c565b6030613bfb6020860186615920565b905014613c2d57613c0f6020850185615920565b6040516326475b2f60e11b8152610712925060040190815260200190565b613c378480615920565b90505f03613c6457613c498480615920565b604051633e08a12560e11b8152600401610712929190615962565b5f60088201613c738680615920565b604051613c819291906157df565b90815260200160405180910390205414613cba57613c9f8480615920565b60405163a41f772f60e01b8152600401610712929190615962565b613cc4835f6141ef565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613d018a80615920565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613d49908b018b615920565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613d9260608b0160408c01614e99565b6001600160401b03168152602001613dad60608b018b61590c565b613db690615975565b8152602001613dc860808b018b61590c565b613dd190615975565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613dff9190615aa2565b5f60405180830381865af4158015613e19573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613e409190810190615b59565b5f82815260068601602052604090209193509150613e5e82826153df565b508160088401613e6e8880615920565b604051613e7c9291906157df565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613eb8908590600401615207565b6020604051808303815f875af1158015613ed4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ef89190615219565b5f8481526007860160205260409020805460ff191660011790559050613f1e8780615920565b5f858152600787016020526040902060010191613f3c919083615b9c565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613f9b8880615920565b604051613fa99291906157df565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613fe79190614e99565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f6140206126cb565b5f868152600882016020526040812080549082905591925090819080156140b4575f8781526006850160205260409020546127109061406a90600160a01b900461ffff16836154e3565b61407491906156b9565b91508184600a015f8981526020019081526020015f205f82825461409891906154ae565b909155506140a890508282615c55565b92506140b489846139f8565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661410b57604051631afcd79f60e31b815260040160405180910390fd5b565b6141156140c2565b61411e8161465d565b614126614676565b610f756060820135608083013561414360c0850160a08601614e99565b61415360e0860160c08701615c68565b614164610100870160e08801615c81565b61010087013561417c61014089016101208a01615230565b886101400135614686565b61418f6140c2565b5f80516020615cd88339815191526001600160a01b0382166141cf57604051637330680360e01b81526001600160a01b0383166004820152602401610712565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f80516020615cf88339815191525f6001600160401b0380841690851611156142235761421c838561580e565b9050614230565b61422d848461580e565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061429257506001840154815161428e916001600160401b0316906154ae565b8210155b156142b8576001600160401b0383166060820152818152604081015160208201526142d7565b82816060018181516142ca91906157ee565b6001600160401b03169052505b60608101516142e79060646158e1565b602082015160018601546001600160401b0392909216916143129190600160401b900460ff166154e3565b101561434257606081015160405163dfae880160e01b81526001600160401b039091166004820152602401610712565b856001600160401b03168160400181815161435d91906154ae565b9052506040810180516001600160401b038716919061437d908390615c55565b905250600184015460408201516064916143a291600160401b90910460ff16906154e3565b10156143c9578060400151604051635943317f60e01b815260040161071291815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615d388339815191526020526040812060020180545f80516020615cf8833981519152919060089061445c90600160401b90046001600160401b0316615ca1565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61449b6001600160a01b0384168361486b565b905080515f141580156144bf5750808060200190518101906144bd9190615cbc565b155b1561058657604051635274afe760e01b81526001600160a01b0384166004820152602401610712565b5f613337833384614878565b6145016020820182614df4565b63ffffffff16158015614521575061451c602082018261524b565b151590505b15614568576145336020820182614df4565b614540602083018361524b565b60405163c08a0f1d60e01b815263ffffffff9093166004840152602483015250604401610712565b614575602082018261524b565b90506145846020830183614df4565b63ffffffff16111561459d576145336020820182614df4565b60015b6145ad602083018361524b565b9050811015611508576145c3602083018361524b565b6145ce600184615c55565b8181106145dd576145dd615290565b90506020020160208101906145f29190615230565b6001600160a01b0316614608602084018461524b565b8381811061461857614618615290565b905060200201602081019061462d9190615230565b6001600160a01b0316101561465557604051630dbc8d5f60e31b815260040160405180910390fd5b6001016145a0565b6146656140c2565b61466d6149db565b610f75816149e3565b61467e6140c2565b61410b614acb565b61468e6140c2565b5f6146976126cb565b905061ffff861615806146af575061271061ffff8716115b156146d357604051635f12e6c360e11b815261ffff87166004820152602401610712565b878911156146f75760405163222d164360e21b8152600481018a9052602401610712565b60ff8516158061470a5750600a60ff8616115b1561472d5760405163170db35960e31b815260ff86166004820152602401610712565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614794576040516202a06d60e11b81526001600160401b0388166004820152602401610712565b835f036147b45760405163a733007160e01b815260040160405180910390fd5b816147d557604051632f6bd1db60e01b815260048101839052602401610712565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b606061333783835f614ad3565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa1580156148be573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148e29190615219565b90506148f96001600160a01b038616853086614b62565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa15801561493d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906149619190615219565b90508181116149c75760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b6064820152608401610712565b6149d18282615c55565b9695505050505050565b61410b6140c2565b6149eb6140c2565b80355f80516020615cf88339815191529081556014614a106060840160408501615c81565b60ff161180614a2f5750614a2a6060830160408401615c81565b60ff16155b15614a6357614a446060830160408401615c81565b604051634a59bbff60e11b815260ff9091166004820152602401610712565b614a736060830160408401615c81565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614aa46040830160208401614e99565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612d486140c2565b606081471015614af85760405163cd78605960e01b8152306004820152602401610712565b5f80856001600160a01b03168486604051614b13919061538a565b5f6040518083038185875af1925050503d805f8114614b4d576040519150601f19603f3d011682016040523d82523d5f602084013e614b52565b606091505b50915091506149d1868383614b9b565b6040516001600160a01b0384811660248301528381166044830152606482018390526108159186918216906323b872dd90608401613a9b565b606082614bb057614bab82614bf7565b613337565b8151158015614bc757506001600160a01b0384163b155b15614bf057604051639996b31560e01b81526001600160a01b0385166004820152602401610712565b5080613337565b805115614c075780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b508054614c2c90615095565b5f825580601f10614c3b575050565b601f0160209004905f5260205f2090810190610f759190614c94565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614ca8575f8155600101614c95565b5090565b8015158114610f75575f80fd5b803563ffffffff81168114614ccc575f80fd5b919050565b5f805f60608486031215614ce3575f80fd5b833592506020840135614cf581614cac565b9150614d0360408501614cb9565b90509250925092565b5f60208284031215614d1c575f80fd5b5035919050565b5f8060408385031215614d34575f80fd5b82356001600160401b03811115614d49575f80fd5b830160808186031215614d5a575f80fd5b9150614d6860208401614cb9565b90509250929050565b5f8060408385031215614d82575f80fd5b82359150614d6860208401614cb9565b6001600160a01b0381168114610f75575f80fd5b5f805f8060808587031215614db9575f80fd5b843593506020850135614dcb81614cac565b9250614dd960408601614cb9565b91506060850135614de981614d92565b939692955090935050565b5f60208284031215614e04575f80fd5b61333782614cb9565b803561ffff81168114614ccc575f80fd5b6001600160401b0381168114610f75575f80fd5b5f805f8060808587031215614e45575f80fd5b84356001600160401b03811115614e5a575f80fd5b850160a08188031215614e6b575f80fd5b9350614e7960208601614e0d565b92506040850135614e8981614e1e565b9396929550929360600135925050565b5f60208284031215614ea9575f80fd5b813561333781614e1e565b5f8060408385031215614ec5575f80fd5b823591506020830135614ed781614d92565b809150509250929050565b5f8060408385031215614ef3575f80fd5b50508035926020909101359150565b5f80828403610180811215614f15575f80fd5b61016080821215614f24575f80fd5b8493508301359050614ed781614d92565b634e487b7160e01b5f52602160045260245ffd5b60068110614f5957614f59614f35565b9052565b5f5b83811015614f77578181015183820152602001614f5f565b50505f910152565b5f8151808452614f96816020860160208601614f5d565b601f01601f19169290920160200192915050565b60208152614fbc602082018351614f49565b5f602083015160e06040840152614fd7610100840182614f7f565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f806020838503121561503b575f80fd5b82356001600160401b0380821115615051575f80fd5b818501915085601f830112615064575f80fd5b813581811115615072575f80fd5b866020828501011115615083575f80fd5b60209290920196919550909350505050565b600181811c908216806150a957607f821691505b6020821081036150c757634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610e6e8284614f49565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715615111576151116150db565b60405290565b604080519081016001600160401b0381118282101715615111576151116150db565b604051601f8201601f191681016001600160401b0381118282101715615161576151616150db565b604052919050565b5f6001600160401b03821115615181576151816150db565b50601f01601f191660200190565b5f82601f83011261519e575f80fd5b81516151b16151ac82615169565b615139565b8181528460208386010111156151c5575f80fd5b610fa5826020830160208701614f5d565b5f602082840312156151e6575f80fd5b81516001600160401b038111156151fb575f80fd5b610fa58482850161518f565b602081525f6133376020830184614f7f565b5f60208284031215615229575f80fd5b5051919050565b5f60208284031215615240575f80fd5b813561333781614d92565b5f808335601e19843603018112615260575f80fd5b8301803591506001600160401b03821115615279575f80fd5b6020019150600581901b3603821315613528575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e198336030181126152b8575f80fd5b9190910192915050565b5f82601f8301126152d1575f80fd5b81356152df6151ac82615169565b8181528460208386010111156152f3575f80fd5b816020850160208301375f918101602001919091529392505050565b5f6060823603121561531f575f80fd5b6153276150ef565b82356001600160401b038082111561533d575f80fd5b615349368387016152c2565b8352602085013591508082111561535e575f80fd5b5061536b368286016152c2565b602083015250604083013561537f81614e1e565b604082015292915050565b5f82516152b8818460208701614f5d565b601f82111561058657805f5260205f20601f840160051c810160208510156153c05750805b601f840160051c820191505b81811015610e80575f81556001016153cc565b81516001600160401b038111156153f8576153f86150db565b61540c816154068454615095565b8461539b565b602080601f83116001811461543f575f84156154285750858301515b5f19600386901b1c1916600185901b1785556110dd565b5f85815260208120601f198616915b8281101561546d5788860151825594840194600190910190840161544e565b508582101561548a57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610e6e57610e6e61549a565b5f63ffffffff8083168181036154d9576154d961549a565b6001019392505050565b8082028115828204841417610e6e57610e6e61549a565b5f808335601e1984360301811261550f575f80fd5b83016020810192503590506001600160401b0381111561552d575f80fd5b803603821315613528575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561561857848303601f19018952813536889003605e1901811261559f575f80fd5b870160606155ad82806154fa565b8287526155bd838801828461553b565b925050506155cd868301836154fa565b868303888801526155df83828461553b565b9250505060408083013592506155f483614e1e565b6001600160401b03929092169490910193909352978301979083019060010161557a565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561564981614d92565b6001600160a01b031660608381019190915283013536849003601e19018112615670575f80fd5b83016020810190356001600160401b0381111561568b575f80fd5b8060051b360382131561569c575f80fd5b6080808501526156b060a085018284615563565b95945050505050565b5f826156d357634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106156ec576156ec614f35565b91905290565b5f805f60608486031215615704575f80fd5b83519250602084015161571681614e1e565b604085015190925061572781614e1e565b809150509250925092565b5f8060408385031215615743575f80fd5b825191506020830151614ed781614cac565b5f60208083525f845461576781615095565b806020870152604060018084165f811461578857600181146157a4576157d1565b60ff19851660408a0152604084151560051b8a010195506157d1565b895f5260205f205f5b858110156157c85781548b82018601529083019088016157ad565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156123fc576123fc61549a565b6001600160401b038281168282160390808211156123fc576123fc61549a565b5f806040838503121561583f575f80fd5b82516001600160401b0380821115615855575f80fd5b9084019060608287031215615868575f80fd5b6158706150ef565b82518152602083015161588281614d92565b6020820152604083015182811115615898575f80fd5b6158a48882860161518f565b6040830152508094505050506020830151614ed781614cac565b5f80604083850312156158cf575f80fd5b825191506020830151614ed781614e1e565b6001600160401b038181168382160280821691908281146159045761590461549a565b505092915050565b5f8235603e198336030181126152b8575f80fd5b5f808335601e19843603018112615935575f80fd5b8301803591506001600160401b0382111561594e575f80fd5b602001915036819003821315613528575f80fd5b602081525f610fa560208301848661553b565b5f60408236031215615985575f80fd5b61598d615117565b61599683614cb9565b81526020808401356001600160401b03808211156159b2575f80fd5b9085019036601f8301126159c4575f80fd5b8135818111156159d6576159d66150db565b8060051b91506159e7848301615139565b8181529183018401918481019036841115615a00575f80fd5b938501935b83851015615a2a5784359250615a1a83614d92565b8282529385019390850190615a05565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b80831015615a975784516001600160a01b03168252938301936001929092019190830190615a6e565b509695505050505050565b60208152815160208201525f602083015160e06040840152615ac8610100840182614f7f565b90506040840151601f1980858403016060860152615ae68383614f7f565b92506001600160401b03606087015116608086015260808601519150808584030160a0860152615b168383615a3c565b925060a08601519150808584030160c086015250615b348282615a3c565b91505060c0840151615b5160e08501826001600160401b03169052565b509392505050565b5f8060408385031215615b6a575f80fd5b8251915060208301516001600160401b03811115615b86575f80fd5b615b928582860161518f565b9150509250929050565b6001600160401b03831115615bb357615bb36150db565b615bc783615bc18354615095565b8361539b565b5f601f841160018114615bf8575f8515615be15750838201355b5f19600387901b1c1916600186901b178355610e80565b5f83815260208120601f198716915b82811015615c275786850135825560209485019460019092019101615c07565b5086821015615c43575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610e6e57610e6e61549a565b5f60208284031215615c78575f80fd5b61333782614e0d565b5f60208284031215615c91575f80fd5b813560ff81168114613337575f80fd5b5f6001600160401b038083168181036154d9576154d961549a565b5f60208284031215615ccc575f80fd5b815161333781614cac56fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220800cb3412a237729de0e877c4834301f7b7f14021b2617bb275262ecf618d1ed64736f6c63430008190033", } // 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 1f46d0ddd..aa58a243f 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -104,7 +104,7 @@ type ValidatorRegistrationInput 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\":\"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\":[{\"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\":[],\"name\":\"InvalidInitializationStatus\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"name\":\"InvalidMaximumChurnPercentage\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"InvalidMinStakeDuration\",\"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\":\"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\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InvalidTotalWeight\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"uptimeBlockchainID\",\"type\":\"bytes32\"}],\"name\":\"InvalidUptimeBlockchainID\",\"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\":\"uint64\",\"name\":\"newValidatorWeight\",\"type\":\"uint64\"}],\"name\":\"MaxWeightExceeded\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"endTime\",\"type\":\"uint64\"}],\"name\":\"MinStakeDurationNotPassed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"}],\"name\":\"NodeAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PChainOwnerAddressesNotSorted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"UnauthorizedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"validRegistration\",\"type\":\"bool\"}],\"name\":\"UnexpectedRegistrationStatus\",\"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\":\"rewards\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fees\",\"type\":\"uint256\"}],\"name\":\"DelegationEnded\",\"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\":\"DelegatorAdded\",\"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\":\"startTime\",\"type\":\"uint256\"}],\"name\":\"DelegatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"DelegatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"}],\"name\":\"InitialValidatorCreated\",\"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\":false,\"internalType\":\"uint64\",\"name\":\"uptime\",\"type\":\"uint64\"}],\"name\":\"UptimeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes\",\"name\":\"nodeID\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"registerValidationMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"registrationExpiry\",\"type\":\"uint64\"}],\"name\":\"ValidationPeriodCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"enumValidatorStatus\",\"name\":\"status\",\"type\":\"uint8\"}],\"name\":\"ValidationPeriodEnded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"ValidationPeriodRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"weight\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"endTime\",\"type\":\"uint256\"}],\"name\":\"ValidatorRemovalInitialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"validatorWeight\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"setWeightMessageID\",\"type\":\"bytes32\"}],\"name\":\"ValidatorWeightUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"ADDRESS_LENGTH\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"BIPS_CONVERSION_FACTOR\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"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_DELEGATION_FEE_BIPS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAXIMUM_REGISTRATION_EXPIRY_LENGTH\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"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\":\"POS_VALIDATOR_MANAGER_STORAGE_LOCATION\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"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\":\"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\":\"completeEndDelegation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"completeValidatorRegistration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"includeUptimeProof\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"messageIndex\",\"type\":\"uint32\"}],\"name\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndDelegation\",\"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\":\"forceInitializeEndValidation\",\"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\":\"forceInitializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"messageNonce\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"weight\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"startedAt\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"endedAt\",\"type\":\"uint64\"}],\"internalType\":\"structValidator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"getWeight\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"subnetID\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"churnPeriodSeconds\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"maximumChurnPercentage\",\"type\":\"uint8\"}],\"internalType\":\"structValidatorManagerSettings\",\"name\":\"baseSettings\",\"type\":\"tuple\"},{\"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\":\"structPoSValidatorManagerSettings\",\"name\":\"settings\",\"type\":\"tuple\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"validationID\",\"type\":\"bytes32\"}],\"name\":\"initializeDelegatorRegistration\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndDelegation\",\"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\":\"initializeEndValidation\",\"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\":\"initializeEndValidation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"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\":\"structValidatorRegistrationInput\",\"name\":\"registrationInput\",\"type\":\"tuple\"},{\"internalType\":\"uint16\",\"name\":\"delegationFeeBips\",\"type\":\"uint16\"},{\"internalType\":\"uint64\",\"name\":\"minStakeDuration\",\"type\":\"uint64\"}],\"name\":\"initializeValidatorRegistration\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"payable\",\"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\"}],\"name\":\"registeredValidators\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"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\":[{\"internalType\":\"bytes32\",\"name\":\"delegationID\",\"type\":\"bytes32\"}],\"name\":\"resendUpdateDelegation\",\"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: "0x608060405234801561000f575f80fd5b50604051615c3a380380615c3a83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615aed8061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614abf565b610724565b005b348015610263575f80fd5b50610256610272366004614afa565b610735565b348015610282575f80fd5b50610256610291366004614b11565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614abf565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614b28565b610aae565b34801561030a575f80fd5b50610256610319366004614b76565b611033565b348015610329575f80fd5b5061033d610338366004614afa565b6110a7565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614bab565b6110fb565b3480156103d9575f80fd5b506102566103e8366004614abf565b61110e565b3480156103f8575f80fd5b50610256610407366004614bf9565b61111a565b348015610417575f80fd5b50610256610426366004614bab565b6111ff565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614b76565b61120b565b34801561047e575f80fd5b5061049261048d366004614c26565b6114d8565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614afa565b6114f8565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614abf565b61150c565b3480156104fc575f80fd5b5061025661050b366004614bab565b611518565b34801561051b575f80fd5b5061025661052a366004614b76565b611524565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614c41565b61175e565b34801561056d575f80fd5b5061025661057c366004614afa565b611840565b34801561058c575f80fd5b5061025661059b366004614bab565b6118d4565b3480156105ab575f80fd5b506102566105ba366004614bf9565b6118e0565b6104926105cd366004614c80565b611ad5565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614afa565b611b09565b348015610649575f80fd5b506104925f80516020615a5883398151915281565b348015610669575f80fd5b50610256610678366004614afa565b611d62565b61049261068b366004614afa565b611e9f565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614afa565b611ed0565b6040516102b89190614d56565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614c41565b61201f565b348015610710575f80fd5b5061049261071f366004614dd6565b6120e6565b6107308383835f612141565b505050565b5f8181525f80516020615a988339815191526020526040808220815160e0810190925280545f80516020615a5883398151915293929190829060ff16600581111561078257610782614ce1565b600581111561079357610793614ce1565b81526020016001820180546107a790614e41565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614e41565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614ce1565b146108c5575f8381526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e73565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190614f7c565b6040518263ffffffff1660e01b815260040161097f9190614fad565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf9190614fbf565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a568361216d565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f61217e565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615a588339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b679190614fbf565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba16060850160408601614fd6565b6001600160a01b031614610be457610bbf6060840160408501614fd6565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf26060850185614ff1565b905090505f805b828163ffffffff161015610e59575f610c156060880188614ff1565b8363ffffffff16818110610c2b57610c2b615036565b9050602002810190610c3d919061504a565b610c46906150b5565b80516040519192505f916008880191610c5e91615130565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc9190600401614fad565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd791615130565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d159190614fbf565b90508086600801835f0151604051610d2d9190615130565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610d6d9082615185565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610dec9085615254565b8251604051919550610dfd91615130565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610e5290615267565b9050610bf9565b50600483018190556001830154606490610e7d90600160401b900460ff1683615289565b1015610e9f57604051635943317f60e01b8152600481018290526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ec3876124b3565b604001516040518263ffffffff1660e01b8152600401610ee39190614fad565b602060405180830381865af4158015610efe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f229190614fbf565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f5c91906153cb565b5f60405180830381865af4158015610f76573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f9d9190810190614f7c565b90505f600282604051610fb09190615130565b602060405180830381855afa158015610fcb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610fee9190614fbf565b905082811461101a5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506009909201805460ff1916600117905550505050565b61103c826125c9565b61105c576040516330efa98b60e01b8152600481018390526024016108bc565b5f61106683611ed0565b519050600281600581111561107d5761107d614ce1565b1461109d578060405163170cc93360e21b81526004016108bc9190614e73565b6109bf83836125f2565b5f806110b1612891565b600301546110bf908461545f565b90508015806110d457506001600160401b0381115b156110f55760405163222d164360e21b8152600481018490526024016108bc565b92915050565b6111078484848461217e565b5050505050565b6109bf8383835f6128b5565b611122612ad7565b5f61112b612891565b90505f8061113884612b0e565b91509150611145826125c9565b611151575050506111e6565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b039182169116806111885750806111a6565b5f848152600b86016020526040902080546001600160a01b03191690555b6004835160058111156111bb576111bb614ce1565b036111ca576111ca8185612ec1565b6111e0826111db85604001516114d8565b612eeb565b50505050505b6111fc60015f80516020615a7883398151915255565b50565b6109bf84848484612f11565b5f611214612891565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561124d5761124d614ce1565b600381111561125e5761125e614ce1565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112d482611ed0565b90506001835160038111156112eb576112eb614ce1565b1461130c578251604051633b0d540d60e21b81526108bc919060040161547e565b60048151600581111561132157611321614ce1565b036113375761132f86612f3d565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61135c896124b3565b604001516040518263ffffffff1660e01b815260040161137c9190614fad565b606060405180830381865af4158015611397573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113bb9190615498565b50915091508184146113e857846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b031610806114215750806001600160401b03168560a001516001600160401b0316115b1561144a57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114e1612891565b600301546110f5906001600160401b038416615289565b5f61150282611ed0565b6080015192915050565b6107308383835f612f11565b611107848484846128b5565b61152c612ad7565b5f611535612891565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561156e5761156e614ce1565b600381111561157f5761157f614ce1565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156115f8576115f8614ce1565b14611619578051604051633b0d540d60e21b81526108bc919060040161547e565b60046116288260400151611ed0565b51600581111561163a5761163a614ce1565b14611739575f611649846124b3565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116889190614fad565b606060405180830381865af41580156116a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c79190615498565b5091509150818460400151146116f35760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561173557604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61174284612f3d565b505061175a60015f80516020615a7883398151915255565b5050565b6001600160a01b0381166117905760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f611799612891565b5f8481526006820160205260409020549091506001600160a01b031633146117e257335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b336001600160a01b03831603611811575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f611849612891565b90505f61185583611ed0565b519050600481600581111561186c5761186c614ce1565b1461188c578060405163170cc93360e21b81526004016108bc9190614e73565b5f8381526006830160205260409020546001600160a01b031633146118b157336117bd565b5f838152600683016020526040902054610730906001600160a01b031684612ec1565b6109bf84848484612141565b5f80516020615a588339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f611913866124b3565b604001516040518263ffffffff1660e01b81526004016119339190614fad565b6040805180830381865af415801561194d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197191906154cd565b915091508061199757604051632d07135360e01b815281151560048201526024016108bc565b5f828152600684016020526040902080546119b190614e41565b90505f036119d55760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078501602052604090205460ff1660058111156119fb576119fb614ce1565b14611a2e575f8281526007840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e73565b5f8281526006840160205260408120611a4691614a13565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611ade612ad7565b611aea8484843461314a565b9050611b0260015f80516020615a7883398151915255565b9392505050565b5f611b12612891565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b4b57611b4b614ce1565b6003811115611b5c57611b5c614ce1565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611bd557611bd5614ce1565b14158015611bf65750600381516003811115611bf357611bf3614ce1565b14155b15611c17578051604051633b0d540d60e21b81526108bc919060040161547e565b5f611c258260400151611ed0565b905080606001516001600160401b03165f03611c57576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611cc593906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611cdf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d069190810190614f7c565b6040518263ffffffff1660e01b8152600401611d229190614fad565b6020604051808303815f875af1158015611d3e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111079190614fbf565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615a588339815191529190611da990614e41565b90505f03611dcd5760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078301602052604090205460ff166005811115611df357611df3614ce1565b14611e26575f8281526007820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e73565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611e5f91906004016154f0565b6020604051808303815f875af1158015611e7b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107309190614fbf565b5f611ea8612ad7565b611eb38233346132a4565b9050611ecb60015f80516020615a7883398151915255565b919050565b611ed8614a4a565b5f8281525f80516020615a98833981519152602052604090819020815160e0810190925280545f80516020615a58833981519152929190829060ff166005811115611f2557611f25614ce1565b6005811115611f3657611f36614ce1565b8152602001600182018054611f4a90614e41565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7690614e41565b8015611fc15780601f10611f9857610100808354040283529160200191611fc1565b820191905f5260205f20905b815481529060010190602001808311611fa457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b0381166120515760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f61205a612891565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461208857336117bd565b336001600160a01b038316036120b7575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615a58833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890612129908690869061557a565b90815260200160405180910390205491505092915050565b61214d8484848461217e565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b6121756134e4565b6111fc8161352f565b5f80612188612891565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156121c1576121c1614ce1565b60038111156121d2576121d2614ce1565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61224882611ed0565b905060028351600381111561225f5761225f614ce1565b14612280578251604051633b0d540d60e21b81526108bc919060040161547e565b60208301516001600160a01b0316331461231c575f8281526006850160205260409020546001600160a01b031633146122b957336117bd565b5f82815260068501602052604090205460a08201516122e891600160b01b90046001600160401b031690615589565b6001600160401b031642101561231c5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b60028151600581111561233157612331614ce1565b036124535760028401546080840151612353916001600160401b031690615589565b6001600160401b03164210156123875760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b87156123995761239782886125f2565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516123d29184916123cd91906155a9565b6135a9565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561241584888c613780565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506124ab9350505050565b60048151600581111561246857612468614ce1565b0361248f5761247883878b613780565b5061248289612f3d565b60019450505050506124ab565b805160405163170cc93360e21b81526108bc9190600401614e73565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612517573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261253e91908101906155c9565b915091508061256057604051636b2f19e960e01b815260040160405180910390fd5b815115612586578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b0316156125c2576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f806125d3612891565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa15801561263d573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261266491908101906155c9565b915091508061268657604051636b2f19e960e01b815260040160405180910390fd5b5f61268f612891565b60058101548451919250146126bd578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b0316156126f9576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b031615612735576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016127729190614fad565b6040805180830381865af415801561278c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127b09190615659565b915091508188146127d75760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b039081169082161115612868575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612886565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806128bf612891565b90505f6128cb87613965565b90506128d6876125c9565b6128e5576001925050506124ab565b5f8781526006830160205260409020546001600160a01b0316331461290a57336117bd565b5f87815260068301602052604090205460a082015161293991600160b01b90046001600160401b031690615589565b6001600160401b03168160c001516001600160401b031610156129805760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f86156129985761299188876125f2565b90506129b6565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906129db906114d8565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612a44573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a689190614fbf565b90508084600a015f8b81526020019081526020015f205f828254612a8c9190615254565b90915550506001600160a01b03861615612ac9575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615a78833981519152805460011901612b0857604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612b17614a4a565b5f80516020615a588339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612b4a886124b3565b604001516040518263ffffffff1660e01b8152600401612b6a9190614fad565b6040805180830381865af4158015612b84573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba891906154cd565b915091508015612bcf57604051632d07135360e01b815281151560048201526024016108bc565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612c0057612c00614ce1565b6005811115612c1157612c11614ce1565b8152602001600182018054612c2590614e41565b80601f0160208091040260200160405190810160405280929190818152602001828054612c5190614e41565b8015612c9c5780601f10612c7357610100808354040283529160200191612c9c565b820191905f5260205f20905b815481529060010190602001808311612c7f57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612d0757612d07614ce1565b14158015612d285750600181516005811115612d2557612d25614ce1565b14155b15612d4957805160405163170cc93360e21b81526108bc9190600401614e73565b600381516005811115612d5e57612d5e614ce1565b03612d6c5760048152612d71565b600581525b836008018160200151604051612d879190615130565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612dcb57612dcb614ce1565b021790555060208201516001820190612de49082615185565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612e8a57612e8a614ce1565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612eca612891565b5f838152600a82016020526040812080549190559091506109bf8482613c49565b61175a6001600160a01b03831682613ca7565b60015f80516020615a7883398151915255565b612f1d848484846128b5565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612f46612891565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f7f57612f7f614ce1565b6003811115612f9057612f90614ce1565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015281015190915061302d7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b826080015161303c9190615589565b6001600160401b03164210156130705760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130c0575060208201516130de565b5f858152600985016020526040902080546001600160a01b03191690555b5f806130eb838886613d3a565b9150915061310485602001516111db87606001516114d8565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80613154612891565b600281015490915061ffff600160401b9091048116908616108061317d575061271061ffff8616115b156131a157604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b0390811690851610156131dd576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b80548310806131ef5750806001015483115b156132105760405163222d164360e21b8152600481018490526024016108bc565b825f61321b826110a7565b90505f6132288983613de7565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f806132ae612891565b90505f6132ba846110a7565b90505f6132c687611ed0565b90506132d1876125c9565b6132f1576040516330efa98b60e01b8152600481018890526024016108bc565b60028151600581111561330657613306614ce1565b1461332757805160405163170cc93360e21b81526108bc9190600401614e73565b5f8282608001516133389190615589565b905083600201600a9054906101000a90046001600160401b03168260400151613361919061567c565b6001600160401b0316816001600160401b0316111561339e57604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f806133aa8a846135a9565b915091505f8a836040516020016133d892919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661352d57604051631afcd79f60e31b815260040160405180910390fd5b565b6135376134e4565b6135408161430c565b613548614325565b6111fc6060820135608083013561356560c0850160a08601614c26565b61357560e0860160c087016156a7565b613586610100870160e088016156c0565b61010087013561359e61014089016101208a01614fd6565b886101400135614335565b5f8281525f80516020615a98833981519152602052604081206002015481905f80516020615a5883398151915290600160801b90046001600160401b03166135f1858261451a565b5f6135fb8761473d565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156136a4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136cb9190810190614f7c565b6040518263ffffffff1660e01b81526004016136e79190614fad565b6020604051808303815f875af1158015613703573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137279190614fbf565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061378a612891565b90505f61379a8660400151611ed0565b90505f6003825160058111156137b2576137b2614ce1565b14806137d057506004825160058111156137ce576137ce614ce1565b145b156137e0575060c081015161381d565b6002825160058111156137f5576137f5614ce1565b0361380157504261381d565b815160405163170cc93360e21b81526108bc9190600401614e73565b86608001516001600160401b0316816001600160401b031611613845575f9350505050611b02565b600483015460608801515f916001600160a01b031690634f22429f9061386a906114d8565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa1580156138eb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061390f9190614fbf565b5f878152600886016020526040902081905590506001600160a01b03871615612886575f868152600985016020526040902080546001600160a01b0319166001600160a01b038916179055979650505050505050565b61396d614a4a565b5f8281525f80516020615a988339815191526020526040808220815160e0810190925280545f80516020615a5883398151915293929190829060ff1660058111156139ba576139ba614ce1565b60058111156139cb576139cb614ce1565b81526020016001820180546139df90614e41565b80601f0160208091040260200160405190810160405280929190818152602001828054613a0b90614e41565b8015613a565780601f10613a2d57610100808354040283529160200191613a56565b820191905f5260205f20905b815481529060010190602001808311613a3957829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613ac457613ac4614ce1565b14613af7575f8481526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e73565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613b3b57613b3b614ce1565b021790555060208201516001820190613b549082615185565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613bf285826135a9565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613c95575f80fd5b505af115801561132f573d5f803e3d5ffd5b80471015613cca5760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613d13576040519150601f19603f3d011682016040523d82523d5f602084013e613d18565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d45612891565b5f86815260088201602052604081208054908290559192509081908015613dd9575f87815260068501602052604090205461271090613d8f90600160a01b900461ffff1683615289565b613d99919061545f565b91508184600a015f8981526020019081526020015f205f828254613dbd9190615254565b90915550613dcd905082826156e0565b9250613dd98984613c49565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613e2b57604051637fab81e560e01b815260040160405180910390fd5b5f80516020615a5883398151915242613e4a6060860160408701614c26565b6001600160401b0316111580613e845750613e686202a30042615254565b613e786060860160408701614c26565b6001600160401b031610155b15613ebe57613e996060850160408601614c26565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b613ed3613ece60608601866156f3565b6147b2565b613ee3613ece60808601866156f3565b6030613ef26020860186615707565b905014613f2457613f066020850185615707565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613f2e8480615707565b90505f03613f5b57613f408480615707565b604051633e08a12560e11b81526004016108bc929190615749565b5f60088201613f6a8680615707565b604051613f7892919061557a565b90815260200160405180910390205414613fb157613f968480615707565b60405163a41f772f60e01b81526004016108bc929190615749565b613fbb835f61451a565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613ff88a80615707565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190614040908b018b615707565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060200161408960608b0160408c01614c26565b6001600160401b031681526020016140a460608b018b6156f3565b6140ad9061575c565b81526020016140bf60808b018b6156f3565b6140c89061575c565b8152602001886001600160401b03168152506040518263ffffffff1660e01b81526004016140f69190615889565b5f60405180830381865af4158015614110573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526141379190810190615940565b5f828152600686016020526040902091935091506141558282615185565b5081600884016141658880615707565b60405161417392919061557a565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141af908590600401614fad565b6020604051808303815f875af11580156141cb573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141ef9190614fbf565b5f8481526007860160205260409020805460ff1916600117905590506142158780615707565b5f858152600787016020526040902060010191614233919083615983565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806142928880615707565b6040516142a092919061557a565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b60400160208101906142de9190614c26565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b6143146134e4565b61431c61491b565b6111fc81614923565b61432d6134e4565b61352d614a0b565b61433d6134e4565b5f614346612891565b905061ffff8616158061435e575061271061ffff8716115b1561438257604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156143a65760405163222d164360e21b8152600481018a90526024016108bc565b60ff851615806143b95750600a60ff8616115b156143dc5760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614443576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f036144635760405163a733007160e01b815260040160405180910390fd5b8161448457604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615a588339815191525f6001600160401b03808416908516111561454e5761454783856155a9565b905061455b565b61455884846155a9565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806145bd5750600184015481516145b9916001600160401b031690615254565b8210155b156145e3576001600160401b038316606082015281815260408101516020820152614602565b82816060018181516145f59190615589565b6001600160401b03169052505b606081015161461290606461567c565b602082015160018601546001600160401b03929092169161463d9190600160401b900460ff16615289565b101561466d57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b856001600160401b0316816040018181516146889190615254565b9052506040810180516001600160401b03871691906146a89083906156e0565b905250600184015460408201516064916146cd91600160401b90910460ff1690615289565b10156146f4578060400151604051635943317f60e01b81526004016108bc91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615a988339815191526020526040812060020180545f80516020615a58833981519152919060089061478790600160401b90046001600160401b0316615a3c565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6147bf6020820182614bf9565b63ffffffff161580156147df57506147da6020820182614ff1565b151590505b15614826576147f16020820182614bf9565b6147fe6020830183614ff1565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b6148336020820182614ff1565b90506148426020830183614bf9565b63ffffffff16111561485b576147f16020820182614bf9565b60015b61486b6020830183614ff1565b905081101561175a576148816020830183614ff1565b61488c6001846156e0565b81811061489b5761489b615036565b90506020020160208101906148b09190614fd6565b6001600160a01b03166148c66020840184614ff1565b838181106148d6576148d6615036565b90506020020160208101906148eb9190614fd6565b6001600160a01b0316101561491357604051630dbc8d5f60e31b815260040160405180910390fd5b60010161485e565b61352d6134e4565b61492b6134e4565b80355f80516020615a58833981519152908155601461495060608401604085016156c0565b60ff16118061496f575061496a60608301604084016156c0565b60ff16155b156149a35761498460608301604084016156c0565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b6149b360608301604084016156c0565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149e46040830160208401614c26565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612efe6134e4565b508054614a1f90614e41565b5f825580601f10614a2e575050565b601f0160209004905f5260205f20908101906111fc9190614a87565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614a9b575f8155600101614a88565b5090565b80151581146111fc575f80fd5b803563ffffffff81168114611ecb575f80fd5b5f805f60608486031215614ad1575f80fd5b833592506020840135614ae381614a9f565b9150614af160408501614aac565b90509250925092565b5f60208284031215614b0a575f80fd5b5035919050565b5f6101608284031215614b22575f80fd5b50919050565b5f8060408385031215614b39575f80fd5b82356001600160401b03811115614b4e575f80fd5b830160808186031215614b5f575f80fd5b9150614b6d60208401614aac565b90509250929050565b5f8060408385031215614b87575f80fd5b82359150614b6d60208401614aac565b6001600160a01b03811681146111fc575f80fd5b5f805f8060808587031215614bbe575f80fd5b843593506020850135614bd081614a9f565b9250614bde60408601614aac565b91506060850135614bee81614b97565b939692955090935050565b5f60208284031215614c09575f80fd5b611b0282614aac565b6001600160401b03811681146111fc575f80fd5b5f60208284031215614c36575f80fd5b8135611b0281614c12565b5f8060408385031215614c52575f80fd5b823591506020830135614c6481614b97565b809150509250929050565b803561ffff81168114611ecb575f80fd5b5f805f60608486031215614c92575f80fd5b83356001600160401b03811115614ca7575f80fd5b840160a08187031215614cb8575f80fd5b9250614cc660208501614c6f565b91506040840135614cd681614c12565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d0557614d05614ce1565b9052565b5f5b83811015614d23578181015183820152602001614d0b565b50505f910152565b5f8151808452614d42816020860160208601614d09565b601f01601f19169290920160200192915050565b60208152614d68602082018351614cf5565b5f602083015160e06040840152614d83610100840182614d2b565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614de7575f80fd5b82356001600160401b0380821115614dfd575f80fd5b818501915085601f830112614e10575f80fd5b813581811115614e1e575f80fd5b866020828501011115614e2f575f80fd5b60209290920196919550909350505050565b600181811c90821680614e5557607f821691505b602082108103614b2257634e487b7160e01b5f52602260045260245ffd5b602081016110f58284614cf5565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614eb757614eb7614e81565b60405290565b604080519081016001600160401b0381118282101715614eb757614eb7614e81565b604051601f8201601f191681016001600160401b0381118282101715614f0757614f07614e81565b604052919050565b5f6001600160401b03821115614f2757614f27614e81565b50601f01601f191660200190565b5f82601f830112614f44575f80fd5b8151614f57614f5282614f0f565b614edf565b818152846020838601011115614f6b575f80fd5b6124ab826020830160208701614d09565b5f60208284031215614f8c575f80fd5b81516001600160401b03811115614fa1575f80fd5b6124ab84828501614f35565b602081525f611b026020830184614d2b565b5f60208284031215614fcf575f80fd5b5051919050565b5f60208284031215614fe6575f80fd5b8135611b0281614b97565b5f808335601e19843603018112615006575f80fd5b8301803591506001600160401b0382111561501f575f80fd5b6020019150600581901b3603821315613779575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261505e575f80fd5b9190910192915050565b5f82601f830112615077575f80fd5b8135615085614f5282614f0f565b818152846020838601011115615099575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150c5575f80fd5b6150cd614e95565b82356001600160401b03808211156150e3575f80fd5b6150ef36838701615068565b83526020850135915080821115615104575f80fd5b5061511136828601615068565b602083015250604083013561512581614c12565b604082015292915050565b5f825161505e818460208701614d09565b601f82111561073057805f5260205f20601f840160051c810160208510156151665750805b601f840160051c820191505b81811015611107575f8155600101615172565b81516001600160401b0381111561519e5761519e614e81565b6151b2816151ac8454614e41565b84615141565b602080601f8311600181146151e5575f84156151ce5750858301515b5f19600386901b1c1916600185901b17855561132f565b5f85815260208120601f198616915b82811015615213578886015182559484019460019091019084016151f4565b508582101561523057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808201808211156110f5576110f5615240565b5f63ffffffff80831681810361527f5761527f615240565b6001019392505050565b80820281158282048414176110f5576110f5615240565b5f808335601e198436030181126152b5575f80fd5b83016020810192503590506001600160401b038111156152d3575f80fd5b803603821315613779575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156153be57848303601f19018952813536889003605e19018112615345575f80fd5b8701606061535382806152a0565b82875261536383880182846152e1565b92505050615373868301836152a0565b868303888801526153858382846152e1565b92505050604080830135925061539a83614c12565b6001600160401b039290921694909101939093529783019790830190600101615320565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356153ef81614b97565b6001600160a01b031660608381019190915283013536849003601e19018112615416575f80fd5b83016020810190356001600160401b03811115615431575f80fd5b8060051b3603821315615442575f80fd5b60808085015261545660a085018284615309565b95945050505050565b5f8261547957634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061549257615492614ce1565b91905290565b5f805f606084860312156154aa575f80fd5b8351925060208401516154bc81614c12565b6040850151909250614cd681614c12565b5f80604083850312156154de575f80fd5b825191506020830151614c6481614a9f565b5f60208083525f845461550281614e41565b806020870152604060018084165f8114615523576001811461553f5761556c565b60ff19851660408a0152604084151560051b8a0101955061556c565b895f5260205f205f5b858110156155635781548b8201860152908301908801615548565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156125c2576125c2615240565b6001600160401b038281168282160390808211156125c2576125c2615240565b5f80604083850312156155da575f80fd5b82516001600160401b03808211156155f0575f80fd5b9084019060608287031215615603575f80fd5b61560b614e95565b82518152602083015161561d81614b97565b6020820152604083015182811115615633575f80fd5b61563f88828601614f35565b6040830152508094505050506020830151614c6481614a9f565b5f806040838503121561566a575f80fd5b825191506020830151614c6481614c12565b6001600160401b0381811683821602808216919082811461569f5761569f615240565b505092915050565b5f602082840312156156b7575f80fd5b611b0282614c6f565b5f602082840312156156d0575f80fd5b813560ff81168114611b02575f80fd5b818103818111156110f5576110f5615240565b5f8235603e1983360301811261505e575f80fd5b5f808335601e1984360301811261571c575f80fd5b8301803591506001600160401b03821115615735575f80fd5b602001915036819003821315613779575f80fd5b602081525f6124ab6020830184866152e1565b5f6040823603121561576c575f80fd5b615774614ebd565b61577d83614aac565b81526020808401356001600160401b0380821115615799575f80fd5b9085019036601f8301126157ab575f80fd5b8135818111156157bd576157bd614e81565b8060051b91506157ce848301614edf565b81815291830184019184810190368411156157e7575f80fd5b938501935b83851015615811578435925061580183614b97565b82825293850193908501906157ec565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b8083101561587e5784516001600160a01b03168252938301936001929092019190830190615855565b509695505050505050565b60208152815160208201525f602083015160e060408401526158af610100840182614d2b565b90506040840151601f19808584030160608601526158cd8383614d2b565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526158fd8383615823565b925060a08601519150808584030160c08601525061591b8282615823565b91505060c084015161593860e08501826001600160401b03169052565b509392505050565b5f8060408385031215615951575f80fd5b8251915060208301516001600160401b0381111561596d575f80fd5b61597985828601614f35565b9150509250929050565b6001600160401b0383111561599a5761599a614e81565b6159ae836159a88354614e41565b83615141565b5f601f8411600181146159df575f85156159c85750838201355b5f19600387901b1c1916600186901b178355611107565b5f83815260208120601f198716915b82811015615a0e57868501358255602094850194600190920191016159ee565b5086821015615a2a575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b0380831681810361527f5761527f61524056fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220fea5d6dfa72371283856f773bad36bd16bbb6f41f9282f7dc10b4617900619ae64736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615c39380380615c3983398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615aec8061014d5f395ff3fe608060405260043610610233575f3560e01c80637d8d2f7711610129578063b771b3bc116100a8578063c974d1b61161006d578063c974d1b614610690578063d5f20ff6146106a4578063df93d8de146106d0578063fb8b11dd146106e6578063fd7ac5e714610705575f80fd5b8063b771b3bc14610605578063ba3a4b971461061f578063bc5fbfec1461063e578063bee0a03f1461065e578063c599e24f1461067d575f80fd5b80639ae06447116100ee5780639ae0644714610581578063a3a65e48146105a0578063a9778a7a14610387578063af2f5feb146105bf578063afb98096146105d2575f80fd5b80637d8d2f77146104f157806380dd672f146105105780638280a25a1461052f5780638ef34c981461054357806393e2459814610562575f80fd5b806337b9be8f116101b557806360ad77841161017a57806360ad778414610454578063620658561461047357806366435abf146104a0578063732214f8146104bf57806376f78621146104d2575f80fd5b806337b9be8f146103af5780633a1cfff6146103ce578063467ef06f146103ed5780635dd6a6cb1461040c57806360305d621461042b575f80fd5b806320d91b7a116101fb57806320d91b7a146102e057806325e1c776146102ff5780632e2194d81461031e578063329c3e121461035557806335455ded14610387575f80fd5b80630118acc4146102375780630322ed98146102585780630ba512d114610277578063151d30d1146102965780631ec44724146102c1575b5f80fd5b348015610242575f80fd5b50610256610251366004614abe565b610724565b005b348015610263575f80fd5b50610256610272366004614af9565b610735565b348015610282575f80fd5b50610256610291366004614b10565b6109c5565b3480156102a1575f80fd5b506102aa600a81565b60405160ff90911681526020015b60405180910390f35b3480156102cc575f80fd5b506102566102db366004614abe565b610aa2565b3480156102eb575f80fd5b506102566102fa366004614b27565b610aae565b34801561030a575f80fd5b50610256610319366004614b75565b611033565b348015610329575f80fd5b5061033d610338366004614af9565b6110a7565b6040516001600160401b0390911681526020016102b8565b348015610360575f80fd5b5061036f6001600160991b0181565b6040516001600160a01b0390911681526020016102b8565b348015610392575f80fd5b5061039c61271081565b60405161ffff90911681526020016102b8565b3480156103ba575f80fd5b506102566103c9366004614baa565b6110fb565b3480156103d9575f80fd5b506102566103e8366004614abe565b61110e565b3480156103f8575f80fd5b50610256610407366004614bf8565b61111a565b348015610417575f80fd5b50610256610426366004614baa565b6111ff565b348015610436575f80fd5b5061043f601481565b60405163ffffffff90911681526020016102b8565b34801561045f575f80fd5b5061025661046e366004614b75565b61120b565b34801561047e575f80fd5b5061049261048d366004614c25565b6114d8565b6040519081526020016102b8565b3480156104ab575f80fd5b5061033d6104ba366004614af9565b6114f8565b3480156104ca575f80fd5b506104925f81565b3480156104dd575f80fd5b506102566104ec366004614abe565b61150c565b3480156104fc575f80fd5b5061025661050b366004614baa565b611518565b34801561051b575f80fd5b5061025661052a366004614b75565b611524565b34801561053a575f80fd5b506102aa603081565b34801561054e575f80fd5b5061025661055d366004614c40565b61175e565b34801561056d575f80fd5b5061025661057c366004614af9565b61183f565b34801561058c575f80fd5b5061025661059b366004614baa565b6118d3565b3480156105ab575f80fd5b506102566105ba366004614bf8565b6118df565b6104926105cd366004614c7f565b611ad4565b3480156105dd575f80fd5b506104927f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610610575f80fd5b5061036f6005600160991b0181565b34801561062a575f80fd5b50610256610639366004614af9565b611b08565b348015610649575f80fd5b506104925f80516020615a5783398151915281565b348015610669575f80fd5b50610256610678366004614af9565b611d61565b61049261068b366004614af9565b611e9e565b34801561069b575f80fd5b506102aa601481565b3480156106af575f80fd5b506106c36106be366004614af9565b611ecf565b6040516102b89190614d55565b3480156106db575f80fd5b5061033d6202a30081565b3480156106f1575f80fd5b50610256610700366004614c40565b61201e565b348015610710575f80fd5b5061049261071f366004614dd5565b6120e5565b6107308383835f612140565b505050565b5f8181525f80516020615a978339815191526020526040808220815160e0810190925280545f80516020615a5783398151915293929190829060ff16600581111561078257610782614ce0565b600581111561079357610793614ce0565b81526020016001820180546107a790614e40565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390614e40565b801561081e5780601f106107f55761010080835404028352916020019161081e565b820191905f5260205f20905b81548152906001019060200180831161080157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561088957610889614ce0565b146108c5575f8381526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e72565b60405180910390fd5b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561093c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526109639190810190614f7b565b6040518263ffffffff1660e01b815260040161097f9190614fac565b6020604051808303815f875af115801561099b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109bf9190614fbe565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680610a0e575080546001600160401b03808416911610155b15610a2c5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155610a568361216c565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b6109bf8383835f61217d565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f80516020615a578339815191529060ff1615610b0057604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b679190614fbe565b836020013514610b90576040516372b0a7e760e11b8152602084013560048201526024016108bc565b30610ba16060850160408601614fd5565b6001600160a01b031614610be457610bbf6060840160408501614fd5565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016108bc565b5f610bf26060850185614ff0565b905090505f805b828163ffffffff161015610e59575f610c156060880188614ff0565b8363ffffffff16818110610c2b57610c2b615035565b9050602002810190610c3d9190615049565b610c46906150b4565b80516040519192505f916008880191610c5e9161512f565b90815260200160405180910390205414610c8e57805160405163a41f772f60e01b81526108bc9190600401614fac565b5f6002885f013584604051602001610cbd92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610cd79161512f565b602060405180830381855afa158015610cf2573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610d159190614fbe565b90508086600801835f0151604051610d2d919061512f565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610d6d9082615184565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610dec9085615253565b8251604051919550610dfd9161512f565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610e5290615266565b9050610bf9565b50600483018190556001830154606490610e7d90600160401b900460ff1683615288565b1015610e9f57604051635943317f60e01b8152600481018290526024016108bc565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ec3876124b2565b604001516040518263ffffffff1660e01b8152600401610ee39190614fac565b602060405180830381865af4158015610efe573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f229190614fbe565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610f5c91906153ca565b5f60405180830381865af4158015610f76573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f9d9190810190614f7b565b90505f600282604051610fb0919061512f565b602060405180830381855afa158015610fcb573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610fee9190614fbe565b905082811461101a5760405163baaea89d60e01b815260048101829052602481018490526044016108bc565b5050506009909201805460ff1916600117905550505050565b61103c826125c8565b61105c576040516330efa98b60e01b8152600481018390526024016108bc565b5f61106683611ecf565b519050600281600581111561107d5761107d614ce0565b1461109d578060405163170cc93360e21b81526004016108bc9190614e72565b6109bf83836125f1565b5f806110b1612890565b600301546110bf908461545e565b90508015806110d457506001600160401b0381115b156110f55760405163222d164360e21b8152600481018490526024016108bc565b92915050565b6111078484848461217d565b5050505050565b6109bf8383835f6128b4565b611122612ad6565b5f61112b612890565b90505f8061113884612b0d565b91509150611145826125c8565b611151575050506111e6565b5f828152600684016020908152604080832054600b8701909252909120546001600160a01b039182169116806111885750806111a6565b5f848152600b86016020526040902080546001600160a01b03191690555b6004835160058111156111bb576111bb614ce0565b036111ca576111ca8185612ec0565b6111e0826111db85604001516114d8565b612eea565b50505050505b6111fc60015f80516020615a7783398151915255565b50565b6109bf84848484612f10565b5f611214612890565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561124d5761124d614ce0565b600381111561125e5761125e614ce0565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6112d482611ecf565b90506001835160038111156112eb576112eb614ce0565b1461130c578251604051633b0d540d60e21b81526108bc919060040161547d565b60048151600581111561132157611321614ce0565b036113375761132f86612f3c565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61135c896124b2565b604001516040518263ffffffff1660e01b815260040161137c9190614fac565b606060405180830381865af4158015611397573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113bb9190615497565b50915091508184146113e857846040015160405163089938b360e11b81526004016108bc91815260200190565b806001600160401b031683606001516001600160401b031610806114215750806001600160401b03168560a001516001600160401b0316115b1561144a57604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5f888152600787016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6114e1612890565b600301546110f5906001600160401b038416615288565b5f61150282611ecf565b6080015192915050565b6107308383835f612f10565b611107848484846128b4565b61152c612ad6565b5f611535612890565b5f848152600782016020526040808220815160e0810190925280549394509192909190829060ff16600381111561156e5761156e614ce0565b600381111561157f5761157f614ce0565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156115f8576115f8614ce0565b14611619578051604051633b0d540d60e21b81526108bc919060040161547d565b60046116288260400151611ecf565b51600581111561163a5761163a614ce0565b14611739575f611649846124b2565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016116889190614fac565b606060405180830381865af41580156116a3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116c79190615497565b5091509150818460400151146116f35760405163089938b360e11b8152600481018390526024016108bc565b806001600160401b03168460c001516001600160401b0316111561173557604051632e19bc2d60e11b81526001600160401b03821660048201526024016108bc565b5050505b61174284612f3c565b505061175a60015f80516020615a7783398151915255565b5050565b5f611767612890565b90506001600160a01b03821661179b5760405163caa903f960e01b81526001600160a01b03831660048201526024016108bc565b5f8381526006820160205260409020546001600160a01b031633146117e157335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016108bc565b336001600160a01b03831603611810575f928352600b01602052506040902080546001600160a01b0319169055565b5f838152600b82016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b5f611848612890565b90505f61185483611ecf565b519050600481600581111561186b5761186b614ce0565b1461188b578060405163170cc93360e21b81526004016108bc9190614e72565b5f8381526006830160205260409020546001600160a01b031633146118b057336117bc565b5f838152600683016020526040902054610730906001600160a01b031684612ec0565b6109bf84848484612140565b5f80516020615a578339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f611912866124b2565b604001516040518263ffffffff1660e01b81526004016119329190614fac565b6040805180830381865af415801561194c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061197091906154cc565b915091508061199657604051632d07135360e01b815281151560048201526024016108bc565b5f828152600684016020526040902080546119b090614e40565b90505f036119d45760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078501602052604090205460ff1660058111156119fa576119fa614ce0565b14611a2d575f8281526007840160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e72565b5f8281526006840160205260408120611a4591614a12565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611add612ad6565b611ae984848434613149565b9050611b0160015f80516020615a7783398151915255565b9392505050565b5f611b11612890565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115611b4a57611b4a614ce0565b6003811115611b5b57611b5b614ce0565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611bd457611bd4614ce0565b14158015611bf55750600381516003811115611bf257611bf2614ce0565b14155b15611c16578051604051633b0d540d60e21b81526108bc919060040161547d565b5f611c248260400151611ecf565b905080606001516001600160401b03165f03611c56576040516339b894f960e21b8152600481018590526024016108bc565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611cc493906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611cde573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611d059190810190614f7b565b6040518263ffffffff1660e01b8152600401611d219190614fac565b6020604051808303815f875af1158015611d3d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111079190614fbe565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f80516020615a578339815191529190611da890614e40565b90505f03611dcc5760405163089938b360e11b8152600481018390526024016108bc565b60015f83815260078301602052604090205460ff166005811115611df257611df2614ce0565b14611e25575f8281526007820160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e72565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611e5e91906004016154ef565b6020604051808303815f875af1158015611e7a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107309190614fbe565b5f611ea7612ad6565b611eb28233346132a3565b9050611eca60015f80516020615a7783398151915255565b919050565b611ed7614a49565b5f8281525f80516020615a97833981519152602052604090819020815160e0810190925280545f80516020615a57833981519152929190829060ff166005811115611f2457611f24614ce0565b6005811115611f3557611f35614ce0565b8152602001600182018054611f4990614e40565b80601f0160208091040260200160405190810160405280929190818152602001828054611f7590614e40565b8015611fc05780601f10611f9757610100808354040283529160200191611fc0565b820191905f5260205f20905b815481529060010190602001808311611fa357829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6001600160a01b0381166120505760405163caa903f960e01b81526001600160a01b03821660048201526024016108bc565b5f612059612890565b5f8481526007820160205260409020549091506001600160a01b0361010090910416331461208757336117bc565b336001600160a01b038316036120b6575f928352600901602052506040902080546001600160a01b0319169055565b5f838152600982016020526040902080546001600160a01b0384166001600160a01b0319909116179055505050565b6040515f905f80516020615a57833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb08906121289086908690615579565b90815260200160405180910390205491505092915050565b61214c8484848461217d565b6109bf57604051631036cf9160e11b8152600481018590526024016108bc565b6121746134e3565b6111fc8161352e565b5f80612187612890565b5f878152600782016020526040808220815160e0810190925280549394509192909190829060ff1660038111156121c0576121c0614ce0565b60038111156121d1576121d1614ce0565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f61224782611ecf565b905060028351600381111561225e5761225e614ce0565b1461227f578251604051633b0d540d60e21b81526108bc919060040161547d565b60208301516001600160a01b0316331461231b575f8281526006850160205260409020546001600160a01b031633146122b857336117bc565b5f82815260068501602052604090205460a08201516122e791600160b01b90046001600160401b031690615588565b6001600160401b031642101561231b5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b60028151600581111561233057612330614ce0565b036124525760028401546080840151612352916001600160401b031690615588565b6001600160401b03164210156123865760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b87156123985761239682886125f1565b505b5f8981526007850160205260409020805460ff19166003179055606083015160808201516123d19184916123cc91906155a8565b6135a8565b505f8a8152600786016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561241484888c61377f565b9050828a7f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5760405160405180910390a3151594506124aa9350505050565b60048151600581111561246757612467614ce0565b0361248e5761247783878b61377f565b5061248189612f3c565b60019450505050506124aa565b805160405163170cc93360e21b81526108bc9190600401614e72565b949350505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612516573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261253d91908101906155c8565b915091508061255f57604051636b2f19e960e01b815260040160405180910390fd5b815115612585578151604051636ba589a560e01b815260048101919091526024016108bc565b60208201516001600160a01b0316156125c1576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5092915050565b5f806125d2612890565b5f938452600601602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa15801561263c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261266391908101906155c8565b915091508061268557604051636b2f19e960e01b815260040160405180910390fd5b5f61268e612890565b60058101548451919250146126bc578251604051636ba589a560e01b815260048101919091526024016108bc565b60208301516001600160a01b0316156126f8576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b60208301516001600160a01b031615612734576020830151604051624de75d60e31b81526001600160a01b0390911660048201526024016108bc565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246386604001516040518263ffffffff1660e01b81526004016127719190614fac565b6040805180830381865af415801561278b573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127af9190615658565b915091508188146127d65760405163089938b360e11b8152600481018990526024016108bc565b5f8881526006840160205260409020600101546001600160401b039081169082161115612867575f888152600684016020908152604091829020600101805467ffffffffffffffff19166001600160401b038516908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612885565b505f8781526006830160205260409020600101546001600160401b03165b979650505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806128be612890565b90505f6128ca87613964565b90506128d5876125c8565b6128e4576001925050506124aa565b5f8781526006830160205260409020546001600160a01b0316331461290957336117bc565b5f87815260068301602052604090205460a082015161293891600160b01b90046001600160401b031690615588565b6001600160401b03168160c001516001600160401b0316101561297f5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016108bc565b5f86156129975761299088876125f1565b90506129b5565b505f8781526006830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906129da906114d8565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612a43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a679190614fbe565b90508084600a015f8b81526020019081526020015f205f828254612a8b9190615253565b90915550506001600160a01b03861615612ac8575f898152600b85016020526040902080546001600160a01b0319166001600160a01b0388161790555b151598975050505050505050565b5f80516020615a77833981519152805460011901612b0757604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612b16614a49565b5f80516020615a578339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612b49886124b2565b604001516040518263ffffffff1660e01b8152600401612b699190614fac565b6040805180830381865af4158015612b83573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ba791906154cc565b915091508015612bce57604051632d07135360e01b815281151560048201526024016108bc565b5f828152600784016020526040808220815160e081019092528054829060ff166005811115612bff57612bff614ce0565b6005811115612c1057612c10614ce0565b8152602001600182018054612c2490614e40565b80601f0160208091040260200160405190810160405280929190818152602001828054612c5090614e40565b8015612c9b5780601f10612c7257610100808354040283529160200191612c9b565b820191905f5260205f20905b815481529060010190602001808311612c7e57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612d0657612d06614ce0565b14158015612d275750600181516005811115612d2457612d24614ce0565b14155b15612d4857805160405163170cc93360e21b81526108bc9190600401614e72565b600381516005811115612d5d57612d5d614ce0565b03612d6b5760048152612d70565b600581525b836008018160200151604051612d86919061512f565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612dca57612dca614ce0565b021790555060208201516001820190612de39082615184565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612e8957612e89614ce0565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612ec9612890565b5f838152600a82016020526040812080549190559091506109bf8482613c48565b61175a6001600160a01b03831682613ca6565b60015f80516020615a7783398151915255565b612f1c848484846128b4565b6109bf57604051635bff683f60e11b8152600481018590526024016108bc565b5f612f45612890565b5f838152600782016020526040808220815160e0810190925280549394509192909190829060ff166003811115612f7e57612f7e614ce0565b6003811115612f8f57612f8f614ce0565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015281015190915061302c7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b826080015161303b9190615588565b6001600160401b031642101561306f5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016108bc565b5f848152600784016020908152604080832080546001600160a81b031916815560018101849055600201839055600986019091529020546001600160a01b0316806130bf575060208201516130dd565b5f858152600985016020526040902080546001600160a01b03191690555b5f806130ea838886613d39565b9150915061310385602001516111db87606001516114d8565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80613153612890565b600281015490915061ffff600160401b9091048116908616108061317c575061271061ffff8616115b156131a057604051635f12e6c360e11b815261ffff861660048201526024016108bc565b60028101546001600160401b0390811690851610156131dc576040516202a06d60e11b81526001600160401b03851660048201526024016108bc565b80548310806131ee5750806001015483115b1561320f5760405163222d164360e21b8152600481018490526024016108bc565b825f61321a826110a7565b90505f6132278983613de6565b5f818152600695909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f806132ad612890565b90505f6132b9846110a7565b90505f6132c587611ecf565b90506132d0876125c8565b6132f0576040516330efa98b60e01b8152600481018890526024016108bc565b60028151600581111561330557613305614ce0565b1461332657805160405163170cc93360e21b81526108bc9190600401614e72565b5f8282608001516133379190615588565b905083600201600a9054906101000a90046001600160401b03168260400151613360919061567b565b6001600160401b0316816001600160401b0316111561339d57604051636d51fe0560e11b81526001600160401b03821660048201526024016108bc565b5f806133a98a846135a8565b915091505f8a836040516020016133d792919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260078b019093529120805491925060019160ff1916828002179055505f8181526007880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661352c57604051631afcd79f60e31b815260040160405180910390fd5b565b6135366134e3565b61353f8161430b565b613547614324565b6111fc6060820135608083013561356460c0850160a08601614c25565b61357460e0860160c087016156a6565b613585610100870160e088016156bf565b61010087013561359d61014089016101208a01614fd5565b886101400135614334565b5f8281525f80516020615a97833981519152602052604081206002015481905f80516020615a5783398151915290600160801b90046001600160401b03166135f08582614519565b5f6135fa8761473c565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156136a3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136ca9190810190614f7b565b6040518263ffffffff1660e01b81526004016136e69190614fac565b6020604051808303815f875af1158015613702573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906137269190614fbe565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f80613789612890565b90505f6137998660400151611ecf565b90505f6003825160058111156137b1576137b1614ce0565b14806137cf57506004825160058111156137cd576137cd614ce0565b145b156137df575060c081015161381c565b6002825160058111156137f4576137f4614ce0565b0361380057504261381c565b815160405163170cc93360e21b81526108bc9190600401614e72565b86608001516001600160401b0316816001600160401b031611613844575f9350505050611b01565b600483015460608801515f916001600160a01b031690634f22429f90613869906114d8565b60a086015160808c01516040808e01515f90815260068b0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818716606484015216608482015260a401602060405180830381865afa1580156138ea573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061390e9190614fbe565b5f878152600886016020526040902081905590506001600160a01b03871615612885575f868152600985016020526040902080546001600160a01b0319166001600160a01b038916179055979650505050505050565b61396c614a49565b5f8281525f80516020615a978339815191526020526040808220815160e0810190925280545f80516020615a5783398151915293929190829060ff1660058111156139b9576139b9614ce0565b60058111156139ca576139ca614ce0565b81526020016001820180546139de90614e40565b80601f0160208091040260200160405190810160405280929190818152602001828054613a0a90614e40565b8015613a555780601f10613a2c57610100808354040283529160200191613a55565b820191905f5260205f20905b815481529060010190602001808311613a3857829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a09091015290915081516005811115613ac357613ac3614ce0565b14613af6575f8481526007830160205260409081902054905163170cc93360e21b81526108bc9160ff1690600401614e72565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613b3a57613b3a614ce0565b021790555060208201516001820190613b539082615184565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613bf185826135a8565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613c94575f80fd5b505af115801561132f573d5f803e3d5ffd5b80471015613cc95760405163cd78605960e01b81523060048201526024016108bc565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f8114613d12576040519150601f19603f3d011682016040523d82523d5f602084013e613d17565b606091505b505090508061073057604051630a12f52160e11b815260040160405180910390fd5b5f805f613d44612890565b5f86815260088201602052604081208054908290559192509081908015613dd8575f87815260068501602052604090205461271090613d8e90600160a01b900461ffff1683615288565b613d98919061545e565b91508184600a015f8981526020019081526020015f205f828254613dbc9190615253565b90915550613dcc905082826156df565b9250613dd88984613c48565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613e2a57604051637fab81e560e01b815260040160405180910390fd5b5f80516020615a5783398151915242613e496060860160408701614c25565b6001600160401b0316111580613e835750613e676202a30042615253565b613e776060860160408701614c25565b6001600160401b031610155b15613ebd57613e986060850160408601614c25565b604051635879da1360e11b81526001600160401b0390911660048201526024016108bc565b613ed2613ecd60608601866156f2565b6147b1565b613ee2613ecd60808601866156f2565b6030613ef16020860186615706565b905014613f2357613f056020850185615706565b6040516326475b2f60e11b81526108bc925060040190815260200190565b613f2d8480615706565b90505f03613f5a57613f3f8480615706565b604051633e08a12560e11b81526004016108bc929190615748565b5f60088201613f698680615706565b604051613f77929190615579565b90815260200160405180910390205414613fb057613f958480615706565b60405163a41f772f60e01b81526004016108bc929190615748565b613fba835f614519565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613ff78a80615706565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060209081019061403f908b018b615706565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050509082525060200161408860608b0160408c01614c25565b6001600160401b031681526020016140a360608b018b6156f2565b6140ac9061575b565b81526020016140be60808b018b6156f2565b6140c79061575b565b8152602001886001600160401b03168152506040518263ffffffff1660e01b81526004016140f59190615888565b5f60405180830381865af415801561410f573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052614136919081019061593f565b5f828152600686016020526040902091935091506141548282615184565b5081600884016141648880615706565b604051614172929190615579565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb906141ae908590600401614fac565b6020604051808303815f875af11580156141ca573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906141ee9190614fbe565b5f8481526007860160205260409020805460ff1916600117905590506142148780615706565b5f858152600787016020526040902060010191614232919083615982565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff19169055806142918880615706565b60405161429f929190615579565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b60400160208101906142dd9190614c25565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b6143136134e3565b61431b61491a565b6111fc81614922565b61432c6134e3565b61352c614a0a565b61433c6134e3565b5f614345612890565b905061ffff8616158061435d575061271061ffff8716115b1561438157604051635f12e6c360e11b815261ffff871660048201526024016108bc565b878911156143a55760405163222d164360e21b8152600481018a90526024016108bc565b60ff851615806143b85750600a60ff8616115b156143db5760405163170db35960e31b815260ff861660048201526024016108bc565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316876001600160401b03161015614442576040516202a06d60e11b81526001600160401b03881660048201526024016108bc565b835f036144625760405163a733007160e01b815260040160405180910390fd5b8161448357604051632f6bd1db60e01b8152600481018390526024016108bc565b97885560018801969096556002870180546001600160401b039690961669ffffffffffffffffffff1990961695909517600160401b61ffff95909516949094029390931767ffffffffffffffff60501b191660ff92909216600160501b029190911790925560038401919091556004830180546001600160a01b0319166001600160a01b03909216919091179055600590910155565b5f80516020615a578339815191525f6001600160401b03808416908516111561454d5761454683856155a8565b905061455a565b61455784846155a8565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b03166060820152429115806145bc5750600184015481516145b8916001600160401b031690615253565b8210155b156145e2576001600160401b038316606082015281815260408101516020820152614601565b82816060018181516145f49190615588565b6001600160401b03169052505b606081015161461190606461567b565b602082015160018601546001600160401b03929092169161463c9190600160401b900460ff16615288565b101561466c57606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016108bc565b856001600160401b0316816040018181516146879190615253565b9052506040810180516001600160401b03871691906146a79083906156df565b905250600184015460408201516064916146cc91600160401b90910460ff1690615288565b10156146f3578060400151604051635943317f60e01b81526004016108bc91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f80516020615a978339815191526020526040812060020180545f80516020615a57833981519152919060089061478690600160401b90046001600160401b0316615a3b565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b6147be6020820182614bf8565b63ffffffff161580156147de57506147d96020820182614ff0565b151590505b15614825576147f06020820182614bf8565b6147fd6020830183614ff0565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016108bc565b6148326020820182614ff0565b90506148416020830183614bf8565b63ffffffff16111561485a576147f06020820182614bf8565b60015b61486a6020830183614ff0565b905081101561175a576148806020830183614ff0565b61488b6001846156df565b81811061489a5761489a615035565b90506020020160208101906148af9190614fd5565b6001600160a01b03166148c56020840184614ff0565b838181106148d5576148d5615035565b90506020020160208101906148ea9190614fd5565b6001600160a01b0316101561491257604051630dbc8d5f60e31b815260040160405180910390fd5b60010161485d565b61352c6134e3565b61492a6134e3565b80355f80516020615a57833981519152908155601461494f60608401604085016156bf565b60ff16118061496e575061496960608301604084016156bf565b60ff16155b156149a25761498360608301604084016156bf565b604051634a59bbff60e11b815260ff90911660048201526024016108bc565b6149b260608301604084016156bf565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556149e36040830160208401614c25565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612efd6134e3565b508054614a1e90614e40565b5f825580601f10614a2d575050565b601f0160209004905f5260205f20908101906111fc9190614a86565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b80821115614a9a575f8155600101614a87565b5090565b80151581146111fc575f80fd5b803563ffffffff81168114611eca575f80fd5b5f805f60608486031215614ad0575f80fd5b833592506020840135614ae281614a9e565b9150614af060408501614aab565b90509250925092565b5f60208284031215614b09575f80fd5b5035919050565b5f6101608284031215614b21575f80fd5b50919050565b5f8060408385031215614b38575f80fd5b82356001600160401b03811115614b4d575f80fd5b830160808186031215614b5e575f80fd5b9150614b6c60208401614aab565b90509250929050565b5f8060408385031215614b86575f80fd5b82359150614b6c60208401614aab565b6001600160a01b03811681146111fc575f80fd5b5f805f8060808587031215614bbd575f80fd5b843593506020850135614bcf81614a9e565b9250614bdd60408601614aab565b91506060850135614bed81614b96565b939692955090935050565b5f60208284031215614c08575f80fd5b611b0182614aab565b6001600160401b03811681146111fc575f80fd5b5f60208284031215614c35575f80fd5b8135611b0181614c11565b5f8060408385031215614c51575f80fd5b823591506020830135614c6381614b96565b809150509250929050565b803561ffff81168114611eca575f80fd5b5f805f60608486031215614c91575f80fd5b83356001600160401b03811115614ca6575f80fd5b840160a08187031215614cb7575f80fd5b9250614cc560208501614c6e565b91506040840135614cd581614c11565b809150509250925092565b634e487b7160e01b5f52602160045260245ffd5b60068110614d0457614d04614ce0565b9052565b5f5b83811015614d22578181015183820152602001614d0a565b50505f910152565b5f8151808452614d41816020860160208601614d08565b601f01601f19169290920160200192915050565b60208152614d67602082018351614cf4565b5f602083015160e06040840152614d82610100840182614d2a565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614de6575f80fd5b82356001600160401b0380821115614dfc575f80fd5b818501915085601f830112614e0f575f80fd5b813581811115614e1d575f80fd5b866020828501011115614e2e575f80fd5b60209290920196919550909350505050565b600181811c90821680614e5457607f821691505b602082108103614b2157634e487b7160e01b5f52602260045260245ffd5b602081016110f58284614cf4565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614eb657614eb6614e80565b60405290565b604080519081016001600160401b0381118282101715614eb657614eb6614e80565b604051601f8201601f191681016001600160401b0381118282101715614f0657614f06614e80565b604052919050565b5f6001600160401b03821115614f2657614f26614e80565b50601f01601f191660200190565b5f82601f830112614f43575f80fd5b8151614f56614f5182614f0e565b614ede565b818152846020838601011115614f6a575f80fd5b6124aa826020830160208701614d08565b5f60208284031215614f8b575f80fd5b81516001600160401b03811115614fa0575f80fd5b6124aa84828501614f34565b602081525f611b016020830184614d2a565b5f60208284031215614fce575f80fd5b5051919050565b5f60208284031215614fe5575f80fd5b8135611b0181614b96565b5f808335601e19843603018112615005575f80fd5b8301803591506001600160401b0382111561501e575f80fd5b6020019150600581901b3603821315613778575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e1983360301811261505d575f80fd5b9190910192915050565b5f82601f830112615076575f80fd5b8135615084614f5182614f0e565b818152846020838601011115615098575f80fd5b816020850160208301375f918101602001919091529392505050565b5f606082360312156150c4575f80fd5b6150cc614e94565b82356001600160401b03808211156150e2575f80fd5b6150ee36838701615067565b83526020850135915080821115615103575f80fd5b5061511036828601615067565b602083015250604083013561512481614c11565b604082015292915050565b5f825161505d818460208701614d08565b601f82111561073057805f5260205f20601f840160051c810160208510156151655750805b601f840160051c820191505b81811015611107575f8155600101615171565b81516001600160401b0381111561519d5761519d614e80565b6151b1816151ab8454614e40565b84615140565b602080601f8311600181146151e4575f84156151cd5750858301515b5f19600386901b1c1916600185901b17855561132f565b5f85815260208120601f198616915b82811015615212578886015182559484019460019091019084016151f3565b508582101561522f57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b808201808211156110f5576110f561523f565b5f63ffffffff80831681810361527e5761527e61523f565b6001019392505050565b80820281158282048414176110f5576110f561523f565b5f808335601e198436030181126152b4575f80fd5b83016020810192503590506001600160401b038111156152d2575f80fd5b803603821315613778575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b878110156153bd57848303601f19018952813536889003605e19018112615344575f80fd5b87016060615352828061529f565b82875261536283880182846152e0565b925050506153728683018361529f565b868303888801526153848382846152e0565b92505050604080830135925061539983614c11565b6001600160401b03929092169490910193909352978301979083019060010161531f565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356153ee81614b96565b6001600160a01b031660608381019190915283013536849003601e19018112615415575f80fd5b83016020810190356001600160401b03811115615430575f80fd5b8060051b3603821315615441575f80fd5b60808085015261545560a085018284615308565b95945050505050565b5f8261547857634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061549157615491614ce0565b91905290565b5f805f606084860312156154a9575f80fd5b8351925060208401516154bb81614c11565b6040850151909250614cd581614c11565b5f80604083850312156154dd575f80fd5b825191506020830151614c6381614a9e565b5f60208083525f845461550181614e40565b806020870152604060018084165f8114615522576001811461553e5761556b565b60ff19851660408a0152604084151560051b8a0101955061556b565b895f5260205f205f5b858110156155625781548b8201860152908301908801615547565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156125c1576125c161523f565b6001600160401b038281168282160390808211156125c1576125c161523f565b5f80604083850312156155d9575f80fd5b82516001600160401b03808211156155ef575f80fd5b9084019060608287031215615602575f80fd5b61560a614e94565b82518152602083015161561c81614b96565b6020820152604083015182811115615632575f80fd5b61563e88828601614f34565b6040830152508094505050506020830151614c6381614a9e565b5f8060408385031215615669575f80fd5b825191506020830151614c6381614c11565b6001600160401b0381811683821602808216919082811461569e5761569e61523f565b505092915050565b5f602082840312156156b6575f80fd5b611b0182614c6e565b5f602082840312156156cf575f80fd5b813560ff81168114611b01575f80fd5b818103818111156110f5576110f561523f565b5f8235603e1983360301811261505d575f80fd5b5f808335601e1984360301811261571b575f80fd5b8301803591506001600160401b03821115615734575f80fd5b602001915036819003821315613778575f80fd5b602081525f6124aa6020830184866152e0565b5f6040823603121561576b575f80fd5b615773614ebc565b61577c83614aab565b81526020808401356001600160401b0380821115615798575f80fd5b9085019036601f8301126157aa575f80fd5b8135818111156157bc576157bc614e80565b8060051b91506157cd848301614ede565b81815291830184019184810190368411156157e6575f80fd5b938501935b83851015615810578435925061580083614b96565b82825293850193908501906157eb565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b8083101561587d5784516001600160a01b03168252938301936001929092019190830190615854565b509695505050505050565b60208152815160208201525f602083015160e060408401526158ae610100840182614d2a565b90506040840151601f19808584030160608601526158cc8383614d2a565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526158fc8383615822565b925060a08601519150808584030160c08601525061591a8282615822565b91505060c084015161593760e08501826001600160401b03169052565b509392505050565b5f8060408385031215615950575f80fd5b8251915060208301516001600160401b0381111561596c575f80fd5b61597885828601614f34565b9150509250929050565b6001600160401b0383111561599957615999614e80565b6159ad836159a78354614e40565b83615140565b5f601f8411600181146159de575f85156159c75750838201355b5f19600387901b1c1916600186901b178355611107565b5f83815260208120601f198716915b82811015615a0d57868501358255602094850194600190920191016159ed565b5086821015615a29575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f6001600160401b0380831681810361527e5761527e61523f56fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220aea3e80a8c2ef0ad57a183e9049d8a5cf4e875ec07802435f4599519687fcb1e64736f6c63430008190033", } // NativeTokenStakingManagerABI is the input ABI used to generate the binding from. diff --git a/contracts/validator-manager/PoSValidatorManager.sol b/contracts/validator-manager/PoSValidatorManager.sol index e8d3cc059..1388ffc86 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -279,12 +279,12 @@ abstract contract PoSValidatorManager is bytes32 validationID, address rewardRecipient ) external { + PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); + if (rewardRecipient == address(0)) { revert InvalidRewardRecipient(rewardRecipient); } - PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); - if ($._posValidatorInfo[validationID].owner != _msgSender()) { revert UnauthorizedOwner(_msgSender()); }