diff --git a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go index 5d4c0753d..eec9d4f68 100644 --- a/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go +++ b/abi-bindings/go/validator-manager/ERC20TokenStakingManager/ERC20TokenStakingManager.go @@ -103,7 +103,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\":\"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\":\"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\":\"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: "0x608060405234801561000f575f80fd5b50604051615b6c380380615b6c83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b615a1f8061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106101fd575f3560e01c806380dd672f11610114578063ba3a4b97116100a9578063d5f20ff611610079578063d5f20ff61461044f578063df93d8de1461046f578063e4a63c4014610479578063f74c607b1461048d578063fd7ac5e7146104a0575f80fd5b8063ba3a4b971461040d578063bc5fbfec14610420578063bee0a03f14610434578063c974d1b614610447575f80fd5b8063a3a65e48116100e4578063a3a65e48146103c0578063a9778a7a146102ac578063afb98096146103d3578063b771b3bc146103e7575f80fd5b806380dd672f1461037f5780638280a25a1461039257806393e245981461039a5780639e1bc4ef146103ad575f80fd5b80633a1cfff61161019557806360ad77841161016557806360ad77841461032c578063620658561461033f57806366435abf14610352578063732214f81461036557806376f786211461036c575f80fd5b80633a1cfff6146102c8578063467ef06f146102db5780634bee0040146102ee57806360305d621461030f575f80fd5b806320d91b7a116101d057806320d91b7a1461025b57806325e1c7761461026e5780632e2194d81461028157806335455ded146102ac575f80fd5b80630118acc4146102015780630322ed9814610216578063151d30d1146102295780631ec4472414610248575b5f80fd5b61021461020f3660046149a8565b6104b3565b005b6102146102243660046149e3565b6104e8565b610231600a81565b60405160ff90911681526020015b60405180910390f35b6102146102563660046149a8565b61076f565b6102146102693660046149fa565b61077a565b61021461027c366004614a48565b610cff565b61029461028f3660046149e3565b610d73565b6040516001600160401b03909116815260200161023f565b6102b561271081565b60405161ffff909116815260200161023f565b6102146102d63660046149a8565b610dcd565b6102146102e9366004614a69565b610dd8565b6103016102fc366004614aa7565b610e99565b60405190815260200161023f565b610317601481565b60405163ffffffff909116815260200161023f565b61021461033a366004614a48565b610ece565b61030161034d366004614b0e565b6111a6565b6102946103603660046149e3565b6111dd565b6103015f81565b61021461037a3660046149a8565b6111f1565b61021461038d366004614a48565b61121c565b610231603081565b6102146103a83660046149e3565b611461565b6103016103bb366004614b29565b61152c565b6102146103ce366004614a69565b611558565b6103015f8051602061594a83398151915281565b6103f56005600160991b0181565b6040516001600160a01b03909116815260200161023f565b61021461041b3660046149e3565b61174d565b6103015f8051602061596a83398151915281565b6102146104423660046149e3565b6119b8565b610231601481565b61046261045d3660046149e3565b611af5565b60405161023f9190614bbe565b6102946202a30081565b6103015f8051602061592a83398151915281565b61021461049b366004614c52565b611c44565b6103016104ae366004614c90565b611d23565b6104be838383611d7e565b6104e357604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f805160206159ca8339815191526020526040808220815160e0810190925280545f8051602061596a83398151915293929190829060ff16600581111561053557610535614b49565b600581111561054657610546614b49565b815260200160018201805461055a90614cfb565b80601f016020809104026020016040519081016040528092919081815260200182805461058690614cfb565b80156105d15780601f106105a8576101008083540402835291602001916105d1565b820191905f5260205f20905b8154815290600101906020018083116105b457829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561063c5761063c614b49565b1461066f575f8381526007830160205260409081902054905163170cc93360e21b81526104da9160ff1690600401614d33565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156106e6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261070d9190810190614e3c565b6040518263ffffffff1660e01b81526004016107299190614e6d565b6020604051808303815f875af1158015610745573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107699190614e7f565b50505050565b610769838383611d7e565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061596a8339815191529060ff16156107cc57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561080f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108339190614e7f565b83602001351461085c576040516372b0a7e760e11b8152602084013560048201526024016104da565b3061086d6060850160408601614e96565b6001600160a01b0316146108b05761088b6060840160408501614e96565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016104da565b5f6108be6060850185614eb1565b905090505f805b828163ffffffff161015610b25575f6108e16060880188614eb1565b8363ffffffff168181106108f7576108f7614ef6565b90506020028101906109099190614f0a565b61091290614f75565b80516040519192505f91600888019161092a91614ff0565b9081526020016040518091039020541461095a57805160405163a41f772f60e01b81526104da9190600401614e6d565b5f6002885f01358460405160200161098992919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526109a391614ff0565b602060405180830381855afa1580156109be573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906109e19190614e7f565b90508086600801835f01516040516109f99190614ff0565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610a399082615045565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610ab89085615114565b8251604051919550610ac991614ff0565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610b1e90615127565b90506108c5565b50600483018190556001830154606490610b4990600160401b900460ff1683615149565b1015610b6b57604051635943317f60e01b8152600481018290526024016104da565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610b8f876120d6565b604001516040518263ffffffff1660e01b8152600401610baf9190614e6d565b602060405180830381865af4158015610bca573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bee9190614e7f565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610c28919061528b565b5f60405180830381865af4158015610c42573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c699190810190614e3c565b90505f600282604051610c7c9190614ff0565b602060405180830381855afa158015610c97573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610cba9190614e7f565b9050828114610ce65760405163baaea89d60e01b815260048101829052602481018490526044016104da565b5050506009909201805460ff1916600117905550505050565b610d08826121ec565b610d28576040516330efa98b60e01b8152600481018390526024016104da565b5f610d3283611af5565b5190506002816005811115610d4957610d49614b49565b14610d69578060405163170cc93360e21b81526004016104da9190614d33565b6107698383612227565b5f805f8051602061594a83398151915260030154610d919084615316565b9050801580610da657506001600160401b0381115b15610dc75760405163222d164360e21b8152600481018490526024016104da565b92915050565b61076983838361250d565b610de06126f9565b5f8051602061594a8339815191525f80610df984612730565b91509150610e06826121ec565b610e1257505050610e80565b5f8281526005840160205260409020546001600160a01b0316600482516005811115610e4057610e40614b49565b03610e65575f83815260088501602052604081208054919055610e638282612ae3565b505b610e7b81610e7684604001516111a6565b612b59565b505050505b610e9660015f805160206159aa83398151915255565b50565b5f610ea26126f9565b610eae85858585612b8f565b9050610ec660015f805160206159aa83398151915255565b949350505050565b5f8281525f8051602061598a8339815191526020526040808220815160e0810190925280545f8051602061594a83398151915293929190829060ff166003811115610f1b57610f1b614b49565b6003811115610f2c57610f2c614b49565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f610fa282611af5565b9050600183516003811115610fb957610fb9614b49565b14610fda578251604051633b0d540d60e21b81526104da9190600401615335565b600481516005811115610fef57610fef614b49565b0361100557610ffd86612d15565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61102a896120d6565b604001516040518263ffffffff1660e01b815260040161104a9190614e6d565b606060405180830381865af4158015611065573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611089919061534f565b50915091508184146110b657846040015160405163089938b360e11b81526004016104da91815260200190565b806001600160401b031683606001516001600160401b031610806110ef5750806001600160401b03168560a001516001600160401b0316115b1561111857604051632e19bc2d60e11b81526001600160401b03821660048201526024016104da565b5f888152600687016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d03545f90610dc7906001600160401b038416615149565b5f6111e782611af5565b6080015192915050565b6111fc83838361250d565b6104e357604051635bff683f60e11b8152600481018490526024016104da565b6112246126f9565b5f8281525f8051602061598a8339815191526020526040808220815160e0810190925280545f8051602061594a83398151915293929190829060ff16600381111561127157611271614b49565b600381111561128257611282614b49565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112fb576112fb614b49565b1461131c578051604051633b0d540d60e21b81526104da9190600401615335565b600461132b8260400151611af5565b51600581111561133d5761133d614b49565b1461143c575f61134c846120d6565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161138b9190614e6d565b606060405180830381865af41580156113a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113ca919061534f565b5091509150818460400151146113f65760405163089938b360e11b8152600481018390526024016104da565b806001600160401b03168460c001516001600160401b0316111561143857604051632e19bc2d60e11b81526001600160401b03821660048201526024016104da565b5050505b61144584612d15565b505061145d60015f805160206159aa83398151915255565b5050565b5f8051602061594a8339815191525f61147983611af5565b519050600481600581111561149057611490614b49565b146114b0578060405163170cc93360e21b81526004016104da9190614d33565b5f8381526005830160205260409020546001600160a01b031633146114f657335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016104da565b5f83815260088301602090815260408083208054908490556005860190925290912054610769906001600160a01b031682612ae3565b5f6115356126f9565b611540833384612f69565b9050610dc760015f805160206159aa83398151915255565b5f8051602061596a8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61158b866120d6565b604001516040518263ffffffff1660e01b81526004016115ab9190614e6d565b6040805180830381865af41580156115c5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115e9919061538f565b915091508061160f57604051632d07135360e01b815281151560048201526024016104da565b5f8281526006840160205260409020805461162990614cfb565b90505f0361164d5760405163089938b360e11b8152600481018390526024016104da565b60015f83815260078501602052604090205460ff16600581111561167357611673614b49565b146116a6575f8281526007840160205260409081902054905163170cc93360e21b81526104da9160ff1690600401614d33565b5f82815260068401602052604081206116be916148f7565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f8181525f8051602061598a8339815191526020526040808220815160e0810190925280545f8051602061594a83398151915293929190829060ff16600381111561179a5761179a614b49565b60038111156117ab576117ab614b49565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529091508151600381111561182457611824614b49565b14158015611845575060038151600381111561184257611842614b49565b14155b15611866578051604051633b0d540d60e21b81526104da9190600401615335565b5f6118748260400151611af5565b905080606001516001600160401b03165f036118a6576040516339b894f960e21b8152600481018590526024016104da565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f9361191493906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af415801561192e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119559190810190614e3c565b6040518263ffffffff1660e01b81526004016119719190614e6d565b6020604051808303815f875af115801561198d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119b19190614e7f565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061596a83398151915291906119ff90614cfb565b90505f03611a235760405163089938b360e11b8152600481018390526024016104da565b60015f83815260078301602052604090205460ff166005811115611a4957611a49614b49565b14611a7c575f8281526007820160205260409081902054905163170cc93360e21b81526104da9160ff1690600401614d33565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611ab591906004016153b2565b6020604051808303815f875af1158015611ad1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104e39190614e7f565b611afd61492e565b5f8281525f805160206159ca833981519152602052604090819020815160e0810190925280545f8051602061596a833981519152929190829060ff166005811115611b4a57611b4a614b49565b6005811115611b5b57611b5b614b49565b8152602001600182018054611b6f90614cfb565b80601f0160208091040260200160405190810160405280929190818152602001828054611b9b90614cfb565b8015611be65780601f10611bbd57610100808354040283529160200191611be6565b820191905f5260205f20905b815481529060010190602001808311611bc957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611c8d575080546001600160401b03808416911610155b15611cab5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611cd684846131af565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b6040515f905f8051602061596a833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611d66908690869061543c565b90815260200160405180910390205491505092915050565b5f8381525f8051602061598a8339815191526020526040808220815160e0810190925280545f8051602061594a8339815191529284929091829060ff166003811115611dcc57611dcc614b49565b6003811115611ddd57611ddd614b49565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611e5382611af5565b9050600283516003811115611e6a57611e6a614b49565b14611e8b578251604051633b0d540d60e21b81526104da9190600401615335565b60208301516001600160a01b03163314611f27575f8281526005850160205260409020546001600160a01b03163314611ec457336114d1565b5f82815260058501602052604090205460a0820151611ef391600160b01b90046001600160401b03169061544b565b6001600160401b0316421015611f275760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104da565b600281516005811115611f3c57611f3c614b49565b0361206a5760028401546080840151611f5e916001600160401b03169061544b565b6001600160401b0316421015611f925760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104da565b8615611fa457611fa28287612227565b505b5f8881526006850160205260409020805460ff1916600317905560608301516080820151611fdd918491611fd8919061546b565b6131c9565b505f898152600686016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561201e846133a0565b5f8a81526007870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a3151594506120cf9350505050565b60048151600581111561207f5761207f614b49565b036120b35761208d836133a0565b5f8981526007860160205260409020556120a688612d15565b60019450505050506120cf565b805160405163170cc93360e21b81526104da9190600401614d33565b9392505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa15801561213a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612161919081019061548b565b915091508061218357604051636b2f19e960e01b815260040160405180910390fd5b8151156121a9578151604051636ba589a560e01b815260048101919091526024016104da565b60208201516001600160a01b0316156121e5576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104da565b5092915050565b5f9081527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0560205260409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612272573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612299919081019061548b565b91509150806122bb57604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122fe573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123229190614e7f565b825114612348578151604051636ba589a560e01b815260048101919091526024016104da565b60208201516001600160a01b031615612384576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104da565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246385604001516040518263ffffffff1660e01b81526004016123c19190614e6d565b6040805180830381865af41580156123db573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123ff919061551b565b915091508187146124265760405163089938b360e11b8152600481018890526024016104da565b5f8781527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0560205260409020600101545f8051602061594a833981519152906001600160401b0390811690831611156124e3575f888152600582016020908152604091829020600101805467ffffffffffffffff19166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a2612502565b5f8881526005820160205260409020600101546001600160401b031691505b509695505050505050565b5f5f8051602061594a833981519152816125268661353d565b9050612531866121ec565b612540576001925050506120cf565b5f8681526005830160205260409020546001600160a01b0316331461256557336114d1565b5f86815260058301602052604090205460a082015161259491600160b01b90046001600160401b03169061544b565b6001600160401b03168160c001516001600160401b031610156125db5760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016104da565b5f85156125f3576125ec8786612227565b9050612611565b505f8681526005830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612636906111a6565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa15801561269f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126c39190614e7f565b905080846008015f8a81526020019081526020015f205f8282546126e79190615114565b90915550501515979650505050505050565b5f805160206159aa83398151915280546001190161272a57604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f61273961492e565b5f8051602061596a8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61276c886120d6565b604001516040518263ffffffff1660e01b815260040161278c9190614e6d565b6040805180830381865af41580156127a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127ca919061538f565b9150915080156127f157604051632d07135360e01b815281151560048201526024016104da565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561282257612822614b49565b600581111561283357612833614b49565b815260200160018201805461284790614cfb565b80601f016020809104026020016040519081016040528092919081815260200182805461287390614cfb565b80156128be5780601f10612895576101008083540402835291602001916128be565b820191905f5260205f20905b8154815290600101906020018083116128a157829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561292957612929614b49565b1415801561294a575060018151600581111561294757612947614b49565b14155b1561296b57805160405163170cc93360e21b81526104da9190600401614d33565b60038151600581111561298057612980614b49565b0361298e5760048152612993565b600581525b8360080181602001516040516129a99190614ff0565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff191660018360058111156129ed576129ed614b49565b021790555060208201516001820190612a069082615045565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612aac57612aac614b49565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f5f8051602061592a83398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b158015612b3e575f80fd5b505af1158015612b50573d5f803e3d5ffd5b50505050505050565b5f8051602061592a8339815191525461145d906001600160a01b03168383613821565b60015f805160206159aa83398151915255565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f8051602061594a83398151915290600160401b900461ffff9081169086161080612be3575061271061ffff8616115b15612c0757604051635f12e6c360e11b815261ffff861660048201526024016104da565b60028101546001600160401b039081169085161015612c43576040516202a06d60e11b81526001600160401b03851660048201526024016104da565b8054831080612c555750806001015483115b15612c765760405163222d164360e21b8152600481018490526024016104da565b5f612c8084613880565b90505f612c8c82610d73565b90505f612c9989836138a3565b5f818152600595909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f8181525f8051602061598a8339815191526020526040808220815160e0810190925280545f8051602061594a83398151915293929190829060ff166003811115612d6257612d62614b49565b6003811115612d7357612d73614b49565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612e107fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612e1f919061544b565b6001600160401b0316421015612e535760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104da565b5f848152600684016020908152604080832080546001600160a81b03191681556001810184905560020183905560078601909152812080549082905590808215612f0e575f84815260058701602052604090205461271090612ec090600160a01b900461ffff1685615149565b612eca9190615316565b915081866008015f8681526020019081526020015f205f828254612eee9190615114565b90915550612efe9050828461553e565b9050612f0e856020015182612ae3565b612f238560200151610e7687606001516111a6565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f5f8051602061594a83398151915281612f8561028f85613880565b90505f612f9187611af5565b9050612f9c876121ec565b612fbc576040516330efa98b60e01b8152600481018890526024016104da565b600281516005811115612fd157612fd1614b49565b14612ff257805160405163170cc93360e21b81526104da9190600401614d33565b5f828260800151613003919061544b565b905083600201600a9054906101000a90046001600160401b0316826040015161302c9190615551565b6001600160401b0316816001600160401b0316111561306957604051636d51fe0560e11b81526001600160401b03821660048201526024016104da565b5f806130758a846131c9565b915091505f8a836040516020016130a392919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260068b019093529120805491925060019160ff1916828002179055505f8181526006880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b6131b7613dc8565b6131c082613e13565b61145d81613e87565b5f8281525f805160206159ca833981519152602052604081206002015481905f8051602061596a83398151915290600160801b90046001600160401b03166132118582613eef565b5f61321b87614112565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156132c4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526132eb9190810190614e3c565b6040518263ffffffff1660e01b81526004016133079190614e6d565b6020604051808303815f875af1158015613323573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133479190614e7f565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f805f8051602061594a83398151915290505f6133c08460400151611af5565b90505f6003825160058111156133d8576133d8614b49565b14806133f657506004825160058111156133f4576133f4614b49565b145b15613406575060c0810151613443565b60028251600581111561341b5761341b614b49565b03613427575042613443565b815160405163170cc93360e21b81526104da9190600401614d33565b84608001516001600160401b0316816001600160401b03161161346a57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f9061348f906111a6565b60a085015160808901516040808b01515f90815260058a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa158015613510573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135349190614e7f565b95945050505050565b61354561492e565b5f8281525f805160206159ca8339815191526020526040808220815160e0810190925280545f8051602061596a83398151915293929190829060ff16600581111561359257613592614b49565b60058111156135a3576135a3614b49565b81526020016001820180546135b790614cfb565b80601f01602080910402602001604051908101604052809291908181526020018280546135e390614cfb565b801561362e5780601f106136055761010080835404028352916020019161362e565b820191905f5260205f20905b81548152906001019060200180831161361157829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561369c5761369c614b49565b146136cf575f8481526007830160205260409081902054905163170cc93360e21b81526104da9160ff1690600401614d33565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff1916600183600581111561371357613713614b49565b02179055506020820151600182019061372c9082615045565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6137ca85826131c9565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516001600160a01b038381166024830152604482018390526104e391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614187565b5f610dc7825f8051602061592a833981519152546001600160a01b0316906141e8565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff166138e757604051637fab81e560e01b815260040160405180910390fd5b5f8051602061596a833981519152426139066060860160408701614b0e565b6001600160401b031611158061394057506139246202a30042615114565b6139346060860160408701614b0e565b6001600160401b031610155b1561397a576139556060850160408601614b0e565b604051635879da1360e11b81526001600160401b0390911660048201526024016104da565b61398f61398a606086018661557c565b6141f4565b61399f61398a608086018661557c565b60306139ae6020860186615590565b9050146139e0576139c26020850185615590565b6040516326475b2f60e11b81526104da925060040190815260200190565b6139ea8480615590565b90505f03613a17576139fc8480615590565b604051633e08a12560e11b81526004016104da9291906155d2565b5f60088201613a268680615590565b604051613a3492919061543c565b90815260200160405180910390205414613a6d57613a528480615590565b60405163a41f772f60e01b81526004016104da9291906155d2565b613a77835f613eef565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613ab48a80615590565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613afc908b018b615590565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613b4560608b0160408c01614b0e565b6001600160401b03168152602001613b6060608b018b61557c565b613b69906155e5565b8152602001613b7b60808b018b61557c565b613b84906155e5565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613bb29190615707565b5f60405180830381865af4158015613bcc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613bf391908101906157be565b5f82815260068601602052604090209193509150613c118282615045565b508160088401613c218880615590565b604051613c2f92919061543c565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613c6b908590600401614e6d565b6020604051808303815f875af1158015613c87573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613cab9190614e7f565b5f8481526007860160205260409020805460ff191660011790559050613cd18780615590565b5f858152600787016020526040902060010191613cef919083615801565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613d4e8880615590565b604051613d5c92919061543c565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613d9a9190614b0e565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613e1157604051631afcd79f60e31b815260040160405180910390fd5b565b613e1b613dc8565b613e248161435d565b613e2c614376565b610e9660608201356080830135613e4960c0850160a08601614b0e565b613e5960e0860160c087016158ba565b613e6a610100870160e088016158d3565b610100870135613e8261014089016101208a01614e96565b614386565b613e8f613dc8565b5f8051602061592a8339815191526001600160a01b038216613ecf57604051637330680360e01b81526001600160a01b03831660048201526024016104da565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f8051602061596a8339815191525f6001600160401b038084169085161115613f2357613f1c838561546b565b9050613f30565b613f2d848461546b565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580613f92575060018401548151613f8e916001600160401b031690615114565b8210155b15613fb8576001600160401b038316606082015281815260408101516020820152613fd7565b8281606001818151613fca919061544b565b6001600160401b03169052505b6060810151613fe7906064615551565b602082015160018601546001600160401b0392909216916140129190600160401b900460ff16615149565b101561404257606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016104da565b856001600160401b03168160400181815161405d9190615114565b9052506040810180516001600160401b038716919061407d90839061553e565b905250600184015460408201516064916140a291600160401b90910460ff1690615149565b10156140c9578060400151604051635943317f60e01b81526004016104da91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f805160206159ca8339815191526020526040812060020180545f8051602061596a833981519152919060089061415c90600160401b90046001600160401b03166158f3565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61419b6001600160a01b03841683614542565b905080515f141580156141bf5750808060200190518101906141bd919061590e565b155b156104e357604051635274afe760e01b81526001600160a01b03841660048201526024016104da565b5f6120cf83338461454f565b6142016020820182614a69565b63ffffffff16158015614221575061421c6020820182614eb1565b151590505b15614268576142336020820182614a69565b6142406020830183614eb1565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016104da565b6142756020820182614eb1565b90506142846020830183614a69565b63ffffffff16111561429d576142336020820182614a69565b60015b6142ad6020830183614eb1565b905081101561145d576142c36020830183614eb1565b6142ce60018461553e565b8181106142dd576142dd614ef6565b90506020020160208101906142f29190614e96565b6001600160a01b03166143086020840184614eb1565b8381811061431857614318614ef6565b905060200201602081019061432d9190614e96565b6001600160a01b0316101561435557604051630dbc8d5f60e31b815260040160405180910390fd5b6001016142a0565b614365613dc8565b61436d6146b2565b610e96816146ba565b61437e613dc8565b613e116147a2565b61438e613dc8565b5f8051602061594a83398151915261ffff851615806143b2575061271061ffff8616115b156143d657604051635f12e6c360e11b815261ffff861660048201526024016104da565b868811156143fa5760405163222d164360e21b8152600481018990526024016104da565b60ff8416158061440d5750600a60ff8516115b156144305760405163170db35960e31b815260ff851660048201526024016104da565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316866001600160401b03161015614497576040516202a06d60e11b81526001600160401b03871660048201526024016104da565b825f036144b75760405163a733007160e01b815260040160405180910390fd5b96875560018701959095556002860180546001600160401b039590951669ffffffffffffffffffff1990951694909417600160401b61ffff94909416939093029290921767ffffffffffffffff60501b191660ff91909116600160501b02179091556003830155600490910180546001600160a01b0319166001600160a01b03909216919091179055565b60606120cf83835f6147aa565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614595573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145b99190614e7f565b90506145d06001600160a01b038616853086614839565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa158015614614573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906146389190614e7f565b905081811161469e5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104da565b6146a8828261553e565b9695505050505050565b613e11613dc8565b6146c2613dc8565b80355f8051602061596a83398151915290815560146146e760608401604085016158d3565b60ff161180614706575061470160608301604084016158d3565b60ff16155b1561473a5761471b60608301604084016158d3565b604051634a59bbff60e11b815260ff90911660048201526024016104da565b61474a60608301604084016158d3565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561477b6040830160208401614b0e565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612b7c613dc8565b6060814710156147cf5760405163cd78605960e01b81523060048201526024016104da565b5f80856001600160a01b031684866040516147ea9190614ff0565b5f6040518083038185875af1925050503d805f8114614824576040519150601f19603f3d011682016040523d82523d5f602084013e614829565b606091505b50915091506146a8868383614872565b6040516001600160a01b0384811660248301528381166044830152606482018390526107699186918216906323b872dd9060840161384e565b60608261488757614882826148ce565b6120cf565b815115801561489e57506001600160a01b0384163b155b156148c757604051639996b31560e01b81526001600160a01b03851660048201526024016104da565b50806120cf565b8051156148de5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b50805461490390614cfb565b5f825580601f10614912575050565b601f0160209004905f5260205f2090810190610e96919061496b565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b8082111561497f575f815560010161496c565b5090565b8015158114610e96575f80fd5b803563ffffffff811681146149a3575f80fd5b919050565b5f805f606084860312156149ba575f80fd5b8335925060208401356149cc81614983565b91506149da60408501614990565b90509250925092565b5f602082840312156149f3575f80fd5b5035919050565b5f8060408385031215614a0b575f80fd5b82356001600160401b03811115614a20575f80fd5b830160808186031215614a31575f80fd5b9150614a3f60208401614990565b90509250929050565b5f8060408385031215614a59575f80fd5b82359150614a3f60208401614990565b5f60208284031215614a79575f80fd5b6120cf82614990565b803561ffff811681146149a3575f80fd5b6001600160401b0381168114610e96575f80fd5b5f805f8060808587031215614aba575f80fd5b84356001600160401b03811115614acf575f80fd5b850160a08188031215614ae0575f80fd5b9350614aee60208601614a82565b92506040850135614afe81614a93565b9396929550929360600135925050565b5f60208284031215614b1e575f80fd5b81356120cf81614a93565b5f8060408385031215614b3a575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b60068110614b6d57614b6d614b49565b9052565b5f5b83811015614b8b578181015183820152602001614b73565b50505f910152565b5f8151808452614baa816020860160208601614b71565b601f01601f19169290920160200192915050565b60208152614bd0602082018351614b5d565b5f602083015160e06040840152614beb610100840182614b93565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b6001600160a01b0381168114610e96575f80fd5b5f80828403610160811215614c65575f80fd5b61014080821215614c74575f80fd5b8493508301359050614c8581614c3e565b809150509250929050565b5f8060208385031215614ca1575f80fd5b82356001600160401b0380821115614cb7575f80fd5b818501915085601f830112614cca575f80fd5b813581811115614cd8575f80fd5b866020828501011115614ce9575f80fd5b60209290920196919550909350505050565b600181811c90821680614d0f57607f821691505b602082108103614d2d57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610dc78284614b5d565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614d7757614d77614d41565b60405290565b604080519081016001600160401b0381118282101715614d7757614d77614d41565b604051601f8201601f191681016001600160401b0381118282101715614dc757614dc7614d41565b604052919050565b5f6001600160401b03821115614de757614de7614d41565b50601f01601f191660200190565b5f82601f830112614e04575f80fd5b8151614e17614e1282614dcf565b614d9f565b818152846020838601011115614e2b575f80fd5b610ec6826020830160208701614b71565b5f60208284031215614e4c575f80fd5b81516001600160401b03811115614e61575f80fd5b610ec684828501614df5565b602081525f6120cf6020830184614b93565b5f60208284031215614e8f575f80fd5b5051919050565b5f60208284031215614ea6575f80fd5b81356120cf81614c3e565b5f808335601e19843603018112614ec6575f80fd5b8301803591506001600160401b03821115614edf575f80fd5b6020019150600581901b3603821315613399575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614f1e575f80fd5b9190910192915050565b5f82601f830112614f37575f80fd5b8135614f45614e1282614dcf565b818152846020838601011115614f59575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614f85575f80fd5b614f8d614d55565b82356001600160401b0380821115614fa3575f80fd5b614faf36838701614f28565b83526020850135915080821115614fc4575f80fd5b50614fd136828601614f28565b6020830152506040830135614fe581614a93565b604082015292915050565b5f8251614f1e818460208701614b71565b601f8211156104e357805f5260205f20601f840160051c810160208510156150265750805b601f840160051c820191505b818110156119b1575f8155600101615032565b81516001600160401b0381111561505e5761505e614d41565b6150728161506c8454614cfb565b84615001565b602080601f8311600181146150a5575f841561508e5750858301515b5f19600386901b1c1916600185901b178555610ffd565b5f85815260208120601f198616915b828110156150d3578886015182559484019460019091019084016150b4565b50858210156150f057878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610dc757610dc7615100565b5f63ffffffff80831681810361513f5761513f615100565b6001019392505050565b8082028115828204841417610dc757610dc7615100565b5f808335601e19843603018112615175575f80fd5b83016020810192503590506001600160401b03811115615193575f80fd5b803603821315613399575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561527e57848303601f19018952813536889003605e19018112615205575f80fd5b870160606152138280615160565b82875261522383880182846151a1565b9250505061523386830183615160565b868303888801526152458382846151a1565b92505050604080830135925061525a83614a93565b6001600160401b0392909216949091019390935297830197908301906001016151e0565b5090979650505050505050565b6020815281356020820152602082013560408201525f60408301356152af81614c3e565b6001600160a01b031660608381019190915283013536849003601e190181126152d6575f80fd5b83016020810190356001600160401b038111156152f1575f80fd5b8060051b3603821315615302575f80fd5b60808085015261353460a0850182846151c9565b5f8261533057634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061534957615349614b49565b91905290565b5f805f60608486031215615361575f80fd5b83519250602084015161537381614a93565b604085015190925061538481614a93565b809150509250925092565b5f80604083850312156153a0575f80fd5b825191506020830151614c8581614983565b5f60208083525f84546153c481614cfb565b806020870152604060018084165f81146153e557600181146154015761542e565b60ff19851660408a0152604084151560051b8a0101955061542e565b895f5260205f205f5b858110156154255781548b820186015290830190880161540a565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156121e5576121e5615100565b6001600160401b038281168282160390808211156121e5576121e5615100565b5f806040838503121561549c575f80fd5b82516001600160401b03808211156154b2575f80fd5b90840190606082870312156154c5575f80fd5b6154cd614d55565b8251815260208301516154df81614c3e565b60208201526040830151828111156154f5575f80fd5b61550188828601614df5565b6040830152508094505050506020830151614c8581614983565b5f806040838503121561552c575f80fd5b825191506020830151614c8581614a93565b81810381811115610dc757610dc7615100565b6001600160401b0381811683821602808216919082811461557457615574615100565b505092915050565b5f8235603e19833603018112614f1e575f80fd5b5f808335601e198436030181126155a5575f80fd5b8301803591506001600160401b038211156155be575f80fd5b602001915036819003821315613399575f80fd5b602081525f610ec66020830184866151a1565b5f604082360312156155f5575f80fd5b6155fd614d7d565b61560683614990565b81526020808401356001600160401b0380821115615622575f80fd5b9085019036601f830112615634575f80fd5b81358181111561564657615646614d41565b8060051b9150615657848301614d9f565b8181529183018401918481019036841115615670575f80fd5b938501935b8385101561569a578435925061568a83614c3e565b8282529385019390850190615675565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156125025784516001600160a01b031682529383019360019290920191908301906156de565b60208152815160208201525f602083015160e0604084015261572d610100840182614b93565b90506040840151601f198085840301606086015261574b8383614b93565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261577b83836156ac565b925060a08601519150808584030160c08601525061579982826156ac565b91505060c08401516157b660e08501826001600160401b03169052565b509392505050565b5f80604083850312156157cf575f80fd5b8251915060208301516001600160401b038111156157eb575f80fd5b6157f785828601614df5565b9150509250929050565b6001600160401b0383111561581857615818614d41565b61582c836158268354614cfb565b83615001565b5f601f84116001811461585d575f85156158465750838201355b5f19600387901b1c1916600186901b1783556119b1565b5f83815260208120601f198716915b8281101561588c578685013582556020948501946001909201910161586c565b50868210156158a8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f602082840312156158ca575f80fd5b6120cf82614a82565b5f602082840312156158e3575f80fd5b813560ff811681146120cf575f80fd5b5f6001600160401b0380831681810361513f5761513f615100565b5f6020828403121561591e575f80fd5b81516120cf8161498356fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab004317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb004317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d069b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220caa31d1b6a4d5b2139a71f42b963cce2eefd847911a8578b6b6e5f508b96974964736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b50604051615ada380380615ada83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b61598d8061014d5f395ff3fe608060405234801561000f575f80fd5b50600436106101fd575f3560e01c806380dd672f11610114578063ba3a4b97116100a9578063d5f20ff611610079578063d5f20ff614610462578063df93d8de14610482578063e4a63c401461048c578063f74c607b146104a0578063fd7ac5e7146104b3575f80fd5b8063ba3a4b9714610420578063bc5fbfec14610433578063bee0a03f14610447578063c974d1b61461045a575f80fd5b8063a3a65e48116100e4578063a3a65e48146103c0578063a9778a7a146102ac578063afb98096146103d3578063b771b3bc146103fa575f80fd5b806380dd672f1461037f5780638280a25a1461039257806393e245981461039a5780639e1bc4ef146103ad575f80fd5b80633a1cfff61161019557806360ad77841161016557806360ad77841461032c578063620658561461033f57806366435abf14610352578063732214f81461036557806376f786211461036c575f80fd5b80633a1cfff6146102c8578063467ef06f146102db5780634bee0040146102ee57806360305d621461030f575f80fd5b806320d91b7a116101d057806320d91b7a1461025b57806325e1c7761461026e5780632e2194d81461028157806335455ded146102ac575f80fd5b80630118acc4146102015780630322ed9814610216578063151d30d1146102295780631ec4472414610248575b5f80fd5b61021461020f366004614956565b6104c6565b005b610214610224366004614991565b6104fb565b610231600a81565b60405160ff90911681526020015b60405180910390f35b610214610256366004614956565b610782565b6102146102693660046149a8565b61078d565b61021461027c3660046149f6565b610d12565b61029461028f366004614991565b610d86565b6040516001600160401b03909116815260200161023f565b6102b561271081565b60405161ffff909116815260200161023f565b6102146102d6366004614956565b610dda565b6102146102e9366004614a17565b610de5565b6103016102fc366004614a55565b610e8d565b60405190815260200161023f565b610317601481565b60405163ffffffff909116815260200161023f565b61021461033a3660046149f6565b610ec2565b61030161034d366004614abc565b61118f565b610294610360366004614991565b6111af565b6103015f81565b61021461037a366004614956565b6111c3565b61021461038d3660046149f6565b6111ee565b610231603081565b6102146103a8366004614991565b611428565b6103016103bb366004614ad7565b6114dd565b6102146103ce366004614a17565b611509565b6103017f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b6104086005600160991b0181565b6040516001600160a01b03909116815260200161023f565b61021461042e366004614991565b6116fe565b6103015f805160206158f883398151915281565b610214610455366004614991565b61195e565b610231601481565b610475610470366004614991565b611a9b565b60405161023f9190614b6c565b6102946202a30081565b6103015f805160206158d883398151915281565b6102146104ae366004614c00565b611bea565b6103016104c1366004614c3e565b611cc9565b6104d1838383611d24565b6104f657604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f805160206159388339815191526020526040808220815160e0810190925280545f805160206158f883398151915293929190829060ff16600581111561054857610548614af7565b600581111561055957610559614af7565b815260200160018201805461056d90614ca9565b80601f016020809104026020016040519081016040528092919081815260200182805461059990614ca9565b80156105e45780601f106105bb576101008083540402835291602001916105e4565b820191905f5260205f20905b8154815290600101906020018083116105c757829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561064f5761064f614af7565b14610682575f8381526007830160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614ce1565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156106f9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526107209190810190614dea565b6040518263ffffffff1660e01b815260040161073c9190614e1b565b6020604051808303815f875af1158015610758573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061077c9190614e2d565b50505050565b61077c838383611d24565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f805160206158f88339815191529060ff16156107df57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610822573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108469190614e2d565b83602001351461086f576040516372b0a7e760e11b8152602084013560048201526024016104ed565b306108806060850160408601614e44565b6001600160a01b0316146108c35761089e6060840160408501614e44565b604051632f88120d60e21b81526001600160a01b0390911660048201526024016104ed565b5f6108d16060850185614e5f565b905090505f805b828163ffffffff161015610b38575f6108f46060880188614e5f565b8363ffffffff1681811061090a5761090a614ea4565b905060200281019061091c9190614eb8565b61092590614f23565b80516040519192505f91600888019161093d91614f9e565b9081526020016040518091039020541461096d57805160405163a41f772f60e01b81526104ed9190600401614e1b565b5f6002885f01358460405160200161099c92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f19818403018152908290526109b691614f9e565b602060405180830381855afa1580156109d1573d5f803e3d5ffd5b5050506040513d601f19601f820116820180604052508101906109f49190614e2d565b90508086600801835f0151604051610a0c9190614f9e565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610a4c9082614ff3565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610acb90856150c2565b8251604051919550610adc91614f9e565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610b31906150d5565b90506108d8565b50600483018190556001830154606490610b5c90600160401b900460ff16836150f7565b1015610b7e57604051635943317f60e01b8152600481018290526024016104ed565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610ba287612071565b604001516040518263ffffffff1660e01b8152600401610bc29190614e1b565b602060405180830381865af4158015610bdd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c019190614e2d565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610c3b9190615239565b5f60405180830381865af4158015610c55573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610c7c9190810190614dea565b90505f600282604051610c8f9190614f9e565b602060405180830381855afa158015610caa573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610ccd9190614e2d565b9050828114610cf95760405163baaea89d60e01b815260048101829052602481018490526044016104ed565b5050506009909201805460ff1916600117905550505050565b610d1b82612187565b610d3b576040516330efa98b60e01b8152600481018390526024016104ed565b5f610d4583611a9b565b5190506002816005811115610d5c57610d5c614af7565b14610d7c578060405163170cc93360e21b81526004016104ed9190614ce1565b61077c83836121b0565b5f80610d90612476565b60030154610d9e90846152c4565b9050801580610db357506001600160401b0381115b15610dd45760405163222d164360e21b8152600481018490526024016104ed565b92915050565b61077c83838361249a565b610ded612683565b5f610df6612476565b90505f80610e03846126ba565b91509150610e1082612187565b610e1c57505050610e74565b5f8281526005840160205260409020546001600160a01b0316600482516005811115610e4a57610e4a614af7565b03610e5957610e598184612a6d565b610e6f81610e6a846040015161118f565b612a97565b505050505b610e8a60015f8051602061591883398151915255565b50565b5f610e96612683565b610ea285858585612acd565b9050610eba60015f8051602061591883398151915255565b949350505050565b5f610ecb612476565b5f848152600682016020526040808220815160e0810190925280549394509192909190829060ff166003811115610f0457610f04614af7565b6003811115610f1557610f15614af7565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f610f8b82611a9b565b9050600183516003811115610fa257610fa2614af7565b14610fc3578251604051633b0d540d60e21b81526104ed91906004016152e3565b600481516005811115610fd857610fd8614af7565b03610fee57610fe686612c32565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61101389612071565b604001516040518263ffffffff1660e01b81526004016110339190614e1b565b606060405180830381865af415801561104e573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061107291906152fd565b509150915081841461109f57846040015160405163089938b360e11b81526004016104ed91815260200190565b806001600160401b031683606001516001600160401b031610806110d85750806001600160401b03168560a001516001600160401b0316115b1561110157604051632e19bc2d60e11b81526001600160401b03821660048201526024016104ed565b5f888152600687016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f611198612476565b60030154610dd4906001600160401b0384166150f7565b5f6111b982611a9b565b6080015192915050565b6111ce83838361249a565b6104f657604051635bff683f60e11b8152600481018490526024016104ed565b6111f6612683565b5f6111ff612476565b5f848152600682016020526040808220815160e0810190925280549394509192909190829060ff16600381111561123857611238614af7565b600381111561124957611249614af7565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156112c2576112c2614af7565b146112e3578051604051633b0d540d60e21b81526104ed91906004016152e3565b60046112f28260400151611a9b565b51600581111561130457611304614af7565b14611403575f61131384612071565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016113529190614e1b565b606060405180830381865af415801561136d573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061139191906152fd565b5091509150818460400151146113bd5760405163089938b360e11b8152600481018390526024016104ed565b806001600160401b03168460c001516001600160401b031611156113ff57604051632e19bc2d60e11b81526001600160401b03821660048201526024016104ed565b5050505b61140c84612c32565b505061142460015f8051602061591883398151915255565b5050565b5f611431612476565b90505f61143d83611a9b565b519050600481600581111561145457611454614af7565b14611474578060405163170cc93360e21b81526004016104ed9190614ce1565b5f8381526005830160205260409020546001600160a01b031633146114ba57335b604051636e2ccd7560e11b81526001600160a01b0390911660048201526024016104ed565b5f8381526005830160205260409020546104f6906001600160a01b031684612a6d565b5f6114e6612683565b6114f1833384612e00565b9050610dd460015f8051602061591883398151915255565b5f805160206158f88339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61153c86612071565b604001516040518263ffffffff1660e01b815260040161155c9190614e1b565b6040805180830381865af4158015611576573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061159a919061533d565b91509150806115c057604051632d07135360e01b815281151560048201526024016104ed565b5f828152600684016020526040902080546115da90614ca9565b90505f036115fe5760405163089938b360e11b8152600481018390526024016104ed565b60015f83815260078501602052604090205460ff16600581111561162457611624614af7565b14611657575f8281526007840160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614ce1565b5f828152600684016020526040812061166f916148a5565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611707612476565b5f838152600682016020526040808220815160e0810190925280549394509192909190829060ff16600381111561174057611740614af7565b600381111561175157611751614af7565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156117ca576117ca614af7565b141580156117eb57506003815160038111156117e8576117e8614af7565b14155b1561180c578051604051633b0d540d60e21b81526104ed91906004016152e3565b5f61181a8260400151611a9b565b905080606001516001600160401b03165f0361184c576040516339b894f960e21b8152600481018590526024016104ed565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f936118ba93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af41580156118d4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526118fb9190810190614dea565b6040518263ffffffff1660e01b81526004016119179190614e1b565b6020604051808303815f875af1158015611933573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119579190614e2d565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f805160206158f883398151915291906119a590614ca9565b90505f036119c95760405163089938b360e11b8152600481018390526024016104ed565b60015f83815260078301602052604090205460ff1660058111156119ef576119ef614af7565b14611a22575f8281526007820160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614ce1565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611a5b9190600401615360565b6020604051808303815f875af1158015611a77573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104f69190614e2d565b611aa36148dc565b5f8281525f80516020615938833981519152602052604090819020815160e0810190925280545f805160206158f8833981519152929190829060ff166005811115611af057611af0614af7565b6005811115611b0157611b01614af7565b8152602001600182018054611b1590614ca9565b80601f0160208091040260200160405190810160405280929190818152602001828054611b4190614ca9565b8015611b8c5780601f10611b6357610100808354040283529160200191611b8c565b820191905f5260205f20905b815481529060010190602001808311611b6f57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611c33575080546001600160401b03808416911610155b15611c515760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611c7c8484613043565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a150505050565b6040515f905f805160206158f8833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611d0c90869086906153ea565b90815260200160405180910390205491505092915050565b5f80611d2e612476565b5f868152600682016020526040808220815160e0810190925280549394509192909190829060ff166003811115611d6757611d67614af7565b6003811115611d7857611d78614af7565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611dee82611a9b565b9050600283516003811115611e0557611e05614af7565b14611e26578251604051633b0d540d60e21b81526104ed91906004016152e3565b60208301516001600160a01b03163314611ec2575f8281526005850160205260409020546001600160a01b03163314611e5f5733611495565b5f82815260058501602052604090205460a0820151611e8e91600160b01b90046001600160401b0316906153f9565b6001600160401b0316421015611ec25760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104ed565b600281516005811115611ed757611ed7614af7565b036120055760028401546080840151611ef9916001600160401b0316906153f9565b6001600160401b0316421015611f2d5760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104ed565b8615611f3f57611f3d82876121b0565b505b5f8881526006850160205260409020805460ff1916600317905560608301516080820151611f78918491611f739190615419565b61305d565b505f898152600686016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155611fb984613234565b5f8a81526007870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a31515945061206a9350505050565b60048151600581111561201a5761201a614af7565b0361204e5761202883613234565b5f89815260078601602052604090205561204188612c32565b600194505050505061206a565b805160405163170cc93360e21b81526104ed9190600401614ce1565b9392505050565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa1580156120d5573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120fc9190810190615439565b915091508061211e57604051636b2f19e960e01b815260040160405180910390fd5b815115612144578151604051636ba589a560e01b815260048101919091526024016104ed565b60208201516001600160a01b031615612180576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104ed565b5092915050565b5f80612191612476565b5f938452600501602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156121fb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122229190810190615439565b915091508061224457604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015612287573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ab9190614e2d565b8251146122d1578151604051636ba589a560e01b815260048101919091526024016104ed565b60208201516001600160a01b03161561230d576020820151604051624de75d60e31b81526001600160a01b0390911660048201526024016104ed565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246385604001516040518263ffffffff1660e01b815260040161234a9190614e1b565b6040805180830381865af4158015612364573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061238891906154c9565b915091508187146123af5760405163089938b360e11b8152600481018890526024016104ed565b5f6123b8612476565b5f8981526005820160205260409020600101549091506001600160401b03908116908316111561244c575f888152600582016020908152604091829020600101805467ffffffffffffffff19166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261246b565b5f8881526005820160205260409020600101546001600160401b031691505b509695505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806124a4612476565b90505f6124b0866133cb565b90506124bb86612187565b6124ca5760019250505061206a565b5f8681526005830160205260409020546001600160a01b031633146124ef5733611495565b5f86815260058301602052604090205460a082015161251e91600160b01b90046001600160401b0316906153f9565b6001600160401b03168160c001516001600160401b031610156125655760c081015160405163fb6ce63f60e01b81526001600160401b0390911660048201526024016104ed565b5f851561257d5761257687866121b0565b905061259b565b505f8681526005830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f906125c09061118f565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612629573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061264d9190614e2d565b905080846008015f8a81526020019081526020015f205f82825461267191906150c2565b90915550501515979650505050505050565b5f805160206159188339815191528054600119016126b457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f6126c36148dc565b5f805160206158f88339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6126f688612071565b604001516040518263ffffffff1660e01b81526004016127169190614e1b565b6040805180830381865af4158015612730573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612754919061533d565b91509150801561277b57604051632d07135360e01b815281151560048201526024016104ed565b5f828152600784016020526040808220815160e081019092528054829060ff1660058111156127ac576127ac614af7565b60058111156127bd576127bd614af7565b81526020016001820180546127d190614ca9565b80601f01602080910402602001604051908101604052809291908181526020018280546127fd90614ca9565b80156128485780601f1061281f57610100808354040283529160200191612848565b820191905f5260205f20905b81548152906001019060200180831161282b57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156128b3576128b3614af7565b141580156128d457506001815160058111156128d1576128d1614af7565b14155b156128f557805160405163170cc93360e21b81526104ed9190600401614ce1565b60038151600581111561290a5761290a614af7565b03612918576004815261291d565b600581525b8360080181602001516040516129339190614f9e565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff1916600183600581111561297757612977614af7565b0217905550602082015160018201906129909082614ff3565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612a3657612a36614af7565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612a76612476565b5f8381526008820160205260408120805491905590915061077c84826136af565b5f805160206158d883398151915254611424906001600160a01b03168383613725565b60015f8051602061591883398151915255565b5f80612ad7612476565b600281015490915061ffff600160401b90910481169086161080612b00575061271061ffff8616115b15612b2457604051635f12e6c360e11b815261ffff861660048201526024016104ed565b60028101546001600160401b039081169085161015612b60576040516202a06d60e11b81526001600160401b03851660048201526024016104ed565b8054831080612b725750806001015483115b15612b935760405163222d164360e21b8152600481018490526024016104ed565b5f612b9d84613784565b90505f612ba982610d86565b90505f612bb689836137a7565b5f818152600595909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b5f612c3b612476565b5f838152600682016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c7457612c74614af7565b6003811115612c8557612c85614af7565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d227fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612d3191906153f9565b6001600160401b0316421015612d655760405163fb6ce63f60e01b81526001600160401b03421660048201526024016104ed565b5f8481526006840160209081526040822080546001600160a81b0319168155600181018390556002018290558301519080612da1838886613ccc565b91509150612dba8560200151610e6a876060015161118f565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80612e0a612476565b90505f612e1961028f85613784565b90505f612e2587611a9b565b9050612e3087612187565b612e50576040516330efa98b60e01b8152600481018890526024016104ed565b600281516005811115612e6557612e65614af7565b14612e8657805160405163170cc93360e21b81526104ed9190600401614ce1565b5f828260800151612e9791906153f9565b905083600201600a9054906101000a90046001600160401b03168260400151612ec091906154ec565b6001600160401b0316816001600160401b03161115612efd57604051636d51fe0560e11b81526001600160401b03821660048201526024016104ed565b5f80612f098a8461305d565b915091505f8a83604051602001612f3792919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260068b019093529120805491925060019160ff1916828002179055505f8181526006880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b61304b613d79565b61305482613dc4565b61142481613e38565b5f8281525f80516020615938833981519152602052604081206002015481905f805160206158f883398151915290600160801b90046001600160401b03166130a58582613ea0565b5f6130af876140c3565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015613158573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261317f9190810190614dea565b6040518263ffffffff1660e01b815260040161319b9190614e1b565b6020604051808303815f875af11580156131b7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906131db9190614e2d565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f8061323e612476565b90505f61324e8460400151611a9b565b90505f60038251600581111561326657613266614af7565b1480613284575060048251600581111561328257613282614af7565b145b15613294575060c08101516132d1565b6002825160058111156132a9576132a9614af7565b036132b55750426132d1565b815160405163170cc93360e21b81526104ed9190600401614ce1565b84608001516001600160401b0316816001600160401b0316116132f857505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f9061331d9061118f565b60a085015160808901516040808b01515f90815260058a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa15801561339e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133c29190614e2d565b95945050505050565b6133d36148dc565b5f8281525f805160206159388339815191526020526040808220815160e0810190925280545f805160206158f883398151915293929190829060ff16600581111561342057613420614af7565b600581111561343157613431614af7565b815260200160018201805461344590614ca9565b80601f016020809104026020016040519081016040528092919081815260200182805461347190614ca9565b80156134bc5780601f10613493576101008083540402835291602001916134bc565b820191905f5260205f20905b81548152906001019060200180831161349f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561352a5761352a614af7565b1461355d575f8481526007830160205260409081902054905163170cc93360e21b81526104ed9160ff1690600401614ce1565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff191660018360058111156135a1576135a1614af7565b0217905550602082015160018201906135ba9082614ff3565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f613658858261305d565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b5f5f805160206158d883398151915280546040516340c10f1960e01b81526001600160a01b038681166004830152602482018690529293509116906340c10f19906044015f604051808303815f87803b15801561370a575f80fd5b505af115801561371c573d5f803e3d5ffd5b50505050505050565b6040516001600160a01b038381166024830152604482018390526104f691859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050614138565b5f610dd4825f805160206158d8833981519152546001600160a01b031690614199565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff166137eb57604051637fab81e560e01b815260040160405180910390fd5b5f805160206158f88339815191524261380a6060860160408701614abc565b6001600160401b031611158061384457506138286202a300426150c2565b6138386060860160408701614abc565b6001600160401b031610155b1561387e576138596060850160408601614abc565b604051635879da1360e11b81526001600160401b0390911660048201526024016104ed565b61389361388e6060860186615517565b6141a5565b6138a361388e6080860186615517565b60306138b2602086018661552b565b9050146138e4576138c6602085018561552b565b6040516326475b2f60e11b81526104ed925060040190815260200190565b6138ee848061552b565b90505f0361391b57613900848061552b565b604051633e08a12560e11b81526004016104ed92919061556d565b5f6008820161392a868061552b565b6040516139389291906153ea565b9081526020016040518091039020541461397157613956848061552b565b60405163a41f772f60e01b81526004016104ed92919061556d565b61397b835f613ea0565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce5190602081016139b88a8061552b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613a00908b018b61552b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613a4960608b0160408c01614abc565b6001600160401b03168152602001613a6460608b018b615517565b613a6d90615580565b8152602001613a7f60808b018b615517565b613a8890615580565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613ab691906156a2565b5f60405180830381865af4158015613ad0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613af79190810190615759565b5f82815260068601602052604090209193509150613b158282614ff3565b508160088401613b25888061552b565b604051613b339291906153ea565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613b6f908590600401614e1b565b6020604051808303815f875af1158015613b8b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613baf9190614e2d565b5f8481526007860160205260409020805460ff191660011790559050613bd5878061552b565b5f858152600787016020526040902060010191613bf391908361579c565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613c52888061552b565b604051613c609291906153ea565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613c9e9190614abc565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b5f805f613cd7612476565b5f86815260078201602052604081208054908290559192509081908015613d6b575f87815260058501602052604090205461271090613d2190600160a01b900461ffff16836150f7565b613d2b91906152c4565b915081846008015f8981526020019081526020015f205f828254613d4f91906150c2565b90915550613d5f90508282615855565b9250613d6b89846136af565b509097909650945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613dc257604051631afcd79f60e31b815260040160405180910390fd5b565b613dcc613d79565b613dd58161430e565b613ddd614327565b610e8a60608201356080830135613dfa60c0850160a08601614abc565b613e0a60e0860160c08701615868565b613e1b610100870160e08801615881565b610100870135613e3361014089016101208a01614e44565b614337565b613e40613d79565b5f805160206158d88339815191526001600160a01b038216613e8057604051637330680360e01b81526001600160a01b03831660048201526024016104ed565b80546001600160a01b0319166001600160a01b0392909216919091179055565b5f805160206158f88339815191525f6001600160401b038084169085161115613ed457613ecd8385615419565b9050613ee1565b613ede8484615419565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580613f43575060018401548151613f3f916001600160401b0316906150c2565b8210155b15613f69576001600160401b038316606082015281815260408101516020820152613f88565b8281606001818151613f7b91906153f9565b6001600160401b03169052505b6060810151613f989060646154ec565b602082015160018601546001600160401b039290921691613fc39190600160401b900460ff166150f7565b1015613ff357606081015160405163dfae880160e01b81526001600160401b0390911660048201526024016104ed565b856001600160401b03168160400181815161400e91906150c2565b9052506040810180516001600160401b038716919061402e908390615855565b9052506001840154604082015160649161405391600160401b90910460ff16906150f7565b101561407a578060400151604051635943317f60e01b81526004016104ed91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f805160206159388339815191526020526040812060020180545f805160206158f8833981519152919060089061410d90600160401b90046001600160401b03166158a1565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b5f61414c6001600160a01b038416836144f0565b905080515f1415801561417057508080602001905181019061416e91906158bc565b155b156104f657604051635274afe760e01b81526001600160a01b03841660048201526024016104ed565b5f61206a8333846144fd565b6141b26020820182614a17565b63ffffffff161580156141d257506141cd6020820182614e5f565b151590505b15614219576141e46020820182614a17565b6141f16020830183614e5f565b60405163c08a0f1d60e01b815263ffffffff90931660048401526024830152506044016104ed565b6142266020820182614e5f565b90506142356020830183614a17565b63ffffffff16111561424e576141e46020820182614a17565b60015b61425e6020830183614e5f565b9050811015611424576142746020830183614e5f565b61427f600184615855565b81811061428e5761428e614ea4565b90506020020160208101906142a39190614e44565b6001600160a01b03166142b96020840184614e5f565b838181106142c9576142c9614ea4565b90506020020160208101906142de9190614e44565b6001600160a01b0316101561430657604051630dbc8d5f60e31b815260040160405180910390fd5b600101614251565b614316613d79565b61431e614660565b610e8a81614668565b61432f613d79565b613dc2614750565b61433f613d79565b5f614348612476565b905061ffff85161580614360575061271061ffff8616115b1561438457604051635f12e6c360e11b815261ffff861660048201526024016104ed565b868811156143a85760405163222d164360e21b8152600481018990526024016104ed565b60ff841615806143bb5750600a60ff8516115b156143de5760405163170db35960e31b815260ff851660048201526024016104ed565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316866001600160401b03161015614445576040516202a06d60e11b81526001600160401b03871660048201526024016104ed565b825f036144655760405163a733007160e01b815260040160405180910390fd5b96875560018701959095556002860180546001600160401b039590951669ffffffffffffffffffff1990951694909417600160401b61ffff94909416939093029290921767ffffffffffffffff60501b191660ff91909116600160501b02179091556003830155600490910180546001600160a01b0319166001600160a01b03909216919091179055565b606061206a83835f614758565b6040516370a0823160e01b81523060048201525f9081906001600160a01b038616906370a0823190602401602060405180830381865afa158015614543573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145679190614e2d565b905061457e6001600160a01b0386168530866147e7565b6040516370a0823160e01b81523060048201525f906001600160a01b038716906370a0823190602401602060405180830381865afa1580156145c2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906145e69190614e2d565b905081811161464c5760405162461bcd60e51b815260206004820152602c60248201527f5361666545524332305472616e7366657246726f6d3a2062616c616e6365206e60448201526b1bdd081a5b98dc99585cd95960a21b60648201526084016104ed565b6146568282615855565b9695505050505050565b613dc2613d79565b614670613d79565b80355f805160206158f883398151915290815560146146956060840160408501615881565b60ff1611806146b457506146af6060830160408401615881565b60ff16155b156146e8576146c96060830160408401615881565b604051634a59bbff60e11b815260ff90911660048201526024016104ed565b6146f86060830160408401615881565b60018201805460ff92909216600160401b0260ff60401b199092169190911790556147296040830160208401614abc565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612aba613d79565b60608147101561477d5760405163cd78605960e01b81523060048201526024016104ed565b5f80856001600160a01b031684866040516147989190614f9e565b5f6040518083038185875af1925050503d805f81146147d2576040519150601f19603f3d011682016040523d82523d5f602084013e6147d7565b606091505b5091509150614656868383614820565b6040516001600160a01b03848116602483015283811660448301526064820183905261077c9186918216906323b872dd90608401613752565b606082614835576148308261487c565b61206a565b815115801561484c57506001600160a01b0384163b155b1561487557604051639996b31560e01b81526001600160a01b03851660048201526024016104ed565b508061206a565b80511561488c5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5080546148b190614ca9565b5f825580601f106148c0575050565b601f0160209004905f5260205f2090810190610e8a9190614919565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b8082111561492d575f815560010161491a565b5090565b8015158114610e8a575f80fd5b803563ffffffff81168114614951575f80fd5b919050565b5f805f60608486031215614968575f80fd5b83359250602084013561497a81614931565b91506149886040850161493e565b90509250925092565b5f602082840312156149a1575f80fd5b5035919050565b5f80604083850312156149b9575f80fd5b82356001600160401b038111156149ce575f80fd5b8301608081860312156149df575f80fd5b91506149ed6020840161493e565b90509250929050565b5f8060408385031215614a07575f80fd5b823591506149ed6020840161493e565b5f60208284031215614a27575f80fd5b61206a8261493e565b803561ffff81168114614951575f80fd5b6001600160401b0381168114610e8a575f80fd5b5f805f8060808587031215614a68575f80fd5b84356001600160401b03811115614a7d575f80fd5b850160a08188031215614a8e575f80fd5b9350614a9c60208601614a30565b92506040850135614aac81614a41565b9396929550929360600135925050565b5f60208284031215614acc575f80fd5b813561206a81614a41565b5f8060408385031215614ae8575f80fd5b50508035926020909101359150565b634e487b7160e01b5f52602160045260245ffd5b60068110614b1b57614b1b614af7565b9052565b5f5b83811015614b39578181015183820152602001614b21565b50505f910152565b5f8151808452614b58816020860160208601614b1f565b601f01601f19169290920160200192915050565b60208152614b7e602082018351614b0b565b5f602083015160e06040840152614b99610100840182614b41565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b6001600160a01b0381168114610e8a575f80fd5b5f80828403610160811215614c13575f80fd5b61014080821215614c22575f80fd5b8493508301359050614c3381614bec565b809150509250929050565b5f8060208385031215614c4f575f80fd5b82356001600160401b0380821115614c65575f80fd5b818501915085601f830112614c78575f80fd5b813581811115614c86575f80fd5b866020828501011115614c97575f80fd5b60209290920196919550909350505050565b600181811c90821680614cbd57607f821691505b602082108103614cdb57634e487b7160e01b5f52602260045260245ffd5b50919050565b60208101610dd48284614b0b565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614d2557614d25614cef565b60405290565b604080519081016001600160401b0381118282101715614d2557614d25614cef565b604051601f8201601f191681016001600160401b0381118282101715614d7557614d75614cef565b604052919050565b5f6001600160401b03821115614d9557614d95614cef565b50601f01601f191660200190565b5f82601f830112614db2575f80fd5b8151614dc5614dc082614d7d565b614d4d565b818152846020838601011115614dd9575f80fd5b610eba826020830160208701614b1f565b5f60208284031215614dfa575f80fd5b81516001600160401b03811115614e0f575f80fd5b610eba84828501614da3565b602081525f61206a6020830184614b41565b5f60208284031215614e3d575f80fd5b5051919050565b5f60208284031215614e54575f80fd5b813561206a81614bec565b5f808335601e19843603018112614e74575f80fd5b8301803591506001600160401b03821115614e8d575f80fd5b6020019150600581901b360382131561322d575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614ecc575f80fd5b9190910192915050565b5f82601f830112614ee5575f80fd5b8135614ef3614dc082614d7d565b818152846020838601011115614f07575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614f33575f80fd5b614f3b614d03565b82356001600160401b0380821115614f51575f80fd5b614f5d36838701614ed6565b83526020850135915080821115614f72575f80fd5b50614f7f36828601614ed6565b6020830152506040830135614f9381614a41565b604082015292915050565b5f8251614ecc818460208701614b1f565b601f8211156104f657805f5260205f20601f840160051c81016020851015614fd45750805b601f840160051c820191505b81811015611957575f8155600101614fe0565b81516001600160401b0381111561500c5761500c614cef565b6150208161501a8454614ca9565b84614faf565b602080601f831160018114615053575f841561503c5750858301515b5f19600386901b1c1916600185901b178555610fe6565b5f85815260208120601f198616915b8281101561508157888601518255948401946001909101908401615062565b508582101561509e57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610dd457610dd46150ae565b5f63ffffffff8083168181036150ed576150ed6150ae565b6001019392505050565b8082028115828204841417610dd457610dd46150ae565b5f808335601e19843603018112615123575f80fd5b83016020810192503590506001600160401b03811115615141575f80fd5b80360382131561322d575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b8781101561522c57848303601f19018952813536889003605e190181126151b3575f80fd5b870160606151c1828061510e565b8287526151d1838801828461514f565b925050506151e18683018361510e565b868303888801526151f383828461514f565b92505050604080830135925061520883614a41565b6001600160401b03929092169490910193909352978301979083019060010161518e565b5090979650505050505050565b6020815281356020820152602082013560408201525f604083013561525d81614bec565b6001600160a01b031660608381019190915283013536849003601e19018112615284575f80fd5b83016020810190356001600160401b0381111561529f575f80fd5b8060051b36038213156152b0575f80fd5b6080808501526133c260a085018284615177565b5f826152de57634e487b7160e01b5f52601260045260245ffd5b500490565b60208101600483106152f7576152f7614af7565b91905290565b5f805f6060848603121561530f575f80fd5b83519250602084015161532181614a41565b604085015190925061533281614a41565b809150509250925092565b5f806040838503121561534e575f80fd5b825191506020830151614c3381614931565b5f60208083525f845461537281614ca9565b806020870152604060018084165f811461539357600181146153af576153dc565b60ff19851660408a0152604084151560051b8a010195506153dc565b895f5260205f205f5b858110156153d35781548b82018601529083019088016153b8565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b03818116838216019080821115612180576121806150ae565b6001600160401b03828116828216039080821115612180576121806150ae565b5f806040838503121561544a575f80fd5b82516001600160401b0380821115615460575f80fd5b9084019060608287031215615473575f80fd5b61547b614d03565b82518152602083015161548d81614bec565b60208201526040830151828111156154a3575f80fd5b6154af88828601614da3565b6040830152508094505050506020830151614c3381614931565b5f80604083850312156154da575f80fd5b825191506020830151614c3381614a41565b6001600160401b0381811683821602808216919082811461550f5761550f6150ae565b505092915050565b5f8235603e19833603018112614ecc575f80fd5b5f808335601e19843603018112615540575f80fd5b8301803591506001600160401b03821115615559575f80fd5b60200191503681900382131561322d575f80fd5b602081525f610eba60208301848661514f565b5f60408236031215615590575f80fd5b615598614d2b565b6155a18361493e565b81526020808401356001600160401b03808211156155bd575f80fd5b9085019036601f8301126155cf575f80fd5b8135818111156155e1576155e1614cef565b8060051b91506155f2848301614d4d565b818152918301840191848101903684111561560b575f80fd5b938501935b83851015615635578435925061562583614bec565b8282529385019390850190615610565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b8083101561246b5784516001600160a01b03168252938301936001929092019190830190615679565b60208152815160208201525f602083015160e060408401526156c8610100840182614b41565b90506040840151601f19808584030160608601526156e68383614b41565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526157168383615647565b925060a08601519150808584030160c0860152506157348282615647565b91505060c084015161575160e08501826001600160401b03169052565b509392505050565b5f806040838503121561576a575f80fd5b8251915060208301516001600160401b03811115615786575f80fd5b61579285828601614da3565b9150509250929050565b6001600160401b038311156157b3576157b3614cef565b6157c7836157c18354614ca9565b83614faf565b5f601f8411600181146157f8575f85156157e15750838201355b5f19600387901b1c1916600186901b178355611957565b5f83815260208120601f198716915b828110156158275786850135825560209485019460019092019101615807565b5086821015615843575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b81810381811115610dd457610dd46150ae565b5f60208284031215615878575f80fd5b61206a82614a30565b5f60208284031215615891575f80fd5b813560ff8116811461206a575f80fd5b5f6001600160401b038083168181036150ed576150ed6150ae565b5f602082840312156158cc575f80fd5b815161206a8161493156fe6e5bdfcce15e53c3406ea67bfce37dcd26f5152d5492824e43fd5e3c8ac5ab00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a2646970667358221220178166e7fd7f4cb39cea62e012bdd587497ecce9ec67b813211c7c7612f2156864736f6c63430008190033", } // 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 e3cf7f4fd..f58a602a9 100644 --- a/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go +++ b/abi-bindings/go/validator-manager/NativeTokenStakingManager/NativeTokenStakingManager.go @@ -103,7 +103,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\":\"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\":\"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\":\"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: "0x608060405234801561000f575f80fd5b5060405161587e38038061587e83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b6157318061014d5f395ff3fe6080604052600436106101f1575f3560e01c806380dd672f11610108578063ba3a4b971161009d578063c599e24f1161006d578063c599e24f1461058d578063c974d1b6146105a0578063d5f20ff6146105b4578063df93d8de146105e0578063fd7ac5e7146105f6575f80fd5b8063ba3a4b9714610510578063bc5fbfec1461052f578063bee0a03f1461054f578063c257a0f51461056e575f80fd5b8063a9778a7a116100d8578063a9778a7a14610326578063af2f5feb146104c3578063afb98096146104d6578063b771b3bc146104f6575f80fd5b806380dd672f146104525780638280a25a1461047157806393e2459814610485578063a3a65e48146104a4575f80fd5b806335455ded1161018957806360ad77841161015957806360ad7784146103b557806362065856146103d457806366435abf14610401578063732214f81461042057806376f7862114610433575f80fd5b806335455ded146103265780633a1cfff61461034e578063467ef06f1461036d57806360305d621461038c575f80fd5b806320d91b7a116101c457806320d91b7a1461027f57806325e1c7761461029e5780632e2194d8146102bd578063329c3e12146102f4575f80fd5b80630118acc4146101f55780630322ed9814610216578063151d30d1146102355780631ec4472414610260575b5f80fd5b348015610200575f80fd5b5061021461020f366004614740565b610615565b005b348015610221575f80fd5b5061021461023036600461477b565b61064a565b348015610240575f80fd5b50610249600a81565b60405160ff90911681526020015b60405180910390f35b34801561026b575f80fd5b5061021461027a366004614740565b6108d1565b34801561028a575f80fd5b50610214610299366004614792565b6108dc565b3480156102a9575f80fd5b506102146102b83660046147e0565b610e61565b3480156102c8575f80fd5b506102dc6102d736600461477b565b610ed5565b6040516001600160401b039091168152602001610257565b3480156102ff575f80fd5b5061030e6001600160991b0181565b6040516001600160a01b039091168152602001610257565b348015610331575f80fd5b5061033b61271081565b60405161ffff9091168152602001610257565b348015610359575f80fd5b50610214610368366004614740565b610f2f565b348015610378575f80fd5b50610214610387366004614801565b610f3a565b348015610397575f80fd5b506103a0601481565b60405163ffffffff9091168152602001610257565b3480156103c0575f80fd5b506102146103cf3660046147e0565b610ffb565b3480156103df575f80fd5b506103f36103ee36600461482e565b6112d3565b604051908152602001610257565b34801561040c575f80fd5b506102dc61041b36600461477b565b61130a565b34801561042b575f80fd5b506103f35f81565b34801561043e575f80fd5b5061021461044d366004614740565b61131e565b34801561045d575f80fd5b5061021461046c3660046147e0565b611349565b34801561047c575f80fd5b50610249603081565b348015610490575f80fd5b5061021461049f36600461477b565b61158e565b3480156104af575f80fd5b506102146104be366004614801565b611659565b6103f36104d136600461485a565b61184e565b3480156104e1575f80fd5b506103f35f8051602061565c83398151915281565b348015610501575f80fd5b5061030e6005600160991b0181565b34801561051b575f80fd5b5061021461052a36600461477b565b611882565b34801561053a575f80fd5b506103f35f8051602061567c83398151915281565b34801561055a575f80fd5b5061021461056936600461477b565b611aed565b348015610579575f80fd5b506102146105883660046148bb565b611c2a565b6103f361059b36600461477b565b611d07565b3480156105ab575f80fd5b50610249601481565b3480156105bf575f80fd5b506105d36105ce36600461477b565b611d38565b6040516102579190614947565b3480156105eb575f80fd5b506102dc6202a30081565b348015610601575f80fd5b506103f36106103660046149c7565b611e87565b610620838383611ee2565b61064557604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f805160206156dc8339815191526020526040808220815160e0810190925280545f8051602061567c83398151915293929190829060ff166005811115610697576106976148d2565b60058111156106a8576106a86148d2565b81526020016001820180546106bc90614a32565b80601f01602080910402602001604051908101604052809291908181526020018280546106e890614a32565b80156107335780601f1061070a57610100808354040283529160200191610733565b820191905f5260205f20905b81548152906001019060200180831161071657829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a0909101529091508151600581111561079e5761079e6148d2565b146107d1575f8381526007830160205260409081902054905163170cc93360e21b815261063c9160ff1690600401614a64565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af4158015610848573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261086f9190810190614b75565b6040518263ffffffff1660e01b815260040161088b9190614ba6565b6020604051808303815f875af11580156108a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108cb9190614bb8565b50505050565b6108cb838383611ee2565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061567c8339815191529060ff161561092e57604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610971573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109959190614bb8565b8360200135146109be576040516372b0a7e760e11b81526020840135600482015260240161063c565b306109cf6060850160408601614be3565b6001600160a01b031614610a12576109ed6060840160408501614be3565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161063c565b5f610a206060850185614bfe565b905090505f805b828163ffffffff161015610c87575f610a436060880188614bfe565b8363ffffffff16818110610a5957610a59614c43565b9050602002810190610a6b9190614c57565b610a7490614cc2565b80516040519192505f916008880191610a8c91614d3d565b90815260200160405180910390205414610abc57805160405163a41f772f60e01b815261063c9190600401614ba6565b5f6002885f013584604051602001610aeb92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610b0591614d3d565b602060405180830381855afa158015610b20573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b439190614bb8565b90508086600801835f0151604051610b5b9190614d3d565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610b9b9082614d92565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610c1a9085614e61565b8251604051919550610c2b91614d3d565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610c8090614e74565b9050610a27565b50600483018190556001830154606490610cab90600160401b900460ff1683614e96565b1015610ccd57604051635943317f60e01b81526004810182905260240161063c565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610cf187612233565b604001516040518263ffffffff1660e01b8152600401610d119190614ba6565b602060405180830381865af4158015610d2c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d509190614bb8565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d8a9190614fd8565b5f60405180830381865af4158015610da4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dcb9190810190614b75565b90505f600282604051610dde9190614d3d565b602060405180830381855afa158015610df9573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610e1c9190614bb8565b9050828114610e485760405163baaea89d60e01b8152600481018290526024810184905260440161063c565b5050506009909201805460ff1916600117905550505050565b610e6a82612349565b610e8a576040516330efa98b60e01b81526004810183905260240161063c565b5f610e9483611d38565b5190506002816005811115610eab57610eab6148d2565b14610ecb578060405163170cc93360e21b815260040161063c9190614a64565b6108cb8383612384565b5f805f8051602061565c83398151915260030154610ef39084615063565b9050801580610f0857506001600160401b0381115b15610f295760405163222d164360e21b81526004810184905260240161063c565b92915050565b6108cb83838361266a565b610f42612856565b5f8051602061565c8339815191525f80610f5b8461288d565b91509150610f6882612349565b610f7457505050610fe2565b5f8281526005840160205260409020546001600160a01b0316600482516005811115610fa257610fa26148d2565b03610fc7575f83815260088501602052604081208054919055610fc58282612c40565b505b610fdd81610fd884604001516112d3565b612c9e565b505050505b610ff860015f805160206156bc83398151915255565b50565b5f8281525f8051602061569c8339815191526020526040808220815160e0810190925280545f8051602061565c83398151915293929190829060ff166003811115611048576110486148d2565b6003811115611059576110596148d2565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6110cf82611d38565b90506001835160038111156110e6576110e66148d2565b14611107578251604051633b0d540d60e21b815261063c9190600401615082565b60048151600581111561111c5761111c6148d2565b036111325761112a86612cc4565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f61115789612233565b604001516040518263ffffffff1660e01b81526004016111779190614ba6565b606060405180830381865af4158015611192573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111b6919061509c565b50915091508184146111e357846040015160405163089938b360e11b815260040161063c91815260200190565b806001600160401b031683606001516001600160401b0316108061121c5750806001600160401b03168560a001516001600160401b0316115b1561124557604051632e19bc2d60e11b81526001600160401b038216600482015260240161063c565b5f888152600687016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d03545f90610f29906001600160401b038416614e96565b5f61131482611d38565b6080015192915050565b61132983838361266a565b61064557604051635bff683f60e11b81526004810184905260240161063c565b611351612856565b5f8281525f8051602061569c8339815191526020526040808220815160e0810190925280545f8051602061565c83398151915293929190829060ff16600381111561139e5761139e6148d2565b60038111156113af576113af6148d2565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101529050600381516003811115611428576114286148d2565b14611449578051604051633b0d540d60e21b815261063c9190600401615082565b60046114588260400151611d38565b51600581111561146a5761146a6148d2565b14611569575f61147984612233565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b81526004016114b89190614ba6565b606060405180830381865af41580156114d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114f7919061509c565b5091509150818460400151146115235760405163089938b360e11b81526004810183905260240161063c565b806001600160401b03168460c001516001600160401b0316111561156557604051632e19bc2d60e11b81526001600160401b038216600482015260240161063c565b5050505b61157284612cc4565b505061158a60015f805160206156bc83398151915255565b5050565b5f8051602061565c8339815191525f6115a683611d38565b51905060048160058111156115bd576115bd6148d2565b146115dd578060405163170cc93360e21b815260040161063c9190614a64565b5f8381526005830160205260409020546001600160a01b0316331461162357335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161063c565b5f838152600883016020908152604080832080549084905560058601909252909120546108cb906001600160a01b031682612c40565b5f8051602061567c8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61168c86612233565b604001516040518263ffffffff1660e01b81526004016116ac9190614ba6565b6040805180830381865af41580156116c6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116ea91906150d1565b915091508061171057604051632d07135360e01b8152811515600482015260240161063c565b5f8281526006840160205260409020805461172a90614a32565b90505f0361174e5760405163089938b360e11b81526004810183905260240161063c565b60015f83815260078501602052604090205460ff166005811115611774576117746148d2565b146117a7575f8281526007840160205260409081902054905163170cc93360e21b815261063c9160ff1690600401614a64565b5f82815260068401602052604081206117bf91614694565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f611857612856565b61186384848434612f18565b905061187b60015f805160206156bc83398151915255565b9392505050565b5f8181525f8051602061569c8339815191526020526040808220815160e0810190925280545f8051602061565c83398151915293929190829060ff1660038111156118cf576118cf6148d2565b60038111156118e0576118e06148d2565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290915081516003811115611959576119596148d2565b1415801561197a5750600381516003811115611977576119776148d2565b14155b1561199b578051604051633b0d540d60e21b815261063c9190600401615082565b5f6119a98260400151611d38565b905080606001516001600160401b03165f036119db576040516339b894f960e21b81526004810185905260240161063c565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f93611a4993906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611a63573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a8a9190810190614b75565b6040518263ffffffff1660e01b8152600401611aa69190614ba6565b6020604051808303815f875af1158015611ac2573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ae69190614bb8565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061567c8339815191529190611b3490614a32565b90505f03611b585760405163089938b360e11b81526004810183905260240161063c565b60015f83815260078301602052604090205460ff166005811115611b7e57611b7e6148d2565b14611bb1575f8281526007820160205260409081902054905163170cc93360e21b815261063c9160ff1690600401614a64565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611bea91906004016150ff565b6020604051808303815f875af1158015611c06573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106459190614bb8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611c73575080546001600160401b03808416911610155b15611c915760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611cbb83613093565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b5f611d10612856565b611d1b8233346130a4565b9050611d3360015f805160206156bc83398151915255565b919050565b611d406146cb565b5f8281525f805160206156dc833981519152602052604090819020815160e0810190925280545f8051602061567c833981519152929190829060ff166005811115611d8d57611d8d6148d2565b6005811115611d9e57611d9e6148d2565b8152602001600182018054611db290614a32565b80601f0160208091040260200160405190810160405280929190818152602001828054611dde90614a32565b8015611e295780601f10611e0057610100808354040283529160200191611e29565b820191905f5260205f20905b815481529060010190602001808311611e0c57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f8051602061567c833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611eca9086908690615189565b90815260200160405180910390205491505092915050565b5f8381525f8051602061569c8339815191526020526040808220815160e0810190925280545f8051602061565c8339815191529284929091829060ff166003811115611f3057611f306148d2565b6003811115611f4157611f416148d2565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611fb782611d38565b9050600283516003811115611fce57611fce6148d2565b14611fef578251604051633b0d540d60e21b815261063c9190600401615082565b60208301516001600160a01b0316331461208b575f8281526005850160205260409020546001600160a01b0316331461202857336115fe565b5f82815260058501602052604090205460a082015161205791600160b01b90046001600160401b031690615198565b6001600160401b031642101561208b5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161063c565b6002815160058111156120a0576120a06148d2565b036121ce57600284015460808401516120c2916001600160401b031690615198565b6001600160401b03164210156120f65760405163fb6ce63f60e01b81526001600160401b034216600482015260240161063c565b8615612108576121068287612384565b505b5f8881526006850160205260409020805460ff191660031790556060830151608082015161214191849161213c91906151b8565b6132e7565b505f898152600686016020526040812060020180546001600160401b03909316600160c01b026001600160c01b0390931692909217909155612182846134be565b5f8a81526007870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a31515945061187b9350505050565b6004815160058111156121e3576121e36148d2565b03612217576121f1836134be565b5f89815260078601602052604090205561220a88612cc4565b600194505050505061187b565b805160405163170cc93360e21b815261063c9190600401614a64565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612297573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122be91908101906151d8565b91509150806122e057604051636b2f19e960e01b815260040160405180910390fd5b815115612306578151604051636ba589a560e01b8152600481019190915260240161063c565b60208201516001600160a01b031615612342576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161063c565b5092915050565b5f9081527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0560205260409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa1580156123cf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526123f691908101906151d8565b915091508061241857604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa15801561245b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061247f9190614bb8565b8251146124a5578151604051636ba589a560e01b8152600481019190915260240161063c565b60208201516001600160a01b0316156124e1576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161063c565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246385604001516040518263ffffffff1660e01b815260040161251e9190614ba6565b6040805180830381865af4158015612538573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061255c9190615268565b915091508187146125835760405163089938b360e11b81526004810188905260240161063c565b5f8781527f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0560205260409020600101545f8051602061565c833981519152906001600160401b039081169083161115612640575f888152600582016020908152604091829020600101805467ffffffffffffffff19166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a261265f565b5f8881526005820160205260409020600101546001600160401b031691505b509695505050505050565b5f5f8051602061565c833981519152816126838661365b565b905061268e86612349565b61269d5760019250505061187b565b5f8681526005830160205260409020546001600160a01b031633146126c257336115fe565b5f86815260058301602052604090205460a08201516126f191600160b01b90046001600160401b031690615198565b6001600160401b03168160c001516001600160401b031610156127385760c081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161063c565b5f8515612750576127498786612384565b905061276e565b505f8681526005830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f90612793906112d3565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa1580156127fc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128209190614bb8565b905080846008015f8a81526020019081526020015f205f8282546128449190614e61565b90915550501515979650505050505050565b5f805160206156bc83398151915280546001190161288757604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f6128966146cb565b5f8051602061567c8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f6128c988612233565b604001516040518263ffffffff1660e01b81526004016128e99190614ba6565b6040805180830381865af4158015612903573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061292791906150d1565b91509150801561294e57604051632d07135360e01b8152811515600482015260240161063c565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561297f5761297f6148d2565b6005811115612990576129906148d2565b81526020016001820180546129a490614a32565b80601f01602080910402602001604051908101604052809291908181526020018280546129d090614a32565b8015612a1b5780601f106129f257610100808354040283529160200191612a1b565b820191905f5260205f20905b8154815290600101906020018083116129fe57829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612a8657612a866148d2565b14158015612aa75750600181516005811115612aa457612aa46148d2565b14155b15612ac857805160405163170cc93360e21b815261063c9190600401614a64565b600381516005811115612add57612add6148d2565b03612aeb5760048152612af0565b600581525b836008018160200151604051612b069190614d3d565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612b4a57612b4a6148d2565b021790555060208201516001820190612b639082614d92565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612c0957612c096148d2565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015612c8c575f80fd5b505af115801561112a573d5f803e3d5ffd5b61158a6001600160a01b0383168261393f565b60015f805160206156bc83398151915255565b5f8181525f8051602061569c8339815191526020526040808220815160e0810190925280545f8051602061565c83398151915293929190829060ff166003811115612d1157612d116148d2565b6003811115612d2257612d226148d2565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612dbf7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612dce9190615198565b6001600160401b0316421015612e025760405163fb6ce63f60e01b81526001600160401b034216600482015260240161063c565b5f848152600684016020908152604080832080546001600160a81b03191681556001810184905560020183905560078601909152812080549082905590808215612ebd575f84815260058701602052604090205461271090612e6f90600160a01b900461ffff1685614e96565b612e799190615063565b915081866008015f8681526020019081526020015f205f828254612e9d9190614e61565b90915550612ead9050828461528b565b9050612ebd856020015182612c40565b612ed28560200151610fd887606001516112d3565b6040805182815260208101849052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d02545f905f8051602061565c83398151915290600160401b900461ffff9081169086161080612f6c575061271061ffff8616115b15612f9057604051635f12e6c360e11b815261ffff8616600482015260240161063c565b60028101546001600160401b039081169085161015612fcc576040516202a06d60e11b81526001600160401b038516600482015260240161063c565b8054831080612fde5750806001015483115b15612fff5760405163222d164360e21b81526004810184905260240161063c565b825f61300a82610ed5565b90505f61301789836139d2565b5f818152600595909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b61309b613ef7565b610ff881613f42565b5f5f8051602061565c833981519152816130bd84610ed5565b90505f6130c987611d38565b90506130d487612349565b6130f4576040516330efa98b60e01b81526004810188905260240161063c565b600281516005811115613109576131096148d2565b1461312a57805160405163170cc93360e21b815261063c9190600401614a64565b5f82826080015161313b9190615198565b905083600201600a9054906101000a90046001600160401b03168260400151613164919061529e565b6001600160401b0316816001600160401b031611156131a157604051636d51fe0560e11b81526001600160401b038216600482015260240161063c565b5f806131ad8a846132e7565b915091505f8a836040516020016131db92919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260068b019093529120805491925060019160ff1916828002179055505f8181526006880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b5f8281525f805160206156dc833981519152602052604081206002015481905f8051602061567c83398151915290600160801b90046001600160401b031661332f8582613fb6565b5f613339876141d9565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af41580156133e2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526134099190810190614b75565b6040518263ffffffff1660e01b81526004016134259190614ba6565b6020604051808303815f875af1158015613441573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134659190614bb8565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f805f8051602061565c83398151915290505f6134de8460400151611d38565b90505f6003825160058111156134f6576134f66148d2565b14806135145750600482516005811115613512576135126148d2565b145b15613524575060c0810151613561565b600282516005811115613539576135396148d2565b03613545575042613561565b815160405163170cc93360e21b815261063c9190600401614a64565b84608001516001600160401b0316816001600160401b03161161358857505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f906135ad906112d3565b60a085015160808901516040808b01515f90815260058a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa15801561362e573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906136529190614bb8565b95945050505050565b6136636146cb565b5f8281525f805160206156dc8339815191526020526040808220815160e0810190925280545f8051602061567c83398151915293929190829060ff1660058111156136b0576136b06148d2565b60058111156136c1576136c16148d2565b81526020016001820180546136d590614a32565b80601f016020809104026020016040519081016040528092919081815260200182805461370190614a32565b801561374c5780601f106137235761010080835404028352916020019161374c565b820191905f5260205f20905b81548152906001019060200180831161372f57829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a090910152909150815160058111156137ba576137ba6148d2565b146137ed575f8481526007830160205260409081902054905163170cc93360e21b815261063c9160ff1690600401614a64565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff19166001836005811115613831576138316148d2565b02179055506020820151600182019061384a9082614d92565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f6138e885826132e7565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b804710156139625760405163cd78605960e01b815230600482015260240161063c565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146139ab576040519150601f19603f3d011682016040523d82523d5f602084013e6139b0565b606091505b505090508061064557604051630a12f52160e11b815260040160405180910390fd5b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff16613a1657604051637fab81e560e01b815260040160405180910390fd5b5f8051602061567c83398151915242613a35606086016040870161482e565b6001600160401b0316111580613a6f5750613a536202a30042614e61565b613a63606086016040870161482e565b6001600160401b031610155b15613aa957613a84606085016040860161482e565b604051635879da1360e11b81526001600160401b03909116600482015260240161063c565b613abe613ab960608601866152c9565b61424e565b613ace613ab960808601866152c9565b6030613add60208601866152dd565b905014613b0f57613af160208501856152dd565b6040516326475b2f60e11b815261063c925060040190815260200190565b613b1984806152dd565b90505f03613b4657613b2b84806152dd565b604051633e08a12560e11b815260040161063c92919061531f565b5f60088201613b5586806152dd565b604051613b63929190615189565b90815260200160405180910390205414613b9c57613b8184806152dd565b60405163a41f772f60e01b815260040161063c92919061531f565b613ba6835f613fb6565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613be38a806152dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613c2b908b018b6152dd565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613c7460608b0160408c0161482e565b6001600160401b03168152602001613c8f60608b018b6152c9565b613c9890615332565b8152602001613caa60808b018b6152c9565b613cb390615332565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613ce19190615454565b5f60405180830381865af4158015613cfb573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613d22919081019061550b565b5f82815260068601602052604090209193509150613d408282614d92565b508160088401613d5088806152dd565b604051613d5e929190615189565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613d9a908590600401614ba6565b6020604051808303815f875af1158015613db6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613dda9190614bb8565b5f8481526007860160205260409020805460ff191660011790559050613e0087806152dd565b5f858152600787016020526040902060010191613e1e91908361554e565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613e7d88806152dd565b604051613e8b929190615189565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613ec9919061482e565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613f4057604051631afcd79f60e31b815260040160405180910390fd5b565b613f4a613ef7565b613f53816143b7565b613f5b6143d0565b610ff860608201356080830135613f7860c0850160a0860161482e565b613f8860e0860160c08701615607565b613f99610100870160e08801615620565b610100870135613fb161014089016101208a01614be3565b6143e0565b5f8051602061567c8339815191525f6001600160401b038084169085161115613fea57613fe383856151b8565b9050613ff7565b613ff484846151b8565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b0316606082015242911580614059575060018401548151614055916001600160401b031690614e61565b8210155b1561407f576001600160401b03831660608201528181526040810151602082015261409e565b82816060018181516140919190615198565b6001600160401b03169052505b60608101516140ae90606461529e565b602082015160018601546001600160401b0392909216916140d99190600160401b900460ff16614e96565b101561410957606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161063c565b856001600160401b0316816040018181516141249190614e61565b9052506040810180516001600160401b038716919061414490839061528b565b9052506001840154604082015160649161416991600160401b90910460ff1690614e96565b1015614190578060400151604051635943317f60e01b815260040161063c91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f805160206156dc8339815191526020526040812060020180545f8051602061567c833981519152919060089061422390600160401b90046001600160401b0316615640565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b61425b6020820182614801565b63ffffffff1615801561427b57506142766020820182614bfe565b151590505b156142c25761428d6020820182614801565b61429a6020830183614bfe565b60405163c08a0f1d60e01b815263ffffffff909316600484015260248301525060440161063c565b6142cf6020820182614bfe565b90506142de6020830183614801565b63ffffffff1611156142f75761428d6020820182614801565b60015b6143076020830183614bfe565b905081101561158a5761431d6020830183614bfe565b61432860018461528b565b81811061433757614337614c43565b905060200201602081019061434c9190614be3565b6001600160a01b03166143626020840184614bfe565b8381811061437257614372614c43565b90506020020160208101906143879190614be3565b6001600160a01b031610156143af57604051630dbc8d5f60e31b815260040160405180910390fd5b6001016142fa565b6143bf613ef7565b6143c761459c565b610ff8816145a4565b6143d8613ef7565b613f4061468c565b6143e8613ef7565b5f8051602061565c83398151915261ffff8516158061440c575061271061ffff8616115b1561443057604051635f12e6c360e11b815261ffff8616600482015260240161063c565b868811156144545760405163222d164360e21b81526004810189905260240161063c565b60ff841615806144675750600a60ff8516115b1561448a5760405163170db35960e31b815260ff8516600482015260240161063c565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316866001600160401b031610156144f1576040516202a06d60e11b81526001600160401b038716600482015260240161063c565b825f036145115760405163a733007160e01b815260040160405180910390fd5b96875560018701959095556002860180546001600160401b039590951669ffffffffffffffffffff1990951694909417600160401b61ffff94909416939093029290921767ffffffffffffffff60501b191660ff91909116600160501b02179091556003830155600490910180546001600160a01b0319166001600160a01b03909216919091179055565b613f40613ef7565b6145ac613ef7565b80355f8051602061567c83398151915290815560146145d16060840160408501615620565b60ff1611806145f057506145eb6060830160408401615620565b60ff16155b15614624576146056060830160408401615620565b604051634a59bbff60e11b815260ff909116600482015260240161063c565b6146346060830160408401615620565b60018201805460ff92909216600160401b0260ff60401b19909216919091179055614665604083016020840161482e565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612cb1613ef7565b5080546146a090614a32565b5f825580601f106146af575050565b601f0160209004905f5260205f2090810190610ff89190614708565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b8082111561471c575f8155600101614709565b5090565b8015158114610ff8575f80fd5b803563ffffffff81168114611d33575f80fd5b5f805f60608486031215614752575f80fd5b83359250602084013561476481614720565b91506147726040850161472d565b90509250925092565b5f6020828403121561478b575f80fd5b5035919050565b5f80604083850312156147a3575f80fd5b82356001600160401b038111156147b8575f80fd5b8301608081860312156147c9575f80fd5b91506147d76020840161472d565b90509250929050565b5f80604083850312156147f1575f80fd5b823591506147d76020840161472d565b5f60208284031215614811575f80fd5b61187b8261472d565b6001600160401b0381168114610ff8575f80fd5b5f6020828403121561483e575f80fd5b813561187b8161481a565b803561ffff81168114611d33575f80fd5b5f805f6060848603121561486c575f80fd5b83356001600160401b03811115614881575f80fd5b840160a08187031215614892575f80fd5b92506148a060208501614849565b915060408401356148b08161481a565b809150509250925092565b5f61014082840312156148cc575f80fd5b50919050565b634e487b7160e01b5f52602160045260245ffd5b600681106148f6576148f66148d2565b9052565b5f5b838110156149145781810151838201526020016148fc565b50505f910152565b5f81518084526149338160208601602086016148fa565b601f01601f19169290920160200192915050565b602081526149596020820183516148e6565b5f602083015160e0604084015261497461010084018261491c565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f80602083850312156149d8575f80fd5b82356001600160401b03808211156149ee575f80fd5b818501915085601f830112614a01575f80fd5b813581811115614a0f575f80fd5b866020828501011115614a20575f80fd5b60209290920196919550909350505050565b600181811c90821680614a4657607f821691505b6020821081036148cc57634e487b7160e01b5f52602260045260245ffd5b60208101610f2982846148e6565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614aa857614aa8614a72565b60405290565b604080519081016001600160401b0381118282101715614aa857614aa8614a72565b604051601f8201601f191681016001600160401b0381118282101715614af857614af8614a72565b604052919050565b5f6001600160401b03821115614b1857614b18614a72565b50601f01601f191660200190565b5f82601f830112614b35575f80fd5b8151614b48614b4382614b00565b614ad0565b818152846020838601011115614b5c575f80fd5b614b6d8260208301602087016148fa565b949350505050565b5f60208284031215614b85575f80fd5b81516001600160401b03811115614b9a575f80fd5b614b6d84828501614b26565b602081525f61187b602083018461491c565b5f60208284031215614bc8575f80fd5b5051919050565b6001600160a01b0381168114610ff8575f80fd5b5f60208284031215614bf3575f80fd5b813561187b81614bcf565b5f808335601e19843603018112614c13575f80fd5b8301803591506001600160401b03821115614c2c575f80fd5b6020019150600581901b36038213156134b7575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614c6b575f80fd5b9190910192915050565b5f82601f830112614c84575f80fd5b8135614c92614b4382614b00565b818152846020838601011115614ca6575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614cd2575f80fd5b614cda614a86565b82356001600160401b0380821115614cf0575f80fd5b614cfc36838701614c75565b83526020850135915080821115614d11575f80fd5b50614d1e36828601614c75565b6020830152506040830135614d328161481a565b604082015292915050565b5f8251614c6b8184602087016148fa565b601f82111561064557805f5260205f20601f840160051c81016020851015614d735750805b601f840160051c820191505b81811015611ae6575f8155600101614d7f565b81516001600160401b03811115614dab57614dab614a72565b614dbf81614db98454614a32565b84614d4e565b602080601f831160018114614df2575f8415614ddb5750858301515b5f19600386901b1c1916600185901b17855561112a565b5f85815260208120601f198616915b82811015614e2057888601518255948401946001909101908401614e01565b5085821015614e3d57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610f2957610f29614e4d565b5f63ffffffff808316818103614e8c57614e8c614e4d565b6001019392505050565b8082028115828204841417610f2957610f29614e4d565b5f808335601e19843603018112614ec2575f80fd5b83016020810192503590506001600160401b03811115614ee0575f80fd5b8036038213156134b7575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b87811015614fcb57848303601f19018952813536889003605e19018112614f52575f80fd5b87016060614f608280614ead565b828752614f708388018284614eee565b92505050614f8086830183614ead565b86830388880152614f92838284614eee565b925050506040808301359250614fa78361481a565b6001600160401b039290921694909101939093529783019790830190600101614f2d565b5090979650505050505050565b6020815281356020820152602082013560408201525f6040830135614ffc81614bcf565b6001600160a01b031660608381019190915283013536849003601e19018112615023575f80fd5b83016020810190356001600160401b0381111561503e575f80fd5b8060051b360382131561504f575f80fd5b60808085015261365260a085018284614f16565b5f8261507d57634e487b7160e01b5f52601260045260245ffd5b500490565b6020810160048310615096576150966148d2565b91905290565b5f805f606084860312156150ae575f80fd5b8351925060208401516150c08161481a565b60408501519092506148b08161481a565b5f80604083850312156150e2575f80fd5b8251915060208301516150f481614720565b809150509250929050565b5f60208083525f845461511181614a32565b806020870152604060018084165f8114615132576001811461514e5761517b565b60ff19851660408a0152604084151560051b8a0101955061517b565b895f5260205f205f5b858110156151725781548b8201860152908301908801615157565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b0381811683821601908082111561234257612342614e4d565b6001600160401b0382811682821603908082111561234257612342614e4d565b5f80604083850312156151e9575f80fd5b82516001600160401b03808211156151ff575f80fd5b9084019060608287031215615212575f80fd5b61521a614a86565b82518152602083015161522c81614bcf565b6020820152604083015182811115615242575f80fd5b61524e88828601614b26565b60408301525080945050505060208301516150f481614720565b5f8060408385031215615279575f80fd5b8251915060208301516150f48161481a565b81810381811115610f2957610f29614e4d565b6001600160401b038181168382160280821691908281146152c1576152c1614e4d565b505092915050565b5f8235603e19833603018112614c6b575f80fd5b5f808335601e198436030181126152f2575f80fd5b8301803591506001600160401b0382111561530b575f80fd5b6020019150368190038213156134b7575f80fd5b602081525f614b6d602083018486614eee565b5f60408236031215615342575f80fd5b61534a614aae565b6153538361472d565b81526020808401356001600160401b038082111561536f575f80fd5b9085019036601f830112615381575f80fd5b81358181111561539357615393614a72565b8060051b91506153a4848301614ad0565b81815291830184019184810190368411156153bd575f80fd5b938501935b838510156153e757843592506153d783614bcf565b82825293850193908501906153c2565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b8083101561265f5784516001600160a01b0316825293830193600192909201919083019061542b565b60208152815160208201525f602083015160e0604084015261547a61010084018261491c565b90506040840151601f1980858403016060860152615498838361491c565b92506001600160401b03606087015116608086015260808601519150808584030160a08601526154c883836153f9565b925060a08601519150808584030160c0860152506154e682826153f9565b91505060c084015161550360e08501826001600160401b03169052565b509392505050565b5f806040838503121561551c575f80fd5b8251915060208301516001600160401b03811115615538575f80fd5b61554485828601614b26565b9150509250929050565b6001600160401b0383111561556557615565614a72565b615579836155738354614a32565b83614d4e565b5f601f8411600181146155aa575f85156155935750838201355b5f19600387901b1c1916600186901b178355611ae6565b5f83815260208120601f198716915b828110156155d957868501358255602094850194600190920191016155b9565b50868210156155f5575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f60208284031215615617575f80fd5b61187b82614849565b5f60208284031215615630575f80fd5b813560ff8116811461187b575f80fd5b5f6001600160401b03808316818103614e8c57614e8c614e4d56fe4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb004317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d069b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a26469706673582212205feacdf9b91fa3810cab46ea0fd6546fcbfdada3a39a5afb8eb010226337b95d64736f6c63430008190033", + Bin: "0x608060405234801561000f575f80fd5b506040516157ec3803806157ec83398101604081905261002e91610107565b60018160018111156100425761004261012c565b0361004f5761004f610055565b50610140565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100a55760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101045780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f60208284031215610117575f80fd5b815160028110610125575f80fd5b9392505050565b634e487b7160e01b5f52602160045260245ffd5b61569f8061014d5f395ff3fe6080604052600436106101f1575f3560e01c806380dd672f11610108578063ba3a4b971161009d578063c599e24f1161006d578063c599e24f146105a0578063c974d1b6146105b3578063d5f20ff6146105c7578063df93d8de146105f3578063fd7ac5e714610609575f80fd5b8063ba3a4b9714610523578063bc5fbfec14610542578063bee0a03f14610562578063c257a0f514610581575f80fd5b8063a9778a7a116100d8578063a9778a7a14610326578063af2f5feb146104c3578063afb98096146104d6578063b771b3bc14610509575f80fd5b806380dd672f146104525780638280a25a1461047157806393e2459814610485578063a3a65e48146104a4575f80fd5b806335455ded1161018957806360ad77841161015957806360ad7784146103b557806362065856146103d457806366435abf14610401578063732214f81461042057806376f7862114610433575f80fd5b806335455ded146103265780633a1cfff61461034e578063467ef06f1461036d57806360305d621461038c575f80fd5b806320d91b7a116101c457806320d91b7a1461027f57806325e1c7761461029e5780632e2194d8146102bd578063329c3e12146102f4575f80fd5b80630118acc4146101f55780630322ed9814610216578063151d30d1146102355780631ec4472414610260575b5f80fd5b348015610200575f80fd5b5061021461020f3660046146ee565b610628565b005b348015610221575f80fd5b50610214610230366004614729565b61065d565b348015610240575f80fd5b50610249600a81565b60405160ff90911681526020015b60405180910390f35b34801561026b575f80fd5b5061021461027a3660046146ee565b6108e4565b34801561028a575f80fd5b50610214610299366004614740565b6108ef565b3480156102a9575f80fd5b506102146102b836600461478e565b610e74565b3480156102c8575f80fd5b506102dc6102d7366004614729565b610ee8565b6040516001600160401b039091168152602001610257565b3480156102ff575f80fd5b5061030e6001600160991b0181565b6040516001600160a01b039091168152602001610257565b348015610331575f80fd5b5061033b61271081565b60405161ffff9091168152602001610257565b348015610359575f80fd5b506102146103683660046146ee565b610f3c565b348015610378575f80fd5b506102146103873660046147af565b610f47565b348015610397575f80fd5b506103a0601481565b60405163ffffffff9091168152602001610257565b3480156103c0575f80fd5b506102146103cf36600461478e565b610fef565b3480156103df575f80fd5b506103f36103ee3660046147dc565b6112bc565b604051908152602001610257565b34801561040c575f80fd5b506102dc61041b366004614729565b6112dc565b34801561042b575f80fd5b506103f35f81565b34801561043e575f80fd5b5061021461044d3660046146ee565b6112f0565b34801561045d575f80fd5b5061021461046c36600461478e565b61131b565b34801561047c575f80fd5b50610249603081565b348015610490575f80fd5b5061021461049f366004614729565b611555565b3480156104af575f80fd5b506102146104be3660046147af565b61160a565b6103f36104d1366004614808565b6117ff565b3480156104e1575f80fd5b506103f37f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0081565b348015610514575f80fd5b5061030e6005600160991b0181565b34801561052e575f80fd5b5061021461053d366004614729565b611833565b34801561054d575f80fd5b506103f35f8051602061560a83398151915281565b34801561056d575f80fd5b5061021461057c366004614729565b611a93565b34801561058c575f80fd5b5061021461059b366004614869565b611bd0565b6103f36105ae366004614729565b611cad565b3480156105be575f80fd5b50610249601481565b3480156105d2575f80fd5b506105e66105e1366004614729565b611cde565b60405161025791906148f5565b3480156105fe575f80fd5b506102dc6202a30081565b348015610614575f80fd5b506103f3610623366004614975565b611e2d565b610633838383611e88565b61065857604051631036cf9160e11b8152600481018490526024015b60405180910390fd5b505050565b5f8181525f8051602061564a8339815191526020526040808220815160e0810190925280545f8051602061560a83398151915293929190829060ff1660058111156106aa576106aa614880565b60058111156106bb576106bb614880565b81526020016001820180546106cf906149e0565b80601f01602080910402602001604051908101604052809291908181526020018280546106fb906149e0565b80156107465780601f1061071d57610100808354040283529160200191610746565b820191905f5260205f20905b81548152906001019060200180831161072957829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a090910152909150815160058111156107b1576107b1614880565b146107e4575f8381526007830160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614a12565b606081015160405163854a893f60e01b8152600481018590526001600160401b0390911660248201525f60448201526005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561085b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526108829190810190614b23565b6040518263ffffffff1660e01b815260040161089e9190614b54565b6020604051808303815f875af11580156108ba573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108de9190614b66565b50505050565b6108de838383611e88565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f8051602061560a8339815191529060ff161561094157604051637fab81e560e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa158015610984573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109a89190614b66565b8360200135146109d1576040516372b0a7e760e11b81526020840135600482015260240161064f565b306109e26060850160408601614b91565b6001600160a01b031614610a2557610a006060840160408501614b91565b604051632f88120d60e21b81526001600160a01b03909116600482015260240161064f565b5f610a336060850185614bac565b905090505f805b828163ffffffff161015610c9a575f610a566060880188614bac565b8363ffffffff16818110610a6c57610a6c614bf1565b9050602002810190610a7e9190614c05565b610a8790614c70565b80516040519192505f916008880191610a9f91614ceb565b90815260200160405180910390205414610acf57805160405163a41f772f60e01b815261064f9190600401614b54565b5f6002885f013584604051602001610afe92919091825260e01b6001600160e01b031916602082015260240190565b60408051601f1981840301815290829052610b1891614ceb565b602060405180830381855afa158015610b33573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610b569190614b66565b90508086600801835f0151604051610b6e9190614ceb565b90815260408051918290036020908101909220929092555f8381526007890190915220805460ff191660021781558251600190910190610bae9082614d40565b50604080830180515f84815260078a01602052929092206002810180549251426001600160401b03908116600160c01b026001600160c01b03928216600160801b81026001600160c01b03199097169290971691909117949094171692909217909155600301805467ffffffffffffffff19169055610c2d9085614e0f565b8251604051919550610c3e91614ceb565b60408051918290038220908401516001600160401b031682529082907f9d47fef9da077661546e646d61830bfcbda90506c2e5eed38195e82c4eb1cbdf9060200160405180910390a3505080610c9390614e22565b9050610a3a565b50600483018190556001830154606490610cbe90600160401b900460ff1683614e44565b1015610ce057604051635943317f60e01b81526004810182905260240161064f565b5f73__$fd0c147b4031eef6079b0498cbafa865f0$__634d847884610d04876121ce565b604001516040518263ffffffff1660e01b8152600401610d249190614b54565b602060405180830381865af4158015610d3f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d639190614b66565b90505f73__$fd0c147b4031eef6079b0498cbafa865f0$__6387418b8e886040518263ffffffff1660e01b8152600401610d9d9190614f86565b5f60405180830381865af4158015610db7573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dde9190810190614b23565b90505f600282604051610df19190614ceb565b602060405180830381855afa158015610e0c573d5f803e3d5ffd5b5050506040513d601f19601f82011682018060405250810190610e2f9190614b66565b9050828114610e5b5760405163baaea89d60e01b8152600481018290526024810184905260440161064f565b5050506009909201805460ff1916600117905550505050565b610e7d826122e4565b610e9d576040516330efa98b60e01b81526004810183905260240161064f565b5f610ea783611cde565b5190506002816005811115610ebe57610ebe614880565b14610ede578060405163170cc93360e21b815260040161064f9190614a12565b6108de838361230d565b5f80610ef26125d3565b60030154610f009084615011565b9050801580610f1557506001600160401b0381115b15610f365760405163222d164360e21b81526004810184905260240161064f565b92915050565b6108de8383836125f7565b610f4f6127e0565b5f610f586125d3565b90505f80610f6584612817565b91509150610f72826122e4565b610f7e57505050610fd6565b5f8281526005840160205260409020546001600160a01b0316600482516005811115610fac57610fac614880565b03610fbb57610fbb8184612bca565b610fd181610fcc84604001516112bc565b612bf4565b505050505b610fec60015f8051602061562a83398151915255565b50565b5f610ff86125d3565b5f848152600682016020526040808220815160e0810190925280549394509192909190829060ff16600381111561103157611031614880565b600381111561104257611042614880565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f6110b882611cde565b90506001835160038111156110cf576110cf614880565b146110f0578251604051633b0d540d60e21b815261064f9190600401615030565b60048151600581111561110557611105614880565b0361111b5761111386612c1a565b505050505050565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f611140896121ce565b604001516040518263ffffffff1660e01b81526004016111609190614b54565b606060405180830381865af415801561117b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061119f919061504a565b50915091508184146111cc57846040015160405163089938b360e11b815260040161064f91815260200190565b806001600160401b031683606001516001600160401b031610806112055750806001600160401b03168560a001516001600160401b0316115b1561122e57604051632e19bc2d60e11b81526001600160401b038216600482015260240161064f565b5f888152600687016020908152604091829020805460ff1916600290811782550180546001600160401b034216600160401b81026fffffffffffffffff00000000000000001990921691909117909155915191825285918a917f047059b465069b8b751836b41f9f1d83daff583d2238cc7fbb461437ec23a4f6910160405180910390a35050505050505050565b5f6112c56125d3565b60030154610f36906001600160401b038416614e44565b5f6112e682611cde565b6080015192915050565b6112fb8383836125f7565b61065857604051635bff683f60e11b81526004810184905260240161064f565b6113236127e0565b5f61132c6125d3565b5f848152600682016020526040808220815160e0810190925280549394509192909190829060ff16600381111561136557611365614880565b600381111561137657611376614880565b8152815461010090046001600160a01b03166020820152600182015460408201526002909101546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c09091015290506003815160038111156113ef576113ef614880565b14611410578051604051633b0d540d60e21b815261064f9190600401615030565b600461141f8260400151611cde565b51600581111561143157611431614880565b14611530575f611440846121ce565b90505f8073__$fd0c147b4031eef6079b0498cbafa865f0$__6350782b0f84604001516040518263ffffffff1660e01b815260040161147f9190614b54565b606060405180830381865af415801561149a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114be919061504a565b5091509150818460400151146114ea5760405163089938b360e11b81526004810183905260240161064f565b806001600160401b03168460c001516001600160401b0316111561152c57604051632e19bc2d60e11b81526001600160401b038216600482015260240161064f565b5050505b61153984612c1a565b505061155160015f8051602061562a83398151915255565b5050565b5f61155e6125d3565b90505f61156a83611cde565b519050600481600581111561158157611581614880565b146115a1578060405163170cc93360e21b815260040161064f9190614a12565b5f8381526005830160205260409020546001600160a01b031633146115e757335b604051636e2ccd7560e11b81526001600160a01b03909116600482015260240161064f565b5f838152600583016020526040902054610658906001600160a01b031684612bca565b5f8051602061560a8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f61163d866121ce565b604001516040518263ffffffff1660e01b815260040161165d9190614b54565b6040805180830381865af4158015611677573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061169b919061507f565b91509150806116c157604051632d07135360e01b8152811515600482015260240161064f565b5f828152600684016020526040902080546116db906149e0565b90505f036116ff5760405163089938b360e11b81526004810183905260240161064f565b60015f83815260078501602052604090205460ff16600581111561172557611725614880565b14611758575f8281526007840160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614a12565b5f828152600684016020526040812061177091614642565b5f828152600784016020908152604091829020805460ff1916600290811782550180546001600160401b0342818116600160c01b026001600160c01b0390931692909217928390558451600160801b9093041682529181019190915283917ff8fd1c90fb9cfa2ca2358fdf5806b086ad43315d92b221c929efc7f105ce7568910160405180910390a250505050565b5f6118086127e0565b61181484848434612de8565b905061182c60015f8051602061562a83398151915255565b9392505050565b5f61183c6125d3565b5f838152600682016020526040808220815160e0810190925280549394509192909190829060ff16600381111561187557611875614880565b600381111561188657611886614880565b8152815461010090046001600160a01b0316602082015260018083015460408301526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152909150815160038111156118ff576118ff614880565b14158015611920575060038151600381111561191d5761191d614880565b14155b15611941578051604051633b0d540d60e21b815261064f9190600401615030565b5f61194f8260400151611cde565b905080606001516001600160401b03165f03611981576040516339b894f960e21b81526004810185905260240161064f565b60408083015160608301516080840151925163854a893f60e01b81526005600160991b019363ee5b48eb9373__$fd0c147b4031eef6079b0498cbafa865f0$__9363854a893f936119ef93906004019283526001600160401b03918216602084015216604082015260600190565b5f60405180830381865af4158015611a09573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611a309190810190614b23565b6040518263ffffffff1660e01b8152600401611a4c9190614b54565b6020604051808303815f875af1158015611a68573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a8c9190614b66565b5050505050565b5f8181527fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb066020526040902080545f8051602061560a8339815191529190611ada906149e0565b90505f03611afe5760405163089938b360e11b81526004810183905260240161064f565b60015f83815260078301602052604090205460ff166005811115611b2457611b24614880565b14611b57575f8281526007820160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614a12565b5f82815260068201602052604090819020905163ee5b48eb60e01b81526005600160991b019163ee5b48eb91611b9091906004016150ad565b6020604051808303815f875af1158015611bac573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106589190614b66565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff1680611c19575080546001600160401b03808416911610155b15611c375760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155611c6183612f42565b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050565b5f611cb66127e0565b611cc1823334612f53565b9050611cd960015f8051602061562a83398151915255565b919050565b611ce6614679565b5f8281525f8051602061564a833981519152602052604090819020815160e0810190925280545f8051602061560a833981519152929190829060ff166005811115611d3357611d33614880565b6005811115611d4457611d44614880565b8152602001600182018054611d58906149e0565b80601f0160208091040260200160405190810160405280929190818152602001828054611d84906149e0565b8015611dcf5780601f10611da657610100808354040283529160200191611dcf565b820191905f5260205f20905b815481529060010190602001808311611db257829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b9091048116608083015260039092015490911660a0909101529392505050565b6040515f905f8051602061560a833981519152907fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb0890611e709086908690615137565b90815260200160405180910390205491505092915050565b5f80611e926125d3565b5f868152600682016020526040808220815160e0810190925280549394509192909190829060ff166003811115611ecb57611ecb614880565b6003811115611edc57611edc614880565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c0909101528101519091505f611f5282611cde565b9050600283516003811115611f6957611f69614880565b14611f8a578251604051633b0d540d60e21b815261064f9190600401615030565b60208301516001600160a01b03163314612026575f8281526005850160205260409020546001600160a01b03163314611fc357336115c2565b5f82815260058501602052604090205460a0820151611ff291600160b01b90046001600160401b031690615146565b6001600160401b03164210156120265760405163fb6ce63f60e01b81526001600160401b034216600482015260240161064f565b60028151600581111561203b5761203b614880565b03612169576002840154608084015161205d916001600160401b031690615146565b6001600160401b03164210156120915760405163fb6ce63f60e01b81526001600160401b034216600482015260240161064f565b86156120a3576120a1828761230d565b505b5f8881526006850160205260409020805460ff19166003179055606083015160808201516120dc9184916120d79190615166565b613193565b505f898152600686016020526040812060020180546001600160401b03909316600160c01b026001600160c01b039093169290921790915561211d8461336a565b5f8a81526007870160205260408082208390555191925084918b917f366d336c0ab380dc799f095a6f82a26326585c52909cc698b09ba4540709ed5791a31515945061182c9350505050565b60048151600581111561217e5761217e614880565b036121b25761218c8361336a565b5f8981526007860160205260409020556121a588612c1a565b600194505050505061182c565b805160405163170cc93360e21b815261064f9190600401614a12565b60408051606080820183525f8083526020830152918101919091526040516306f8253560e41b815263ffffffff831660048201525f9081906005600160991b0190636f825350906024015f60405180830381865afa158015612232573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526122599190810190615186565b915091508061227b57604051636b2f19e960e01b815260040160405180910390fd5b8151156122a1578151604051636ba589a560e01b8152600481019190915260240161064f565b60208201516001600160a01b0316156122dd576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161064f565b5092915050565b5f806122ee6125d3565b5f938452600501602052505060409020546001600160a01b0316151590565b6040516306f8253560e41b815263ffffffff821660048201525f90819081906005600160991b0190636f825350906024015f60405180830381865afa158015612358573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261237f9190810190615186565b91509150806123a157604051636b2f19e960e01b815260040160405180910390fd5b6005600160991b016001600160a01b0316634213cf786040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123e4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124089190614b66565b82511461242e578151604051636ba589a560e01b8152600481019190915260240161064f565b60208201516001600160a01b03161561246a576020820151604051624de75d60e31b81526001600160a01b03909116600482015260240161064f565b5f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63088c246385604001516040518263ffffffff1660e01b81526004016124a79190614b54565b6040805180830381865af41580156124c1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124e59190615216565b9150915081871461250c5760405163089938b360e11b81526004810188905260240161064f565b5f6125156125d3565b5f8981526005820160205260409020600101549091506001600160401b0390811690831611156125a9575f888152600582016020908152604091829020600101805467ffffffffffffffff19166001600160401b038616908117909155915191825289917fec44148e8ff271f2d0bacef1142154abacb0abb3a29eb3eb50e2ca97e86d0435910160405180910390a26125c8565b5f8881526005820160205260409020600101546001600160401b031691505b509695505050505050565b7f4317713f7ecbdddd4bc99e95d903adedaa883b2e7c2551610bd13e2c7e473d0090565b5f806126016125d3565b90505f61260d86613501565b9050612618866122e4565b6126275760019250505061182c565b5f8681526005830160205260409020546001600160a01b0316331461264c57336115c2565b5f86815260058301602052604090205460a082015161267b91600160b01b90046001600160401b031690615146565b6001600160401b03168160c001516001600160401b031610156126c25760c081015160405163fb6ce63f60e01b81526001600160401b03909116600482015260240161064f565b5f85156126da576126d3878661230d565b90506126f8565b505f8681526005830160205260409020600101546001600160401b03165b600483015460408301515f916001600160a01b031690634f22429f9061271d906112bc565b60a086015160c087015160405160e085901b6001600160e01b031916815260048101939093526001600160401b03918216602484018190526044840152811660648301528516608482015260a401602060405180830381865afa158015612786573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127aa9190614b66565b905080846008015f8a81526020019081526020015f205f8282546127ce9190614e0f565b90915550501515979650505050505050565b5f8051602061562a83398151915280546001190161281157604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b5f612820614679565b5f8051602061560a8339815191525f8073__$fd0c147b4031eef6079b0498cbafa865f0$__63021de88f612853886121ce565b604001516040518263ffffffff1660e01b81526004016128739190614b54565b6040805180830381865af415801561288d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128b1919061507f565b9150915080156128d857604051632d07135360e01b8152811515600482015260240161064f565b5f828152600784016020526040808220815160e081019092528054829060ff16600581111561290957612909614880565b600581111561291a5761291a614880565b815260200160018201805461292e906149e0565b80601f016020809104026020016040519081016040528092919081815260200182805461295a906149e0565b80156129a55780601f1061297c576101008083540402835291602001916129a5565b820191905f5260205f20905b81548152906001019060200180831161298857829003601f168201915b505050918352505060028201546001600160401b038082166020840152600160401b820481166040840152600160801b820481166060840152600160c01b909104811660808301526003928301541660a09091015290915081516005811115612a1057612a10614880565b14158015612a315750600181516005811115612a2e57612a2e614880565b14155b15612a5257805160405163170cc93360e21b815261064f9190600401614a12565b600381516005811115612a6757612a67614880565b03612a755760048152612a7a565b600581525b836008018160200151604051612a909190614ceb565b90815260408051602092819003830190205f908190558581526007870190925290208151815483929190829060ff19166001836005811115612ad457612ad4614880565b021790555060208201516001820190612aed9082614d40565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff19169190921617905580516005811115612b9357612b93614880565b60405184907f1c08e59656f1a18dc2da76826cdc52805c43e897a17c50faefb8ab3c1526cc16905f90a39196919550909350505050565b5f612bd36125d3565b5f838152600882016020526040812080549190559091506108de84826137e5565b6115516001600160a01b03831682613843565b60015f8051602061562a83398151915255565b5f612c236125d3565b5f838152600682016020526040808220815160e0810190925280549394509192909190829060ff166003811115612c5c57612c5c614880565b6003811115612c6d57612c6d614880565b8152815461010090046001600160a01b0316602082015260018201546040808301919091526002909201546001600160401b038082166060840152600160401b820481166080840152600160801b8204811660a0840152600160c01b9091041660c090910152810151909150612d0a7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b031690565b8260800151612d199190615146565b6001600160401b0316421015612d4d5760405163fb6ce63f60e01b81526001600160401b034216600482015260240161064f565b5f8481526006840160209081526040822080546001600160a81b0319168155600181018390556002018290558301519080612d898388866138d6565b91509150612da28560200151610fcc87606001516112bc565b6040805183815260208101839052859189917f8ececf510070c320d9a55323ffabe350e294ae505fc0c509dc5736da6f5cc993910160405180910390a350505050505050565b5f80612df26125d3565b600281015490915061ffff600160401b90910481169086161080612e1b575061271061ffff8616115b15612e3f57604051635f12e6c360e11b815261ffff8616600482015260240161064f565b60028101546001600160401b039081169085161015612e7b576040516202a06d60e11b81526001600160401b038516600482015260240161064f565b8054831080612e8d5750806001015483115b15612eae5760405163222d164360e21b81526004810184905260240161064f565b825f612eb982610ee8565b90505f612ec68983613983565b5f818152600595909501602052604090942080546001600160b01b0319163317600160a01b61ffff9a909a16999099029890981767ffffffffffffffff60b01b1916600160b01b6001600160401b03989098169790970296909617875550506001909401805467ffffffffffffffff1916905550919392505050565b612f4a613ea8565b610fec81613ef3565b5f80612f5d6125d3565b90505f612f6984610ee8565b90505f612f7587611cde565b9050612f80876122e4565b612fa0576040516330efa98b60e01b81526004810188905260240161064f565b600281516005811115612fb557612fb5614880565b14612fd657805160405163170cc93360e21b815261064f9190600401614a12565b5f828260800151612fe79190615146565b905083600201600a9054906101000a90046001600160401b031682604001516130109190615239565b6001600160401b0316816001600160401b0316111561304d57604051636d51fe0560e11b81526001600160401b038216600482015260240161064f565b5f806130598a84613193565b915091505f8a8360405160200161308792919091825260c01b6001600160c01b031916602082015260280190565b60408051601f1981840301815291815281516020928301205f81815260068b019093529120805491925060019160ff1916828002179055505f8181526006880160209081526040918290208054610100600160a81b0319166101006001600160a01b038f16908102919091178255600182018f9055600290910180546001600160401b038b81166001600160c01b03199092168217600160801b8a8316908102919091176001600160c01b031690935585519283528916938201939093529283019190915260608201849052908c9083907fb0024b263bc3a0b728a6edea50a69efa841189f8d32ee8af9d1c2b1a1a2234269060800160405180910390a49a9950505050505050505050565b5f8281525f8051602061564a833981519152602052604081206002015481905f8051602061560a83398151915290600160801b90046001600160401b03166131db8582613f67565b5f6131e58761418a565b5f888152600785016020526040808220600201805467ffffffffffffffff60801b1916600160801b6001600160401b038c811691820292909217909255915163854a893f60e01b8152600481018c905291841660248301526044820152919250906005600160991b019063ee5b48eb9073__$fd0c147b4031eef6079b0498cbafa865f0$__9063854a893f906064015f60405180830381865af415801561328e573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526132b59190810190614b23565b6040518263ffffffff1660e01b81526004016132d19190614b54565b6020604051808303815f875af11580156132ed573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133119190614b66565b604080516001600160401b038a811682526020820184905282519394508516928b927f07de5ff35a674a8005e661f3333c907ca6333462808762d19dc7b3abb1a8c1df928290030190a3909450925050505b9250929050565b5f806133746125d3565b90505f6133848460400151611cde565b90505f60038251600581111561339c5761339c614880565b14806133ba57506004825160058111156133b8576133b8614880565b145b156133ca575060c0810151613407565b6002825160058111156133df576133df614880565b036133eb575042613407565b815160405163170cc93360e21b815261064f9190600401614a12565b84608001516001600160401b0316816001600160401b03161161342e57505f949350505050565b600483015460608601516001600160a01b0390911690634f22429f90613453906112bc565b60a085015160808901516040808b01515f90815260058a0160205281902060010154905160e086901b6001600160e01b031916815260048101949094526001600160401b0392831660248501529082166044840152818616606484015216608482015260a401602060405180830381865afa1580156134d4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134f89190614b66565b95945050505050565b613509614679565b5f8281525f8051602061564a8339815191526020526040808220815160e0810190925280545f8051602061560a83398151915293929190829060ff16600581111561355657613556614880565b600581111561356757613567614880565b815260200160018201805461357b906149e0565b80601f01602080910402602001604051908101604052809291908181526020018280546135a7906149e0565b80156135f25780601f106135c9576101008083540402835291602001916135f2565b820191905f5260205f20905b8154815290600101906020018083116135d557829003601f168201915b50505091835250506002828101546001600160401b038082166020850152600160401b820481166040850152600160801b820481166060850152600160c01b9091048116608084015260039093015490921660a0909101529091508151600581111561366057613660614880565b14613693575f8481526007830160205260409081902054905163170cc93360e21b815261064f9160ff1690600401614a12565b60038152426001600160401b031660c08201525f84815260078301602052604090208151815483929190829060ff191660018360058111156136d7576136d7614880565b0217905550602082015160018201906136f09082614d40565b5060408201516002820180546060850151608086015160a08701516001600160401b039586166001600160801b031990941693909317600160401b92861692909202919091176001600160801b0316600160801b918516919091026001600160c01b031617600160c01b9184169190910217905560c0909201516003909101805467ffffffffffffffff1916919092161790555f61378e8582613193565b6080840151604080516001600160401b03909216825242602083015291935083925087917f13d58394cf269d48bcf927959a29a5ffee7c9924dafff8927ecdf3c48ffa7c67910160405180910390a3509392505050565b6040516327ad555d60e11b81526001600160a01b0383166004820152602481018290526001600160991b0190634f5aaaba906044015f604051808303815f87803b158015613831575f80fd5b505af1158015611113573d5f803e3d5ffd5b804710156138665760405163cd78605960e01b815230600482015260240161064f565b5f826001600160a01b0316826040515f6040518083038185875af1925050503d805f81146138af576040519150601f19603f3d011682016040523d82523d5f602084013e6138b4565b606091505b505090508061065857604051630a12f52160e11b815260040160405180910390fd5b5f805f6138e16125d3565b5f86815260078201602052604081208054908290559192509081908015613975575f8781526005850160205260409020546127109061392b90600160a01b900461ffff1683614e44565b6139359190615011565b915081846008015f8981526020019081526020015f205f8282546139599190614e0f565b9091555061396990508282615264565b925061397589846137e5565b509097909650945050505050565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb09545f9060ff166139c757604051637fab81e560e01b815260040160405180910390fd5b5f8051602061560a833981519152426139e660608601604087016147dc565b6001600160401b0316111580613a205750613a046202a30042614e0f565b613a1460608601604087016147dc565b6001600160401b031610155b15613a5a57613a3560608501604086016147dc565b604051635879da1360e11b81526001600160401b03909116600482015260240161064f565b613a6f613a6a6060860186615277565b6141ff565b613a7f613a6a6080860186615277565b6030613a8e602086018661528b565b905014613ac057613aa2602085018561528b565b6040516326475b2f60e11b815261064f925060040190815260200190565b613aca848061528b565b90505f03613af757613adc848061528b565b604051633e08a12560e11b815260040161064f9291906152cd565b5f60088201613b06868061528b565b604051613b14929190615137565b90815260200160405180910390205414613b4d57613b32848061528b565b60405163a41f772f60e01b815260040161064f9291906152cd565b613b57835f613f67565b6040805160e08101909152815481525f90819073__$fd0c147b4031eef6079b0498cbafa865f0$__9063eb97ce519060208101613b948a8061528b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602090810190613bdc908b018b61528b565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505090825250602001613c2560608b0160408c016147dc565b6001600160401b03168152602001613c4060608b018b615277565b613c49906152e0565b8152602001613c5b60808b018b615277565b613c64906152e0565b8152602001886001600160401b03168152506040518263ffffffff1660e01b8152600401613c929190615402565b5f60405180830381865af4158015613cac573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052613cd391908101906154b9565b5f82815260068601602052604090209193509150613cf18282614d40565b508160088401613d01888061528b565b604051613d0f929190615137565b9081526040519081900360200181209190915563ee5b48eb60e01b81525f906005600160991b019063ee5b48eb90613d4b908590600401614b54565b6020604051808303815f875af1158015613d67573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d8b9190614b66565b5f8481526007860160205260409020805460ff191660011790559050613db1878061528b565b5f858152600787016020526040902060010191613dcf9190836154fc565b505f83815260078501602052604090206002810180546001600160c01b0319166001600160401b038916908117600160801b91909102176001600160c01b03169055600301805467ffffffffffffffff1916905580613e2e888061528b565b604051613e3c929190615137565b6040518091039020847fb77297e3befc691bfc864a81e241f83e2ef722b6e7becaa2ecec250c6d52b430898b6040016020810190613e7a91906147dc565b604080516001600160401b0393841681529290911660208301520160405180910390a4509095945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16613ef157604051631afcd79f60e31b815260040160405180910390fd5b565b613efb613ea8565b613f0481614368565b613f0c614381565b610fec60608201356080830135613f2960c0850160a086016147dc565b613f3960e0860160c087016155b5565b613f4a610100870160e088016155ce565b610100870135613f6261014089016101208a01614b91565b614391565b5f8051602061560a8339815191525f6001600160401b038084169085161115613f9b57613f948385615166565b9050613fa8565b613fa58484615166565b90505b6040805160808101825260028401548082526003850154602083015260048501549282019290925260058401546001600160401b031660608201524291158061400a575060018401548151614006916001600160401b031690614e0f565b8210155b15614030576001600160401b03831660608201528181526040810151602082015261404f565b82816060018181516140429190615146565b6001600160401b03169052505b606081015161405f906064615239565b602082015160018601546001600160401b03929092169161408a9190600160401b900460ff16614e44565b10156140ba57606081015160405163dfae880160e01b81526001600160401b03909116600482015260240161064f565b856001600160401b0316816040018181516140d59190614e0f565b9052506040810180516001600160401b03871691906140f5908390615264565b9052506001840154604082015160649161411a91600160401b90910460ff1690614e44565b1015614141578060400151604051635943317f60e01b815260040161064f91815260200190565b805160028501556020810151600385015560408101516004850155606001516005909301805467ffffffffffffffff19166001600160401b039094169390931790925550505050565b5f8181525f8051602061564a8339815191526020526040812060020180545f8051602061560a83398151915291906008906141d490600160401b90046001600160401b03166155ee565b91906101000a8154816001600160401b0302191690836001600160401b031602179055915050919050565b61420c60208201826147af565b63ffffffff1615801561422c57506142276020820182614bac565b151590505b156142735761423e60208201826147af565b61424b6020830183614bac565b60405163c08a0f1d60e01b815263ffffffff909316600484015260248301525060440161064f565b6142806020820182614bac565b905061428f60208301836147af565b63ffffffff1611156142a85761423e60208201826147af565b60015b6142b86020830183614bac565b9050811015611551576142ce6020830183614bac565b6142d9600184615264565b8181106142e8576142e8614bf1565b90506020020160208101906142fd9190614b91565b6001600160a01b03166143136020840184614bac565b8381811061432357614323614bf1565b90506020020160208101906143389190614b91565b6001600160a01b0316101561436057604051630dbc8d5f60e31b815260040160405180910390fd5b6001016142ab565b614370613ea8565b61437861454a565b610fec81614552565b614389613ea8565b613ef161463a565b614399613ea8565b5f6143a26125d3565b905061ffff851615806143ba575061271061ffff8616115b156143de57604051635f12e6c360e11b815261ffff8616600482015260240161064f565b868811156144025760405163222d164360e21b81526004810189905260240161064f565b60ff841615806144155750600a60ff8516115b156144385760405163170db35960e31b815260ff8516600482015260240161064f565b7fe92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb01546001600160401b03166001600160401b0316866001600160401b0316101561449f576040516202a06d60e11b81526001600160401b038716600482015260240161064f565b825f036144bf5760405163a733007160e01b815260040160405180910390fd5b96875560018701959095556002860180546001600160401b039590951669ffffffffffffffffffff1990951694909417600160401b61ffff94909416939093029290921767ffffffffffffffff60501b191660ff91909116600160501b02179091556003830155600490910180546001600160a01b0319166001600160a01b03909216919091179055565b613ef1613ea8565b61455a613ea8565b80355f8051602061560a833981519152908155601461457f60608401604085016155ce565b60ff16118061459e575061459960608301604084016155ce565b60ff16155b156145d2576145b360608301604084016155ce565b604051634a59bbff60e11b815260ff909116600482015260240161064f565b6145e260608301604084016155ce565b60018201805460ff92909216600160401b0260ff60401b1990921691909117905561461360408301602084016147dc565b600191909101805467ffffffffffffffff19166001600160401b0390921691909117905550565b612c07613ea8565b50805461464e906149e0565b5f825580601f1061465d575050565b601f0160209004905f5260205f2090810190610fec91906146b6565b6040805160e08101909152805f81526060602082018190525f604083018190529082018190526080820181905260a0820181905260c09091015290565b5b808211156146ca575f81556001016146b7565b5090565b8015158114610fec575f80fd5b803563ffffffff81168114611cd9575f80fd5b5f805f60608486031215614700575f80fd5b833592506020840135614712816146ce565b9150614720604085016146db565b90509250925092565b5f60208284031215614739575f80fd5b5035919050565b5f8060408385031215614751575f80fd5b82356001600160401b03811115614766575f80fd5b830160808186031215614777575f80fd5b9150614785602084016146db565b90509250929050565b5f806040838503121561479f575f80fd5b82359150614785602084016146db565b5f602082840312156147bf575f80fd5b61182c826146db565b6001600160401b0381168114610fec575f80fd5b5f602082840312156147ec575f80fd5b813561182c816147c8565b803561ffff81168114611cd9575f80fd5b5f805f6060848603121561481a575f80fd5b83356001600160401b0381111561482f575f80fd5b840160a08187031215614840575f80fd5b925061484e602085016147f7565b9150604084013561485e816147c8565b809150509250925092565b5f610140828403121561487a575f80fd5b50919050565b634e487b7160e01b5f52602160045260245ffd5b600681106148a4576148a4614880565b9052565b5f5b838110156148c25781810151838201526020016148aa565b50505f910152565b5f81518084526148e18160208601602086016148a8565b601f01601f19169290920160200192915050565b60208152614907602082018351614894565b5f602083015160e060408401526149226101008401826148ca565b905060408401516001600160401b0380821660608601528060608701511660808601528060808701511660a08601528060a08701511660c08601528060c08701511660e086015250508091505092915050565b5f8060208385031215614986575f80fd5b82356001600160401b038082111561499c575f80fd5b818501915085601f8301126149af575f80fd5b8135818111156149bd575f80fd5b8660208285010111156149ce575f80fd5b60209290920196919550909350505050565b600181811c908216806149f457607f821691505b60208210810361487a57634e487b7160e01b5f52602260045260245ffd5b60208101610f368284614894565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715614a5657614a56614a20565b60405290565b604080519081016001600160401b0381118282101715614a5657614a56614a20565b604051601f8201601f191681016001600160401b0381118282101715614aa657614aa6614a20565b604052919050565b5f6001600160401b03821115614ac657614ac6614a20565b50601f01601f191660200190565b5f82601f830112614ae3575f80fd5b8151614af6614af182614aae565b614a7e565b818152846020838601011115614b0a575f80fd5b614b1b8260208301602087016148a8565b949350505050565b5f60208284031215614b33575f80fd5b81516001600160401b03811115614b48575f80fd5b614b1b84828501614ad4565b602081525f61182c60208301846148ca565b5f60208284031215614b76575f80fd5b5051919050565b6001600160a01b0381168114610fec575f80fd5b5f60208284031215614ba1575f80fd5b813561182c81614b7d565b5f808335601e19843603018112614bc1575f80fd5b8301803591506001600160401b03821115614bda575f80fd5b6020019150600581901b3603821315613363575f80fd5b634e487b7160e01b5f52603260045260245ffd5b5f8235605e19833603018112614c19575f80fd5b9190910192915050565b5f82601f830112614c32575f80fd5b8135614c40614af182614aae565b818152846020838601011115614c54575f80fd5b816020850160208301375f918101602001919091529392505050565b5f60608236031215614c80575f80fd5b614c88614a34565b82356001600160401b0380821115614c9e575f80fd5b614caa36838701614c23565b83526020850135915080821115614cbf575f80fd5b50614ccc36828601614c23565b6020830152506040830135614ce0816147c8565b604082015292915050565b5f8251614c198184602087016148a8565b601f82111561065857805f5260205f20601f840160051c81016020851015614d215750805b601f840160051c820191505b81811015611a8c575f8155600101614d2d565b81516001600160401b03811115614d5957614d59614a20565b614d6d81614d6784546149e0565b84614cfc565b602080601f831160018114614da0575f8415614d895750858301515b5f19600386901b1c1916600185901b178555611113565b5f85815260208120601f198616915b82811015614dce57888601518255948401946001909101908401614daf565b5085821015614deb57878501515f19600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610f3657610f36614dfb565b5f63ffffffff808316818103614e3a57614e3a614dfb565b6001019392505050565b8082028115828204841417610f3657610f36614dfb565b5f808335601e19843603018112614e70575f80fd5b83016020810192503590506001600160401b03811115614e8e575f80fd5b803603821315613363575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b5f8383855260208086019550808560051b830101845f5b87811015614f7957848303601f19018952813536889003605e19018112614f00575f80fd5b87016060614f0e8280614e5b565b828752614f1e8388018284614e9c565b92505050614f2e86830183614e5b565b86830388880152614f40838284614e9c565b925050506040808301359250614f55836147c8565b6001600160401b039290921694909101939093529783019790830190600101614edb565b5090979650505050505050565b6020815281356020820152602082013560408201525f6040830135614faa81614b7d565b6001600160a01b031660608381019190915283013536849003601e19018112614fd1575f80fd5b83016020810190356001600160401b03811115614fec575f80fd5b8060051b3603821315614ffd575f80fd5b6080808501526134f860a085018284614ec4565b5f8261502b57634e487b7160e01b5f52601260045260245ffd5b500490565b602081016004831061504457615044614880565b91905290565b5f805f6060848603121561505c575f80fd5b83519250602084015161506e816147c8565b604085015190925061485e816147c8565b5f8060408385031215615090575f80fd5b8251915060208301516150a2816146ce565b809150509250929050565b5f60208083525f84546150bf816149e0565b806020870152604060018084165f81146150e057600181146150fc57615129565b60ff19851660408a0152604084151560051b8a01019550615129565b895f5260205f205f5b858110156151205781548b8201860152908301908801615105565b8a016040019650505b509398975050505050505050565b818382375f9101908152919050565b6001600160401b038181168382160190808211156122dd576122dd614dfb565b6001600160401b038281168282160390808211156122dd576122dd614dfb565b5f8060408385031215615197575f80fd5b82516001600160401b03808211156151ad575f80fd5b90840190606082870312156151c0575f80fd5b6151c8614a34565b8251815260208301516151da81614b7d565b60208201526040830151828111156151f0575f80fd5b6151fc88828601614ad4565b60408301525080945050505060208301516150a2816146ce565b5f8060408385031215615227575f80fd5b8251915060208301516150a2816147c8565b6001600160401b0381811683821602808216919082811461525c5761525c614dfb565b505092915050565b81810381811115610f3657610f36614dfb565b5f8235603e19833603018112614c19575f80fd5b5f808335601e198436030181126152a0575f80fd5b8301803591506001600160401b038211156152b9575f80fd5b602001915036819003821315613363575f80fd5b602081525f614b1b602083018486614e9c565b5f604082360312156152f0575f80fd5b6152f8614a5c565b615301836146db565b81526020808401356001600160401b038082111561531d575f80fd5b9085019036601f83011261532f575f80fd5b81358181111561534157615341614a20565b8060051b9150615352848301614a7e565b818152918301840191848101903684111561536b575f80fd5b938501935b83851015615395578435925061538583614b7d565b8282529385019390850190615370565b94860194909452509295945050505050565b5f6040830163ffffffff8351168452602080840151604060208701528281518085526060880191506020830194505f92505b808310156125c85784516001600160a01b031682529383019360019290920191908301906153d9565b60208152815160208201525f602083015160e060408401526154286101008401826148ca565b90506040840151601f198085840301606086015261544683836148ca565b92506001600160401b03606087015116608086015260808601519150808584030160a086015261547683836153a7565b925060a08601519150808584030160c08601525061549482826153a7565b91505060c08401516154b160e08501826001600160401b03169052565b509392505050565b5f80604083850312156154ca575f80fd5b8251915060208301516001600160401b038111156154e6575f80fd5b6154f285828601614ad4565b9150509250929050565b6001600160401b0383111561551357615513614a20565b6155278361552183546149e0565b83614cfc565b5f601f841160018114615558575f85156155415750838201355b5f19600387901b1c1916600186901b178355611a8c565b5f83815260208120601f198716915b828110156155875786850135825560209485019460019092019101615567565b50868210156155a3575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b5f602082840312156155c5575f80fd5b61182c826147f7565b5f602082840312156155de575f80fd5b813560ff8116811461182c575f80fd5b5f6001600160401b03808316818103614e3a57614e3a614dfb56fee92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00e92546d698950ddd38910d2e15ed1d923cd0a7b3dde9e2a6a3f380565559cb07a26469706673582212209e5e6bd2ef3a3becefd986d5e5078c74a623b76726945f49a272fa628277bc5b64736f6c63430008190033", } // 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 3451c68fe..f3e53671f 100644 --- a/contracts/validator-manager/PoSValidatorManager.sol +++ b/contracts/validator-manager/PoSValidatorManager.sol @@ -193,9 +193,7 @@ abstract contract PoSValidatorManager is revert UnauthorizedOwner(_msgSender()); } - uint256 rewards = $._redeemableValidatorRewards[validationID]; - delete $._redeemableValidatorRewards[validationID]; - _reward($._posValidatorInfo[validationID].owner, rewards); + _withdrawValidationRewards($._posValidatorInfo[validationID].owner, validationID); } /** @@ -291,9 +289,7 @@ abstract contract PoSValidatorManager is address owner = $._posValidatorInfo[validationID].owner; // The validator can either be Completed or Invalidated here. We only grant rewards for Completed. if (validator.status == ValidatorStatus.Completed) { - uint256 rewards = $._redeemableValidatorRewards[validationID]; - delete $._redeemableValidatorRewards[validationID]; - _reward(owner, rewards); + _withdrawValidationRewards(owner, validationID); } // The stake is unlocked whether the validation period is completed or invalidated. @@ -724,27 +720,15 @@ abstract contract PoSValidatorManager is // Once this function completes, the delegation is completed so we can clear it from state now. delete $._delegatorStakes[delegationID]; - uint256 rewards = $._redeemableDelegatorRewards[delegationID]; - delete $._redeemableDelegatorRewards[delegationID]; - - uint256 validatorFees; - uint256 delegatorRewards; - if (rewards > 0) { - validatorFees = (rewards * $._posValidatorInfo[validationID].delegationFeeBips) - / BIPS_CONVERSION_FACTOR; - - // Allocate the delegation fees to the validator. - $._redeemableValidatorRewards[validationID] += validatorFees; + address rewardRecipient = delegator.owner; - // Reward the remaining tokens to the delegator. - delegatorRewards = rewards - validatorFees; - _reward(delegator.owner, delegatorRewards); - } + (uint256 delegationRewards, uint256 validatorFees) = + _withdrawDelegationRewards(rewardRecipient, delegationID, validationID); // Unlock the delegator's stake. _unlock(delegator.owner, weightToValue(delegator.weight)); - emit DelegationEnded(delegationID, validationID, delegatorRewards, validatorFees); + emit DelegationEnded(delegationID, validationID, delegationRewards, validatorFees); } /** @@ -760,4 +744,41 @@ abstract contract PoSValidatorManager is PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); return $._posValidatorInfo[validationID].owner != address(0); } + + function _withdrawValidationRewards(address rewardRecipient, bytes32 validationID) internal { + PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); + + uint256 rewards = $._redeemableValidatorRewards[validationID]; + delete $._redeemableValidatorRewards[validationID]; + + _reward(rewardRecipient, rewards); + } + + function _withdrawDelegationRewards( + address rewardRecipient, + bytes32 delegationID, + bytes32 validationID + ) internal returns (uint256, uint256) { + PoSValidatorManagerStorage storage $ = _getPoSValidatorManagerStorage(); + + uint256 delegationRewards = 0; + uint256 validatorFees = 0; + + uint256 rewards = $._redeemableDelegatorRewards[delegationID]; + delete $._redeemableDelegatorRewards[delegationID]; + + if (rewards > 0) { + validatorFees = (rewards * $._posValidatorInfo[validationID].delegationFeeBips) + / BIPS_CONVERSION_FACTOR; + + // Allocate the delegation fees to the validator. + $._redeemableValidatorRewards[validationID] += validatorFees; + + // Reward the remaining tokens to the delegator. + delegationRewards = rewards - validatorFees; + _reward(rewardRecipient, delegationRewards); + } + + return (delegationRewards, validatorFees); + } }