0 txs
25 calls
constructor
constructor(address ibcHandler, bool developmentMode, bytes intelRootCA, address riscZeroVerifier, uint64 recoveredVersion)
functions
getClientState
viewfunction getClientState(string clientId) view returns (bytes clientStateBytes, bool)
getConsensusState
viewfunction getConsensusState(string clientId, tuple height) view returns (bytes consensusStateBytes, bool)
getLatestHeight
viewfunction getLatestHeight(string clientId) view returns (tuple)
getLatestInfo
viewfunction getLatestInfo(string clientId) view returns (tuple latestHeight, uint64 latestTimestamp, uint8 status)
getStatus
viewfunction getStatus(string clientId) view returns (uint8)
getTimestampAtHeight
viewfunction getTimestampAtHeight(string clientId, tuple height) view returns (uint64)
intelRootCAHash
viewfunction intelRootCAHash() view returns (bytes32)
owner
viewfunction owner() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
RECOVERED_VERSION
viewfunction RECOVERED_VERSION() view returns (uint64)
riscZeroVerifier
viewfunction riscZeroVerifier() view returns (address)
routeUpdateClient
purefunction routeUpdateClient(string clientId, bytes protoClientMessage) pure returns (bytes4, bytes)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
verifyMembership
viewfunction verifyMembership(string clientId, tuple height, uint64, uint64, bytes proof, bytes prefix, bytes path, bytes value) view returns (bool)
verifyNonMembership
viewfunction verifyNonMembership(string clientId, tuple height, uint64, uint64, bytes proof, bytes prefix, bytes path) view returns (bool)
initialize
nonpayablefunction initialize()
initializeClient
nonpayablefunction initializeClient(string clientId, bytes protoClientState, bytes protoConsensusState) returns (tuple height)
renounceOwnership
nonpayablefunction renounceOwnership()
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateClient
nonpayablefunction updateClient(string clientId, tuple message) returns (tuple[] heights)
updateOperators
nonpayablefunction updateOperators(string clientId, tuple message) returns (tuple[] heights)
upgrade
nonpayablefunction upgrade(tuple newClientState, tuple newConsensusState)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
zkDCAPRegisterEnclaveKey
nonpayablefunction zkDCAPRegisterEnclaveKey(string clientId, tuple message) returns (tuple[] heights)
events
Initialized
event Initialized(uint64 version)
LCPClientZKDCAPRegisteredEnclaveKey
event LCPClientZKDCAPRegisteredEnclaveKey(string clientId, address enclaveKey, uint256 expiredAt, address operator)
LCPClientZKDCAPUpdateCurrentTcbEvaluationDataNumber
event LCPClientZKDCAPUpdateCurrentTcbEvaluationDataNumber(string clientId, uint32 tcbEvaluationDataNumber)
LCPClientZKDCAPUpdateNextTcbEvaluationDataNumber
event LCPClientZKDCAPUpdateNextTcbEvaluationDataNumber(string clientId, uint32 tcbEvaluationDataNumber)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
LCPClientAVRAlreadyExpired
error LCPClientAVRAlreadyExpired()
LCPClientAVRInvalidSignature
error LCPClientAVRInvalidSignature()
LCPClientAVRUnexpectedOperator
error LCPClientAVRUnexpectedOperator(address actual, address expected)
LCPClientBaseInvalidConstructorParams
error LCPClientBaseInvalidConstructorParams()
LCPClientClientStateFrozen
error LCPClientClientStateFrozen()
LCPClientClientStateInvalidAllowedAdvisoryId
error LCPClientClientStateInvalidAllowedAdvisoryId()
LCPClientClientStateInvalidAllowedQuoteStatus
error LCPClientClientStateInvalidAllowedQuoteStatus()
LCPClientClientStateInvalidKeyExpiration
error LCPClientClientStateInvalidKeyExpiration()
LCPClientClientStateInvalidLatestHeight
error LCPClientClientStateInvalidLatestHeight()
LCPClientClientStateInvalidMrenclaveLength
error LCPClientClientStateInvalidMrenclaveLength()
LCPClientClientStateInvalidOperatorAddress
error LCPClientClientStateInvalidOperatorAddress()
LCPClientClientStateInvalidOperatorAddressLength
error LCPClientClientStateInvalidOperatorAddressLength()
LCPClientClientStateInvalidOperatorsNonce
error LCPClientClientStateInvalidOperatorsNonce()
LCPClientClientStateInvalidOperatorsThreshold
error LCPClientClientStateInvalidOperatorsThreshold()
LCPClientClientStateNotFound
error LCPClientClientStateNotFound()
LCPClientClientStateUnexpectedMrenclave
error LCPClientClientStateUnexpectedMrenclave()
LCPClientClientStateUnexpectedOperatorsNonce
error LCPClientClientStateUnexpectedOperatorsNonce(uint64 expectedNonce)
LCPClientConsensusStateInvalidStateId
error LCPClientConsensusStateInvalidStateId()
LCPClientConsensusStateInvalidTimestamp
error LCPClientConsensusStateInvalidTimestamp()
LCPClientConsensusStateNotFound
error LCPClientConsensusStateNotFound()
LCPClientEnclaveKeyExpired
error LCPClientEnclaveKeyExpired()
LCPClientEnclaveKeyNotExist
error LCPClientEnclaveKeyNotExist()
LCPClientEnclaveKeyUnexpectedExpiredAt
error LCPClientEnclaveKeyUnexpectedExpiredAt()
LCPClientEnclaveKeyUnexpectedOperator
error LCPClientEnclaveKeyUnexpectedOperator(address expected, address actual)
LCPClientIASCertExpired
error LCPClientIASCertExpired()
LCPClientIASRootCertExpired
error LCPClientIASRootCertExpired()
LCPClientInvalidSignaturesLength
error LCPClientInvalidSignaturesLength()
LCPClientMembershipVerificationInvalidHeight
error LCPClientMembershipVerificationInvalidHeight()
LCPClientMembershipVerificationInvalidPath
error LCPClientMembershipVerificationInvalidPath()
LCPClientMembershipVerificationInvalidPrefix
error LCPClientMembershipVerificationInvalidPrefix()
LCPClientMembershipVerificationInvalidStateId
error LCPClientMembershipVerificationInvalidStateId()
LCPClientMembershipVerificationInvalidValue
error LCPClientMembershipVerificationInvalidValue()
LCPClientMisbehaviourPrevStatesMustNotEmpty
error LCPClientMisbehaviourPrevStatesMustNotEmpty()
LCPClientOperatorSignaturesInsufficient
error LCPClientOperatorSignaturesInsufficient(uint256 success)
LCPClientOperatorsInvalidOrder
error LCPClientOperatorsInvalidOrder(address prevOperator, address nextOperator)
LCPClientRootCACertAlreadyInitialized
error LCPClientRootCACertAlreadyInitialized()
LCPClientUnknownProtoTypeUrl
error LCPClientUnknownProtoTypeUrl()
LCPClientUnknownProxyMessageHeader
error LCPClientUnknownProxyMessageHeader()
LCPClientUpdateOperatorsPermissionless
error LCPClientUpdateOperatorsPermissionless()
LCPClientUpdateOperatorsSignatureUnexpectedOperator
error LCPClientUpdateOperatorsSignatureUnexpectedOperator(address actual, address expected)
LCPClientUpdateStateEmittedStatesMustNotEmpty
error LCPClientUpdateStateEmittedStatesMustNotEmpty()
LCPClientUpdateStateInconsistentConsensusState
error LCPClientUpdateStateInconsistentConsensusState()
LCPClientUpdateStatePrevStateIdMustNotEmpty
error LCPClientUpdateStatePrevStateIdMustNotEmpty()
LCPClientUpdateStateUnexpectedPrevStateId
error LCPClientUpdateStateUnexpectedPrevStateId()
LCPClientZKDCAPCurrentTcbEvaluationDataNumberNotSet
error LCPClientZKDCAPCurrentTcbEvaluationDataNumberNotSet()
LCPClientZKDCAPDisallowedAdvisoryID
error LCPClientZKDCAPDisallowedAdvisoryID()
LCPClientZKDCAPDisallowedTCBStatus
error LCPClientZKDCAPDisallowedTCBStatus()
LCPClientZKDCAPInvalidConstructorParams
error LCPClientZKDCAPInvalidConstructorParams()
LCPClientZKDCAPInvalidNextTcbEvaluationDataNumberInfo
error LCPClientZKDCAPInvalidNextTcbEvaluationDataNumberInfo()
LCPClientZKDCAPInvalidVerifierInfoLength
error LCPClientZKDCAPInvalidVerifierInfoLength()
LCPClientZKDCAPInvalidVerifierInfoRisc0Header
error LCPClientZKDCAPInvalidVerifierInfoRisc0Header()
LCPClientZKDCAPInvalidVerifierInfos
error LCPClientZKDCAPInvalidVerifierInfos()
LCPClientZKDCAPOutputNotValid
error LCPClientZKDCAPOutputNotValid()
LCPClientZKDCAPOutputReportUnexpectedOperator
error LCPClientZKDCAPOutputReportUnexpectedOperator(address actual, address expected)
LCPClientZKDCAPRisc0ImageIdNotSet
error LCPClientZKDCAPRisc0ImageIdNotSet()
LCPClientZKDCAPUnexpectedEnclaveDebugMode
error LCPClientZKDCAPUnexpectedEnclaveDebugMode()
LCPClientZKDCAPUnexpectedIntelRootCAHash
error LCPClientZKDCAPUnexpectedIntelRootCAHash()
LCPClientZKDCAPUnexpectedTcbEvaluationDataNumber
error LCPClientZKDCAPUnexpectedTcbEvaluationDataNumber(uint64 currentTcbEvaluationDataNumber)
LCPClientZKDCAPUnrecognizedTCBStatus
error LCPClientZKDCAPUnrecognizedTCBStatus()
LCPClientZKDCAPUnsupportedZKVMType
error LCPClientZKDCAPUnsupportedZKVMType()
LCPCommitmentTrustingPeriodHeaderFromFuture
error LCPCommitmentTrustingPeriodHeaderFromFuture()
LCPCommitmentUnexpectedProxyMessageHeader
error LCPCommitmentUnexpectedProxyMessageHeader()
LCPCommitmentUnknownValidationContextType
error LCPCommitmentUnknownValidationContextType()
LCPCommtimentInvalidTrustingPeriodContextLength
error LCPCommtimentInvalidTrustingPeriodContextLength()
LCPCommtimentTrustingPeriodContextOutOfTrustingPeriod
error LCPCommtimentTrustingPeriodContextOutOfTrustingPeriod()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x6101406040523461024157615bc08038038061001a81610259565b928339810160a082820312610241576100328261027e565b9160208101519182151583036102415760408201516001600160401b03811161024157820181601f820112156102415780516001600160401b03811161024557610085601f8201601f1916602001610259565b9181835260208301936020838301011161024157815f926020809301865e8301015260806100b56060850161027e565b930151946001600160401b0386168603610241576001600160a01b03811615610232576080528051158015610221575b6102125751902060c0526001600160a01b031660e05260a05230610100525f516020615ba05f395f51905f5254604081901c60ff16610203576002600160401b03196001600160401b038216016101ad575b506101205260405161590d908161029382396080518181816128570152818161320701526137ed015260a05181612f2d015260c0518181816110ad0152612e56015260e0518181816101c60152612d6401526101005181818161066101526107ba01526101205181818161038001526124ee0152f35b6001600160401b0319166001600160401b039081175f516020615ba05f395f51905f52556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f610137565b63f92ee8a960e01b5f5260045ffd5b636409b01360e01b5f5260045ffd5b506001600160a01b038316156100e5565b63028a706b60e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffd5b6040519190601f01601f191682016001600160401b0381118382101761024557604052565b51906001600160a01b03821682036102415756fe60806040526004361015610011575f80fd5b5f3560e01c806304daae791461019457806322b05ed21461018f578063329681d01461018a57806333edd9df146101855780634b0bbdc4146101805780634f1ef2861461017b57806352d1902d146101765780636cf44bf414610171578063715018a61461016c57806376c81c42146101675780638129fc1c146101625780638da5cb5b1461015d578063999fbbb3146101585780639f02166714610153578063a0780c421461014e578063a590689714610149578063a97c61d614610144578063ad3cb1cc1461013f578063c7fae8b41461013a578063ed65fb5a14610135578063f13a62f914610130578063f2fde38b1461012b578063f9bb5a51146101265763fe66819f14610121575f80fd5b611757565b611678565b61164b565b6115ca565b611568565b611448565b611239565b6111c9565b611113565b611096565b610c4a565b610b16565b610a9b565b610934565b61091d565b610879565b61084e565b6107a0565b61061f565b6103f4565b610361565b6102e3565b61026b565b6101a7565b5f9103126101a357565b5f80fd5b346101a3575f3660031901126101a35760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b9181601f840112156101a3578235916001600160401b0383116101a357602083818601950101116101a357565b60206003198201126101a357600435906001600160401b0382116101a357610241916004016101ea565b9091565b634e487b7160e01b5f52602160045260245ffd5b9060038210156102665752565b610245565b346101a35760ff6001602061027f36610217565b919082604051938492833781015f815203019020015460401c165f146102b357602060025b6102b16040518092610259565bf35b60205f6102a4565b6102e19092919260408101936001600160401b0360208092828151168552015116910152565b565b346101a357600260206102f536610217565b91906102ff611811565b5082604051938492833781015f815203019020016001600160401b03815460401c161561035257610331604091611829565b6102b1825180926001600160401b0360208092828151168552015116910152565b637f59a43f60e01b5f5260045ffd5b346101a3575f3660031901126101a35760206040516001600160401b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b60409060231901126101a357602490565b60606003198201126101a357600435916001600160401b0383116101a3576103e2826040946004016101ea565b9093909260231901126101a357602490565b346101a3576001600160401b036001610470602061045b610437606f610419366103b5565b95909182604051938492833781015f815203019020019236906113b3565b6001600160401b03602067ffffffffffffffff60401b835160401b16920151161790565b6001600160801b03165f5260205260405f2090565b015416801561048e576040516001600160401b039091168152602090f35b6313fe761160e11b5f5260045ffd5b6001600160a01b038116036101a357565b634e487b7160e01b5f52604160045260245ffd5b604081019081106001600160401b038211176104dd57604052565b6104ae565b606081019081106001600160401b038211176104dd57604052565b60a081019081106001600160401b038211176104dd57604052565b608081019081106001600160401b038211176104dd57604052565b90601f801991011681019081106001600160401b038211176104dd57604052565b604051906102e160c083610533565b604051906102e160e083610533565b604051906102e1604083610533565b604051906102e161014083610533565b604051906102e16101e083610533565b604051906102e1608083610533565b6001600160401b0381116104dd57601f01601f191660200190565b9291926105d7826105b0565b916105e56040519384610533565b8294818452818301116101a3578281602093845f960137010152565b9080601f830112156101a35781602061061c933591016105cb565b90565b60403660031901126101a3576004356106378161049d565b6024356001600160401b0381116101a357610656903690600401610601565b906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001680301490811561076b575b5061075c57610699613921565b6040516352d1902d60e01b8152916020836004816001600160a01b0386165afa5f938161072b575b506106e357634c9c8ce360e01b5f526001600160a01b03821660045260245b5ffd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc830361071757610715925061511c565b005b632a87526960e21b5f52600483905260245ffd5b61074e91945060203d602011610755575b6107468183610533565b810190613912565b925f6106c1565b503d61073c565b63703e46dd60e11b5f5260045ffd5b90506001600160a01b037f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f61068c565b346101a3575f3660031901126101a3576001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361075c5760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b805180835260209291819084018484015e5f828201840152601f01601f1916010190565b9061084660209194939460408452604084019061080a565b931515910152565b346101a35761086561085f366103b5565b916118c5565b906108756040519283928361082e565b0390f35b346101a3575f3660031901126101a357610891613921565b5f6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005473ffffffffffffffffffffffffffffffffffffffff1981167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346101a35761086561092e36610217565b90611aa8565b346101a3575f3660031901126101a3575f5160206158b85f395f51905f52546001600160401b0361097460ff604084901c1615926001600160401b031690565b1680159081610a93575b6001149081610a89575b159081610a80575b50610a7157806109c660016001600160401b03195f5160206158b85f395f51905f525416175f5160206158b85f395f51905f5255565b610a37575b6109d3611c49565b6109d957005b610a0868ff0000000000000000195f5160206158b85f395f51905f5254165f5160206158b85f395f51905f5255565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b610a6c600160401b68ff0000000000000000195f5160206158b85f395f51905f525416175f5160206158b85f395f51905f5255565b6109cb565b63f92ee8a960e01b5f5260045ffd5b9050155f610990565b303b159150610988565b82915061097e565b346101a3575f3660031901126101a35760206001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b6001600160401b038116036101a357565b606435906102e182610ae0565b608435906102e182610ae0565b35906102e182610ae0565b346101a3576101003660031901126101a3576004356001600160401b0381116101a357610b479036906004016101ea565b90610b51366103a4565b91610b5a610af1565b50610b63610afe565b5060a4356001600160401b0381116101a357610b839036906004016101ea565b60c4939193356001600160401b0381116101a357610ba59036906004016101ea565b9160e435956001600160401b0387116101a35761087597610bcd610bd59836906004016101ea565b979096611c6a565b60405190151581529081906020820190565b90602080835192838152019201905f5b818110610c045750505090565b9091926020604082610c2e60019488516001600160401b0360208092828151168552015116910152565b019401929101610bf7565b602061061c91818152016060610be7565b346101a35760403660031901126101a3576004356001600160401b0381116101a357610c7a9036906004016101ea565b90602435906001600160401b0382116101a357816004019260a060031984360301126101a357610caa81836117f9565b600581019182549160848601610cc08189611cd6565b94809150156110875784036110785760448701916001600160401b03610ce584611d0b565b16158015611056575b611047576006810194610d10610d0b87546001600160401b031690565b611d29565b97610d1a8b611d0b565b6001600160401b03808b1691160361102b579189979593918b9a93610d51610d4a60248e9d9b999701809d611cd6565b9050611d6c565b99610d5d8c5f9e611cd6565b90508d1015610de1576014610d7e8f8f908f610d7891611cd6565b90611de4565b905003610dd257610d5d8c8f9e8f90610dcb8f610dbd83610db7610db1610dab83610d788b60019b611cd6565b90611e00565b60601c90565b92611e4d565b906001600160a01b03169052565b019e611cd6565b63045098cd60e11b5f5260045ffd5b899c5090610e0d918b8f9b9d9c9a9d6064610dfb8a611d0b565b930199610e078b611d0b565b94613b3d565b602081519101205f935f5b838110610f7d575050505090610e2d91613d4a565b610e3687611f24565b5f5b8451811015610ee85780610e68575b80610e62610e5b600193610d788b8b611cd6565b908b611fee565b01610e38565b610e85610e785f19830187611e4d565b516001600160a01b031690565b610ea1610e95610e788489611e4d565b6001600160a01b031690565b6001600160a01b0382161015610eb75750610e47565b610ec7610e786106e09388611e4d565b633ea9028760e11b5f526001600160a01b0391821660045216602452604490565b50825467ffffffffffffffff19166001600160401b038916178355610f709291610f4991610f1790610f1c9082565b611d0b565b84546fffffffffffffffff0000000000000000191660409190911b67ffffffffffffffff60401b16178455565b67ffffffffffffffff60801b1967ffffffffffffffff60801b83549260801b169116179055565b6040518061087581610c39565b8c8b610f8d83610d788684611cd6565b9050610f9e575b5050600101610e18565b610e95610db1610fd485610fce610fc8610fc1839e99610d788c610fda9a611cd6565b36916105cb565b8a613ccf565b95611e73565b50611e88565b6001600160a01b03821603610ff55750600101948c8b610f94565b6106e09061100a8f610fd48a610db192611e73565b632e8d130360e21b5f526001600160a01b0391821660045216602452604490565b63195601a960e31b5f526001600160401b03891660045260245ffd5b63485a4f9760e01b5f5260045ffd5b5061107261106660648a01611d0b565b6001600160401b031690565b15610cee565b630845812160e41b5f5260045ffd5b63f99ee6e760e01b5f5260045ffd5b346101a3575f3660031901126101a35760206040517f00000000000000000000000000000000000000000000000000000000000000008152f35b6060906001600160401b036102e194969593966111068360808101996001600160401b0360208092828151168552015116910152565b1660408201520190610259565b346101a357602061112336610217565b919061112d611811565b5082604051938492833781015f81520301902061114c60028201611829565b60ff60016001600160401b038161119e611184866001600160401b03602067ffffffffffffffff60401b835160401b16920151161790565b606f8801906001600160801b03165f5260205260405f2090565b01541693015460401c165f146111c05761087560025b604051938493846110d0565b6108755f6111b4565b346101a35760403660031901126101a3576004356001600160401b0381116101a3576111f99036906004016101ea565b906024356001600160401b0381116101a3576004016040813603126101a3576108759261122592612427565b604051918291602083526020830190610be7565b346101a3575f3660031901126101a35761087560405161125a604082610533565b600581527f352e302e30000000000000000000000000000000000000000000000000000000602082015260405191829160208352602083019061080a565b6001600160401b0381116104dd5760051b60200190565b9080601f830112156101a35781356112c681611298565b926112d46040519485610533565b81845260208085019260051b820101918383116101a35760208201905b83821061130057505050505090565b81356001600160401b0381116101a35760209161132287848094880101610601565b8152019101906112f1565b92919061133981611298565b936113476040519586610533565b602085838152019160051b8101918383116101a35781905b83821061136d575050505050565b81356001600160401b0381116101a35760209161138d8784938701610601565b81520191019061135f565b9080601f830112156101a35781602061061c9335910161132d565b91908260409103126101a3576040516113cb816104c2565b602080829480356113db81610ae0565b84520135916113e983610ae0565b0152565b9060806023198301126101a357604051611406816104c2565b604081936114158160246113b3565b835260631901126101a35760206040519161142f836104c2565b606435835260843561144081610ae0565b828401520152565b346101a35760a03660031901126101a3576004356001600160401b0381116101a35760c060031982360301126101a357611480610554565b81600401356001600160401b0381116101a3576114a39060043691850101610601565b815260248201356001600160401b0381116101a3576114c89060043691850101610601565b60208201526114d960448301610b0b565b604082015260648201356001600160401b0381116101a35761150190600436918501016112af565b606082015260848201356001600160401b0381116101a35761152990600436918501016112af565b608082015260a48201356001600160401b0381116101a3576107159260046115549236920101611398565b60a0820152611562366113ed565b906124e9565b346101a35760403660031901126101a3576004356001600160401b0381116101a3576115989036906004016101ea565b90602435906001600160401b0382116101a357608060031983360301126101a357610875926112259260040191612d28565b346101a35760403660031901126101a3576004356001600160401b0381116101a3576115fa9036906004016101ea565b602435916001600160401b0383116101a35761161d6116259336906004016101ea565b929091613605565b9061087560405192839263ffffffff60e01b16835260406020840152604083019061080a565b346101a35760203660031901126101a35761071560043561166b8161049d565b611673613921565b6136d6565b346101a3576101203660031901126101a3576004356001600160401b0381116101a3576116a99036906004016101ea565b906116b3366103a4565b916116bc610af1565b506116c5610afe565b5060a4356001600160401b0381116101a3576116e59036906004016101ea565b60c4939193356001600160401b0381116101a357611707903690600401610601565b60e4356001600160401b0381116101a357611726903690600401610601565b9161010435956001600160401b0387116101a3576108759761174f610bd59836906004016101ea565b979096613785565b346101a35760603660031901126101a3576004356001600160401b0381116101a3576117879036906004016101ea565b6024356001600160401b0381116101a3576117a69036906004016101ea565b919092604435926001600160401b0384116101a357610875946117d06117e09536906004016101ea565b9490936117db611811565b6137dc565b604051918291826102bb565b908092918237015f815290565b60209082604051938492833781015f81520301902090565b6040519061181e826104c2565b5f6020838281520152565b90604051611836816104c2565b60206001600160401b03829454818116845260401c16910152565b81601f820112156101a35760208151910161186b826105b0565b926118796040519485610533565b828452828201116101a357815f926020928386015e8301015290565b906020828203126101a35781516001600160401b0381116101a35761061c9201611851565b6040513d5f823e3d90fd5b610437606f6118db6118e4959461045b946117f9565b019236906113b3565b60018101546001600160401b03169081158061198b575b611982575460405163a56e54db60e01b815260048101919091526001600160401b0390911660248201525f8180604481015b03817302aad30352a1182931cfb3b1d35ef3e260b4bb995af490811561197d575f9161195b575b5090600190565b61197791503d805f833e61196f8183610533565b810190611895565b5f611954565b6118ba565b50506060905f90565b508054156118fb565b90600182811c921680156119c2575b60208310146119ae57565b634e487b7160e01b5f52602260045260245ffd5b91607f16916119a3565b5f92918154916119db83611994565b8083529260018116908115611a3057506001146119f757505050565b5f9081526020812093945091925b838310611a16575060209250010190565b600181602092949394548385870101520191019190611a05565b915050602093945060ff929192191683830152151560051b010190565b90806020835491828152019160208260051b820101935f5260205f20925f915b838310611a7c57505050505090565b909192939460206001611a998193601f19868203018752896119cc565b97019301930191939290611a6d565b60209082604051938492833781015f815203019020611ac78154611994565b15611c41575f61192d916040518093819263e8f27d9d60e01b835260086004840191602083526102006020840152611b98611b82611b6d611b0c6102208701856119cc565b60018501546001600160401b0381166040890152611b339060401c60ff1615156060890152565b611b5860808801600287016001600160401b0360209154818116845260401c16910152565b868103601f190160c088015260038501611a4d565b858103601f190160e087015260048401611a4d565b848103601f190161010086015260058301611a4d565b92611c046006830154611bc061012084016001600160401b0383166001600160401b03169052565b604081901c6001600160401b0316610140840152608081901c6001600160401b031661016084015260c081901c63ffffffff1661018084015260e01c6101a0830152565b600782015463ffffffff81166101c0830152611c2e9060201c6001600160401b03166101e0830152565b610200601f198286030191015201611a4d565b506060905f90565b611c516151f6565b611c596151f6565b611c616151f6565b6102e1336136d6565b96611ca3602096611cab93611c87611cb39860409b9d979861399a565b99909b828c51938492833781015f8152030190209a36916105cb565b9236916105cb565b918488613a3a565b0151611cc757611cc291613b26565b600190565b633c00b72960e01b5f5260045ffd5b903590601e19813603018212156101a357018035906001600160401b0382116101a357602001918160051b360383136101a357565b3561061c81610ae0565b634e487b7160e01b5f52601160045260245ffd5b6001600160401b036001911601906001600160401b038211611d4757565b611d15565b906001600160401b03809116911601906001600160401b038211611d4757565b90611d7682611298565b611d836040519182610533565b8281528092611d94601f1991611298565b0190602036910137565b634e487b7160e01b5f52603260045260245ffd5b903590601e19813603018212156101a357018035906001600160401b0382116101a3576020019181360383136101a357565b90821015611dfb576102419160051b810190611db2565b611d9e565b356bffffffffffffffffffffffff19811692919060148210611e20575050565b6bffffffffffffffffffffffff1960149290920360031b82901b16169150565b805115611dfb5760200190565b8051821015611dfb5760209160051b010190565b805415611dfb575f5260205f20905f90565b8054821015611dfb575f5260205f2001905f90565b90611e938254611994565b9180601f8411611ebe575b50546bffffffffffffffffffffffff198116929060148210611e20575050565b90505f5260205f205f611e9e565b90633b9aca00820291808304633b9aca001490151715611d4757565b81810292918115918404141715611d4757565b818110611f06575050565b5f8155600101611efb565b634e487b7160e01b5f525f60045260245ffd5b8054905f815581611f33575050565b5f5260205f20908101905b818110611f49575050565b80611f5660019254611994565b80611f63575b5001611f3e565b601f81118314611f7857505f81555b5f611f5c565b611f9a9083601f611f8c855f5260205f2090565b920160051c82019101611efb565b5f8181526020812081835555611f72565b9190601f8111611fba57505050565b6102e1925f5260205f20906020601f840160051c83019310611fe4575b601f0160051c0190611efb565b9091508190611fd7565b929190928054600160401b8110156104dd5761200f91600182018155611e73565b9190916120db576001600160401b0381116104dd57612038816120328454611994565b84611fab565b5f601f82116001146120765781906120679394955f9261206b575b50508160011b915f199060031b1c19161790565b9055565b013590505f80612053565b601f19821694612089845f5260205f2090565b915f5b8781106120c35750836001959697106120aa575b505050811b019055565b01355f19600384901b60f8161c191690555f80806120a0565b9092602060018192868601358155019401910161208c565b611f11565b6020818303126101a3578035906001600160401b0382116101a357016040818303126101a35760405191612113836104c2565b8135835260208201356001600160401b0381116101a3576121349201610601565b602082015290565b51906102e182610ae0565b91908260409103126101a35760405161215f816104c2565b6020808294805161216f81610ae0565b84520151916113e983610ae0565b6020818303126101a3578051906001600160401b0382116101a357016060818303126101a357604051916121b0836104e2565b81516001600160401b0381116101a357820181601f820112156101a35780516121d881611298565b916121e66040519384610533565b818352602060608185019302820101908482116101a357602001915b81831061225757505050835260208201516001600160401b0381116101a3578161222d918401611851565b602084015260408201516001600160401b0381116101a35761224f9201611851565b604082015290565b6060838603126101a3576020606091604051612272816104c2565b61227c8887612147565b8152604086015183820152815201920191612202565b51906001600160801b03821682036101a357565b9080601f830112156101a3578151916122be83611298565b926122cc6040519485610533565b80845260208085019160051b830101918383116101a35760208101915b8383106122f857505050505090565b82516001600160401b0381116101a3578201906060828703601f1901126101a35760405190612326826104c2565b6123338760208501612147565b82526060830151916001600160401b0383116101a35761235b88602080969581960101611851565b838201528152019201916122e9565b6020818303126101a3578051906001600160401b0382116101a35701610120818303126101a357612399610563565b916123a48183612147565b8352604082015160208401526123bd8160608401612147565b604084015260a082015160608401526123d860c08301612292565b608084015260e08201516001600160401b0381116101a357816123fc918401611851565b60a08401526101008201516001600160401b0381116101a35761241f92016122a6565b60c082015290565b61243761247b92612473926117f9565b9261246d612448610fc18380611db2565b6020815191012061246661245f6020850185611cd6565b369161132d565b9086613d91565b80611db2565b8101906120e0565b80519091906201000160e01b81036124ae57506124a8602061061c9301516020808251830101910161236a565b90613fc9565b6201000360e01b036124da576124d4602061061c9301516020808251830101910161217d565b90613e3b565b631a2bd57960e21b5f5260045ffd5b9190917f0000000000000000000000000000000000000000000000000000000000000000925f5160206158b85f395f51905f525460ff8160401c1680156129a0575b610a715768ffffffffffffffffff19166001600160401b03851617600160401b175f5160206158b85f395f51905f5255612563613921565b61256d8251612c4a565b926001840194612582865460ff9060401c1690565b61299157600285019384546125dd6125b36125a3836001600160401b031690565b9260401c6001600160401b031690565b6125cd6125be610572565b6001600160401b039094168452565b6001600160401b03166020830152565b6125e6816154f0565b90811561297e575b5061296f57602081016020815151036129605760208501976001600160401b0361262460208b51016001600160401b0390511690565b161561295257885151156129435761264361266592999899518a614216565b6040830151815467ffffffffffffffff19166001600160401b03909116179055565b603b87019660038101955f5b875481101561269957805f6126928c61268c6001958d611e73565b506142d5565b5501612671565b509092969793959194975f966004850196603c8601985b88548110156126d257805f6126cb8c61268c6001958e611e73565b55016126b0565b5091959998909296939794986126ec60608401518a61435a565b6126fa60808401518661435a565b5f5b8954811015612725578061271f6127198e61268c6001958f611e73565b60019055565b016126fc565b5092959891949750929598505f5b865481101561275657806127506127198a61268c6001958c611e73565b01612733565b50929690945061282a919550606f61281061282f95996127a261279c60a08c016127966127838251611e40565b5161279060088c01611e61565b90614423565b51611e40565b516150bb565b60718701556104378851916127de6127c184516001600160401b031690565b825467ffffffffffffffff19166001600160401b03909116178255565b602083015181546fffffffffffffffff0000000000000000191660409190911b67ffffffffffffffff60401b16179055565b91519301906001600160801b03165f5260205260405f2090565b614432565b612837613f89565b905161284282611e40565b5261284c81611e40565b506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925190833b156101a3576128a4935f9283604051809781958294631eb605d560e21b845260048401614466565b03925af190811561197d577fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29261292492612929575b5061290a68ff0000000000000000195f5160206158b85f395f51905f5254165f5160206158b85f395f51905f5255565b6040516001600160401b0390911681529081906020820190565b0390a1565b806129375f61293d93610533565b80610199565b5f6128da565b630485ab3d60e21b5f5260045ffd5b62e1fb1360e61b5f5260045ffd5b6319ef352560e21b5f5260045ffd5b63ec28d3ff60e01b5f5260045ffd5b61298b9150855190615519565b5f6125ee565b6376e3f56360e01b5f5260045ffd5b506001600160401b0385166001600160401b038216101561252b565b63ffffffff8116036101a357565b3561061c816129bc565b908060209392818452848401375f828201840152601f01601f1916010190565b90612a0e90604093969594966060845260608401916129d4565b9460208201520152565b51906102e1826129bc565b519081151582036101a357565b51906102e18261049d565b9080601f830112156101a3578151612a5281611298565b92612a606040519485610533565b81845260208085019260051b820101918383116101a35760208201905b838210612a8c57505050505090565b81516001600160401b0381116101a357602091612aae87848094880101611851565b815201910190612a7d565b6020818303126101a3578051906001600160401b0382116101a35701610140818303126101a357612ae8610581565b9181516001600160401b0381116101a35781612b05918401611851565b8352612b1360208301612a18565b602084015260408201516040840152612b2e6060830161213c565b6060840152612b3f6080830161213c565b6080840152612b5060a08301612a23565b60a084015260c082015160c0840152612b6b60e08301612a30565b60e0840152612b7d6101008301612a30565b6101008401526101208201516001600160401b0381116101a357612ba19201612a3b565b61012082015290565b91602061061c9381815201916129d4565b612bc58154611994565b9080601f8311612bed575b50549060208110612bdf575090565b5f199060200360031b1b1690565b90505f5260205f205f612bd0565b60086020604051612c0d604082610533565b828152017f5570546f4461746500000000000000000000000000000000000000000000000081522090565b805191908290602001825e015f815290565b6020612c5c9160405192838092612c38565b5f81520301902090565b602090612c799260405193848093612c38565b9081520301902090565b91612ca160209263ffffffff929695966040865260408601916129d4565b9416910152565b90612cbf9061061c936040845260408401916129d4565b9060208183039101526060610be7565b906102e1612ce392604051938480926119cc565b0383610533565b936001600160401b03906001600160a01b03612d15606096999894829660808a5260808a01916129d4565b9816602087015216604085015216910152565b91926060600163ffffffff612d3c876129ca565b160361343557612d4c83856117f9565b93607185015493841561342657866001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016612d916040830183611db2565b97909160205f612da48287018097611db2565b90612db4604051809381936117ec565b039060025afa1561197d575f5198813b156101a3575f93612deb6040519b8c958694859463ab750e7560e01b8652600486016129f4565b03915afa95861561197d57612e2796613412575b505f612e0b828a611db2565b60405163ef21425b60e01b815298899283929060048401612baa565b03817314253aac8b91388a6bdaadfb046ad872935646cc5af495861561197d575f966133ee575b5060408601517f0000000000000000000000000000000000000000000000000000000000000000036133df5760c0860151612e8888612bbb565b036133d057855160208151910120612e9e612bfb565b1415806133b7575b6133a8579596603c880196905f5b6101208801518051821015612ef657612ed98a612ed384600194611e4d565b51612c66565b5403612ee757600101612eb4565b63dadb2c5d60e01b5f5260045ffd5b505092959093965096909396868101612f1961106682516001600160401b031690565b42108015613389575b61337a5760a08201517f000000000000000000000000000000000000000000000000000000000000000015159015150361336b57612f6d610d0b60808401516001600160401b031690565b90612f8260018501546001600160401b031690565b906001600160401b038216613310575050925b612fb0612fa9602084015163ffffffff1690565b878961448b565b80826132cd575b613282575b811561327a575b506131fd575b5f9488820190612fd98284611db2565b90506131a1575b5050506101008101516001600160a01b0316801515818161318d575b5061316c575060e0613035910191607061301d84516001600160a01b031690565b9101906001600160a01b03165f5260205260405f2090565b80546001600160401b03811690816130f8575050916130e68492610e787f264665dc4345d5350263c4fe095cbbef6fa5da59e21460ea8716a7c587c0e81b989686613099866130f299906001600160401b03166001600160401b0319825416179055565b907fffffffff0000000000000000000000000000000000000000ffffffffffffffff7bffffffffffffffffffffffffffffffffffffffff000000000000000083549260401b169116179055565b60405195869586612cea565b0390a190565b909650929450505060401c6001600160a01b03166001600160a01b0382166001600160a01b0382160361314b5750506001600160401b0380911691160361313c5790565b633e2c67e760e01b5f5260045ffd5b63624596cb60e01b5f526001600160a01b039081166004521660245260445ffd5b634c58908f60e01b5f526001600160a01b038086166004521660245260445ffd5b90506001600160a01b03861614155f612ffc565b6131f49396506131ee916131e1610fc1926131dc6131cf610fc16131c760088c01611e61565b509389611db2565b6020815191012091612ccf565b61471b565b6020815191012093611db2565b90613ccf565b925f8080612fe0565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016803b156101a357604051631eb605d560e21b8152905f9082908183816132518d8f60048401612ca8565b03925af1801561197d57613266575b50612fc9565b806129375f61327493610533565b5f613260565b90505f612fc3565b7f153000d4c51b45bc714d7dc581cf928296b03c8072dba487e8046988b2cdcd35888a6132c56132b960078a015463ffffffff1690565b60405193849384612c83565b0390a1612fbc565b7f076a3989c1d2fa8eab9eb3771eac2d1176afff734b001ac8e0c6b8f625808de2898b6133086132b960068b015463ffffffff9060c01c1690565b0390a1612fb7565b5191949161332791906001600160401b0316611d4c565b936001600160401b0381166001600160401b03861611613363575b50426001600160401b03851611612f95575b6357c1ba7360e11b5f5260045ffd5b93505f613342565b63b9c6d06360e01b5f5260045ffd5b630975fa9960e01b5f5260045ffd5b506133a161106660808401516001600160401b031690565b4211612f22565b63344f56a760e21b5f5260045ffd5b5060016133c8603b89018851612c66565b541415612ea6565b63346d1c5d60e01b5f5260045ffd5b636639182360e01b5f5260045ffd5b61340b9196503d805f833e6134038183610533565b810190612ab9565b945f612e4e565b806129375f61342093610533565b5f612dff565b631705f0c760e21b5f5260045ffd5b63f13d17b160e01b5f5260045ffd5b9190916040818403126101a35780519260208201516001600160401b0381116101a35761061c9201611851565b929061348a9061061c95936040865260408601916129d4565b9260208185039101526129d4565b6040516134a6606082610533565b602c81527f2f6962632e6c69676874636c69656e74732e6c63702e76312e5570646174654360208201527f6c69656e744d657373616765000000000000000000000000000000000000000060408201526040516135198161350b602082018095612c38565b03601f198101835282610533565b51902090565b60405161352d606082610533565b603881527f2f6962632e6c69676874636c69656e74732e6c63702e76312e5a4b444341505260208201527f65676973746572456e636c6176654b65794d657373616765000000000000000060408201526040516135198161350b602082018095612c38565b6040516135a0606082610533565b602f81527f2f6962632e6c69676874636c69656e74732e6c63702e76312e5570646174654f60208201527f70657261746f72734d657373616765000000000000000000000000000000000060408201526040516135198161350b602082018095612c38565b6136275f939594604051968794859463fd6c41fd60e01b865260048601613471565b03817302aad30352a1182931cfb3b1d35ef3e260b4bb995af491821561197d575f905f936136af575b50613659613498565b810361366c57506354be30eb60e11b9190565b61367461351f565b810361368757506376b2fdad60e11b9190565b61368f613592565b036136a057639f02166760e01b9190565b632049c2f760e11b5f5260045ffd5b90506136ce9192503d805f833e6136c68183610533565b810190613444565b91905f613650565b6001600160a01b03168015613772576001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300548273ffffffffffffffffffffffffffffffffffffffff198216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b631e4fbdf760e01b5f525f60045260245ffd5b969295604095610fc1926137a16137bd9760209a9c969c61399a565b99909a828a51938492833781015f81520301902099888b613a3a565b6020815191012091015103611cc757611cc291613b26565b156101a357565b509492909391946001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633036101a35761382794613820916117f9565b9485614d49565b50610140810163ffffffff613840825163ffffffff1690565b161561390357610180820161386561385c825163ffffffff1690565b63ffffffff1690565b156001600160401b036138836101a08601516001600160401b031690565b1615036138e2575161389a9063ffffffff1661385c565b80151591826138f1575b50506138e2576101c08101916001835151036138d35760716138cb61279c60609551611e40565b910155015190565b631e6bcd2160e11b5f5260045ffd5b63a3617d4160e01b5f5260045ffd5b5163ffffffff16101590505f806138a4565b630f9e72bf60e01b5f5260045ffd5b908160209103126101a3575190565b6001600160a01b037f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416330361395457565b63118cdaa760e01b5f523360045260245ffd5b60405190613974826104fd565b5f6080836060815260606020820152826040820152613991611811565b60608201520152565b9190606060206040516139ac816104c2565b82815201526139b9613967565b508201916020818403126101a3578035906001600160401b0382116101a357016040818403126101a357604051926139f0846104c2565b81356001600160401b0381116101a35781613a0c918401610601565b845260208201356001600160401b0381116101a357613a2b9201611398565b602083015261061c8251615275565b613a986104379593949294606f613a80613a7660608901516001600160401b03602067ffffffffffffffff60401b835160401b16920151161790565b98899336906113b3565b9301906001600160801b03165f5260205260405f2090565b5494851561048e576001600160801b03809116911603613b17576020815191012082516020815191012003613b08576020815191012060208201516020815191012003613af9576080015103613aea57565b63b538e9d560e01b5f5260045ffd5b63405ec97560e11b5f5260045ffd5b6372e5c67b60e01b5f5260045ffd5b637dfe493960e11b5f5260045ffd5b6102e1916020815181815191012091015191613d91565b9161350b613c979296613c1161061c97956040516020810190600160f01b825260028152613b6c602282610533565b51902060405160208101917fd87cd6ef79d4e2b95e15ce8abf732db51ec771f1ca2edccf22a46c729ac5647283527fc66ff7a5e2390ac4d4294919e7b08412097d121653a1fc81df9afe366bba30ac60408301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608301524660808301523060a083015260c082015260c08152613c0660e082610533565b5190209936916105cb565b6020815191012095604051613c2e8161350b602082018095615381565b51902094604051958694602086019889936001600160401b03929060a0948480939998949960c089019a7f7cf1ec676d9505d35ed398e188cea132cf6f2823759222a6c139854890a7915c8a5260208a0152166040880152606087015216608085015216910152565b51902060405161190160f01b602082015260228101939093526042830152816062810161350b565b805160401015611dfb5760600190565b90805160401015611dfb5760608101601b815160f81c10613cf5575b5061061c916153b7565b815160401015611dfb575160f81c601b019160ff8311611d475761061c9260f81b7fff00000000000000000000000000000000000000000000000000000000000000165f1a613d4383613cbf565b5391613ceb565b613d7860068201546001600160401b036005613d6b828460801c1687611ee8565b9401549160401c16611ee8565b11613d805750565b6219ac7b60e71b5f5260045260245ffd5b9091805160058301805480155f14613dc9575050600103611078576102e192613dbc613dc392611e40565b5190613ccf565b90615433565b8296959194939603611078575f935f5b838110613def57505050506102e1929350613d4a565b613df98189611e4d565b518051613e0a575b50600101613dd9565b60019196613e33613e1c849387613ccf565b613e2c610db1610fd48c89611e73565b90896153cd565b019590613e01565b906001820191613e50835460ff9060401c1690565b61299157815151908115613f29575f5b828110613ea25750505090613e856020613e9d930151613e7f42611ecc565b9061546a565b805468ff00000000000000001916600160401b179055565b606090565b613ead818551611e4d565b516020613ed982516001600160401b03602067ffffffffffffffff60401b835160401b16920151161790565b910190815115613f1a576001600160801b03165f908152606f84016020526040902054905103613f0b57600101613e60565b63082eed3560e01b5f5260045ffd5b637fd0e7b160e01b5f5260045ffd5b632337fafb60e11b5f5260045ffd5b8151815467ffffffffffffffff19166001600160401b039182161782556102e1926020015182546fffffffffffffffff00000000000000001916911660401b67ffffffffffffffff60401b16179055565b60408051909190613f9a8382610533565b6001815291601f1901825f5b828110613fb257505050565b602090613fbd611811565b82828501015201613fa6565b90613fdc600183015460ff9060401c1690565b61299157600282019081546001600160401b03613fff826001600160401b031690565b161590816141f9575b50156141975760c0810151511561418857606f905b61402e60a0820151613e7f42611ecc565b614079604082019461405f86516001600160401b03602067ffffffffffffffff60401b835160401b16920151161790565b93849101906001600160801b03165f5260205260405f2090565b9081548061411557509060016140a661106660808560606140c3970151865501516001600160801b031690565b9101906001600160401b03166001600160401b0319825416179055565b6001600160801b03806140d861043785611829565b9216911610614104575b506140eb613f89565b90516140f682611e40565b5261410081611e40565b5090565b815161410f91613f38565b5f6140e2565b60608201511480159550909350909150614144575b505061413557606090565b63fac4becb60e01b5f5260045ffd5b6001600160401b03919250611066611066608061416e600161417d9501546001600160401b031690565b9501516001600160801b031690565b911614155f8061412a565b636088c10f60e11b5f5260045ffd5b6141dd6141c382516001600160401b03602067ffffffffffffffff60401b835160401b16920151161790565b606f8501906001600160801b03165f5260205260405f2090565b6020820190815115613f1a5754905103613f0b57606f9061401d565b61420f915060401c6001600160401b0316611066565b155f614008565b91909182516001600160401b0381116104dd57614237816120328454611994565b6020601f82116001146142715781906120679394955f926142665750508160011b915f199060031b1c19161790565b015190505f80612053565b601f19821690614284845f5260205f2090565b915f5b8181106142bd575095836001959697106142a557505050811b019055565b01515f1960f88460031b161c191690555f80806120a0565b9192602060018192868b015181550194019201614287565b9060405180925f908054906142e982611994565b9160018116908115614342575060011461430c575b505060209281520301902090565b9091505f5260205f205f905b82821061432b575050810160205f6142fe565b805482870152859350602090910190600101614318565b60ff191685525050801515028201905060205f6142fe565b815191600160401b83116104dd5781548383558084106143b4575b5060206143879101915f5260205f2090565b5f915b8383106143975750505050565b60016020826143a883945186614216565b0192019201919061438a565b825f528360205f2091820191015b8181106143cf5750614375565b806143dc60019254611994565b806143e9575b50016143c2565b601f811183146143fe57505f81555b5f6143e2565b6144129083601f611f8c855f5260205f2090565b5f81815260208120818355556143f8565b91906120db576102e191614216565b60016001600160401b0360206102e194805185550151169101906001600160401b03166001600160401b0319825416179055565b909161447d61061c9360408452604084019061080a565b916020818403910152610be7565b5f91614496916117f9565b90600782019182546144ab8163ffffffff1690565b9063ffffffff8216151590816146fc575b506146b5575b506006018054909163ffffffff858116929060c082901c16808085111561468857505061385c6144f29160e01c90565b8061455c5750505061454092614522919063ffffffff60c01b1963ffffffff60c01b83549260c01b169116179055565b5461453263ffffffff821661385c565b159081614547575b506137d5565b6001905f90565b60201c6001600160401b03161590505f61453a565b614573906001600160401b03959493954216611d4c565b9361458561385c855463ffffffff1690565b1561465f5761459b61385c855463ffffffff1690565b90818111156146265750505061461f936145df6145f5926145c0855463ffffffff1690565b63ffffffff60c01b1963ffffffff60c01b83549260c01b169116179055565b825463ffffffff191663ffffffff909116178255565b906bffffffffffffffff0000000082549160201b16906bffffffffffffffff000000001916179055565b6001908190565b9195945091925010156146585761454092509063ffffffff60c01b1963ffffffff60c01b83549260c01b169116179055565b5050905f90565b50825463ffffffff191663ffffffff9095169490941782555061468291906145f5565b90600190565b94509550509250105f146146af5763ab49dbfb60e01b5f5263ffffffff821660045260245ffd5b915f9150565b81925060066146df92019063ffffffff60c01b1963ffffffff60c01b83549260c01b169116179055565b81546bffffffffffffffffffffffff1916825560019060066144c2565b614712915060201c6001600160401b0316611066565b4210155f6144bc565b60208151910120906040519060208201927f80eda58c0423860eefb7920e7fd5e1f36575a31243c61b95d688227aca6bc73c84526040830152606082015260608152614768608082610533565b5190206040519061190160f01b60208301527f7fd21c2453e80741907e7ff11fd62ae1daa34c6fc0c2eced821f1c1d3fe88a4c602283015260428201526042815261061c606282610533565b6147bc610591565b90606082525f60208301525f60408301526147d5611811565b606083015260606080830152606060a0830152606060c08301525f60e08301525f6101008301525f6101208301525f6101408301525f6101608301525f6101808301525f6101a083015260606101c0830152565b60405190614836826104c2565b5f602083606081520152565b6020818303126101a3578051906001600160401b0382116101a35701610200818303126101a357614871610591565b9181516001600160401b0381116101a3578161488e918401611851565b835261489c6020830161213c565b60208401526148ad60408301612a23565b60408401526148bf8160608401612147565b606084015260a08201516001600160401b0381116101a357816148e3918401612a3b565b608084015260c08201516001600160401b0381116101a35781614907918401612a3b565b60a084015260e08201516001600160401b0381116101a3578161492b918401612a3b565b60c084015261493d610100830161213c565b60e084015261494f610120830161213c565b610100840152614962610140830161213c565b6101208401526149756101608301612a18565b6101408401526149886101808301612a18565b61016084015261499b6101a08301612a18565b6101808401526149ae6101c0830161213c565b6101a08401526101e08201516001600160401b0381116101a3576149d29201612a3b565b6101c082015290565b6020818303126101a3578051906001600160401b0382116101a35701906040828203126101a35760405191614a0f836104c2565b80516001600160401b0381116101a357602092614a2d918301611851565b8352015161213481610ae0565b9060208251920151916bffffffffffffffffffffffff1983169260148210611e20575050565b815191600160401b83116104dd578154838355808410614ab3575b50602001905f5260205f205f915b838310614a965750505050565b6001602082614aa783945186614216565b01920192019190614a89565b825f528360205f2091820191015b818110614ace5750614a7b565b80614adb60019254611994565b80614ae8575b5001614ac1565b601f81118314614afd57505f81555b5f614ae1565b614b119083601f611f8c855f5260205f2090565b5f8181526020812081835555614af7565b60086101c06102e193614b36815185614216565b614b7f60018501614b546127c160208501516001600160401b031690565b60408301511515815468ff0000000000000000191690151560401b68ff000000000000000016179055565b614b90606082015160028601613f38565b614ba160808201516003860161435a565b614bb260a08201516004860161435a565b614bc360c082015160058601614a60565b614cf460068501614be16127c160e08501516001600160401b031690565b614c26614bf96101008501516001600160401b031690565b82546fffffffffffffffff0000000000000000191660409190911b67ffffffffffffffff60401b16178255565b614c66614c3e6101208501516001600160401b031690565b825467ffffffffffffffff60801b191660809190911b67ffffffffffffffff60801b16178255565b614c9b614c7b61014085015163ffffffff1690565b825463ffffffff60c01b191660c09190911b63ffffffff60c01b16178255565b61016083015163ffffffff1681547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1660e09190911b7fffffffff0000000000000000000000000000000000000000000000000000000016179055565b614d4060078501614d106145df61018085015163ffffffff1690565b6101a083015181546bffffffffffffffff00000000191660209190911b6bffffffffffffffff0000000016179055565b01519101614a60565b9293905f614d969693614d5a6147b4565b50614d63614829565b50604051633e6cc80160e01b8152977302aad30352a1182931cfb3b1d35ef3e260b4bb9993899283929160048401612baa565b0381845af494851561197d57614dce965f96615091575b50905f929160405180988194829363893d8a3760e01b845260048401612baa565b03915af493841561197d575f9461506d575b5060608301516001600160401b03614dff82516001600160401b031690565b16159081159161504e575b5061296f5760408301516129915760208351510361296057614e3961106660e08501516001600160401b031690565b61503f5760c0830191825151151580615001575b611047576101008401516001600160401b03166001600160401b03614e806110666101208801516001600160401b031690565b91161161104757614e9e61106660208701516001600160401b031690565b61295257845151612943575f93845b84518051871015614f4e57614ec487601492611e4d565b515103610dd257614ee2610db1614edc888851611e4d565b51614a3a565b906001600160a01b0382168015614f3f576001600160a01b03821680614f11575b505050600190950194614ead565b1015614f1e578080614f03565b633ea9028760e11b5f526001600160a01b039081166004521660245260445ffd5b6322a0b95360e21b5f5260045ffd5b50509350939150614f5f8385614b22565b5f5b60808401518051821015614faa5781614f7991611e4d565b5190815115614f9b57614f95612719600193603b890190612c66565b01614f61565b63386fd8e160e21b5f5260045ffd5b505091905f5b60a08301518051821015614ff95781614fc891611e4d565b5190815115614fea57614fe4612719600193603c890190612c66565b01614fb0565b63d5b4ed8960e01b5f5260045ffd5b505092509190565b5061501a6110666101008601516001600160401b031690565b1580614e4d57506150396110666101208601516001600160401b031690565b15614e4d565b63bff3253160e01b5f5260045ffd5b6020015161506591506001600160401b0316611066565b15155f614e0a565b61508a9194503d805f833e6150828183610533565b8101906149db565b925f614de0565b5f93929196506150b2903d8086833e6150aa8183610533565b810190614842565b95909192614dad565b8051602081106150fe5760208201517fff000000000000000000000000000000000000000000000000000000000000000161510d576040036150fe576040015190565b63f8935ab960e01b5f5260045ffd5b6310dfed1160e31b5f5260045ffd5b90813b156151da576001600160a01b0382168073ffffffffffffffffffffffffffffffffffffffff197f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a28051156151c2576151bf91615577565b50565b5050346151cb57565b63b398979f60e01b5f5260045ffd5b6001600160a01b0382634c9c8ce360e01b5f521660045260245ffd5b60ff5f5160206158b85f395f51905f525460401c161561521257565b631afcd79f60e31b5f5260045ffd5b6020818303126101a3578051906001600160401b0382116101a357016040818303126101a35760405191615254836104c2565b8151835260208201516001600160401b0381116101a3576121349201611851565b61529190615281613967565b5060208082518301019101615221565b80517ffffefffe00000000000000000000000000000000000000000000000000000000016153725760200151805181019060208201906020818403126101a3576020810151906001600160401b0382116101a357019160c090839003126101a357604051916152ff836104fd565b60208101516001600160401b0381116101a35782602061532192840101611851565b835260408101516001600160401b0381116101a3578261534b60c094602061536394860101611851565b60208601526060830151604086015260808301612147565b60608401520151608082015290565b63ca5b36ab60e01b5f5260045ffd5b80516020909101905f5b8181106153985750505090565b82516001600160a01b031684526020938401939092019160010161538b565b61061c916153c4916155bb565b909291926155ff565b9060706153eb9201906001600160a01b03165f5260205260405f2090565b546001600160401b038116801561542457421015613354576001600160a01b039060401c166001600160a01b038216810361314b575050565b631c9a361f60e11b5f5260045ffd5b6001600160401b039160706154599201906001600160a01b03165f5260205260405f2090565b541680156154245742101561335457565b615492906060602060405161547e816104c2565b5f8152015260208082518301019101615221565b61ffff6154a0825160f01c90565b16806154ab57505050565b6001036154e157602001906040825151036154d2576154cd6102e1925161567b565b615745565b635206f80b60e11b5f5260045ffd5b6307ccdb9560e41b5f5260045ffd5b6001600160401b03815116159081615506575090565b6001600160401b03915060200151161590565b6001600160401b03815116916001600160401b03815116808411938415615542575b5050505090565b1492509082615557575b50505f80808061553b565b6001600160401b0380929350602080920151169201511611155f8061554c565b5f8061061c93602081519101845af43d156155b3573d91615597836105b0565b926155a56040519485610533565b83523d5f602085013e6157db565b6060916157db565b81519190604183036155eb576155e49250602082015190606060408401519301515f1a90615835565b9192909190565b50505f9160029190565b6004111561026657565b615608816155f5565b80615611575050565b61561a816155f5565b600181036156315763f645eedf60e01b5f5260045ffd5b61563a816155f5565b60028103615655575063fce698f760e01b5f5260045260245ffd5b806156616003926155f5565b146156695750565b6335e2f38360e21b5f5260045260245ffd5b5f606060405161568a81610518565b82815282602082015282604082015201526040818051810103126101a35761061c6001600160801b03604060208401519301516157276156d96156cd8660801c90565b6001600160801b031690565b94615717846156eb6156cd8660801c90565b926157066156f76105a1565b6001600160801b03909a168a52565b166001600160801b03166020880152565b6001600160801b03166040860152565b166001600160801b03166060830152565b91908201809211611d4757565b906001600160801b036020830151166001600160801b03604084015116016001600160801b038111611d47576001600160801b0316811061578f5763684a336760e01b5f5260045ffd5b6156cd6157b66157c4926157b06156cd60608701516001600160801b031690565b90615738565b92516001600160801b031690565b10156157cc57565b6378ee18e160e01b5f5260045ffd5b906157ff57508051156157f057805190602001fd5b63d6bda27560e01b5f5260045ffd5b8151158061582c575b615810575090565b6001600160a01b0390639996b31560e01b5f521660045260245ffd5b50803b15615808565b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084116158ac579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa1561197d575f516001600160a01b038116156158a257905f905f90565b505f906001905f90565b5050505f916003919056fef0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00a26469706673582212203fc5d7506d388da4a5a226afe7794f8cff8b0a8986337c0f2a6d745ccd0051ba64736f6c634300081c0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a000000000000000000000000000cc4cba4e5660a87c21b4f2760cdb99dcb9264f9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a00000000000000000000000002308e9f793f0b57ee6f807998d54fcfb1e78288a000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000002933082028f30820234a003020102021422650cd65a9d3489f383b49552bf501b392706ac300a06082a8648ce3d0403023068311a301806035504030c11496e74656c2053475820526f6f74204341311a3018060355040a0c11496e74656c20436f72706f726174696f6e3114301206035504070c0b53616e746120436c617261310b300906035504080c024341310b3009060355040613025553301e170d3138303532313130343531305a170d3439313233313233353935395a3068311a301806035504030c11496e74656c2053475820526f6f74204341311a3018060355040a0c11496e74656c20436f72706f726174696f6e3114301206035504070c0b53616e746120436c617261310b300906035504080c024341310b30090603550406130255533059301306072a8648ce3d020106082a8648ce3d030107034200040ba9c4c0c0c86193a3fe23d6b02cda10a8bbd4e88e48b4458561a36e705525f567918e2edc88e40d860bd0cc4ee26aacc988e505a953558c453f6b0904ae7394a381bb3081b8301f0603551d2304183016801422650cd65a9d3489f383b49552bf501b392706ac30520603551d1f044b30493047a045a043864168747470733a2f2f6365727469666963617465732e7472757374656473657276696365732e696e74656c2e636f6d2f496e74656c534758526f6f7443412e646572301d0603551d0e0416041422650cd65a9d3489f383b49552bf501b392706ac300e0603551d0f0101ff04040302010630120603551d130101ff040830060101ff020101300a06082a8648ce3d0403020349003046022100e5bfe50911f92f428920dc368a302ee3d12ec5867ff622ec6497f78060c13c20022100e09d25ac7a0cb3e5e8e68fec5fa3bd416c47440bd950639d450edcbea4576aa200000000000000000000000000