0 txs
2 calls
constructor
constructor(address ibcClient_, address ibcConnection_, address ibcChannelHandshake_, address ibcChannelPacketSendRecv_, address ibcChannelPacketTimeout_, address ibcChannelUpgradeInitTryAck_, address ibcChannelUpgradeConfirmOpenTimeoutCancel_)
functions
getCanTransitionToFlushComplete
viewfunction getCanTransitionToFlushComplete(string portId, string channelId) view returns (bool)
getChannel
viewfunction getChannel(string portId, string channelId) view returns (tuple, bool)
getChannelUpgrade
viewfunction getChannelUpgrade(string portId, string channelId) view returns (tuple, bool)
getClient
viewfunction getClient(string clientId) view returns (address)
getClientByType
viewfunction getClientByType(string clientType) view returns (address)
getClientState
viewfunction getClientState(string clientId) view returns (bytes, bool)
getClientType
viewfunction getClientType(string clientId) view returns (string)
getCommitment
viewfunction getCommitment(bytes32 hashedPath) view returns (bytes32)
getCommitmentPrefix
viewfunction getCommitmentPrefix() view returns (bytes)
getCommitmentsSlot
purefunction getCommitmentsSlot() pure returns (bytes32)
getConnection
viewfunction getConnection(string connectionId) view returns (tuple, bool)
getConsensusState
viewfunction getConsensusState(string clientId, tuple height) view returns (bytes consensusStateBytes, bool)
getExpectedTimePerBlock
viewfunction getExpectedTimePerBlock() view returns (uint64)
getIBCModuleByChannel
viewfunction getIBCModuleByChannel(string portId, string channelId) view returns (address)
getIBCModuleByPort
viewfunction getIBCModuleByPort(string portId) view returns (address)
getNextSequenceAck
viewfunction getNextSequenceAck(string portId, string channelId) view returns (uint64)
getNextSequenceRecv
viewfunction getNextSequenceRecv(string portId, string channelId) view returns (uint64)
getNextSequenceSend
viewfunction getNextSequenceSend(string portId, string channelId) view returns (uint64)
getPacketReceipt
viewfunction getPacketReceipt(string portId, string channelId, uint64 sequence) view returns (uint8)
getRevisionNumber
viewfunction getRevisionNumber() view returns (uint64)
owner
viewfunction owner() view returns (address)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
routeUpdateClient
viewfunction routeUpdateClient(tuple msg_) view returns (address, bytes4, bytes)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
acknowledgePacket
nonpayablefunction acknowledgePacket(tuple)
bindPort
nonpayablefunction bindPort(string portId, address moduleAddress)
cancelChannelUpgrade
nonpayablefunction cancelChannelUpgrade(tuple)
channelCloseConfirm
nonpayablefunction channelCloseConfirm(tuple)
channelCloseInit
nonpayablefunction channelCloseInit(tuple)
channelOpenAck
nonpayablefunction channelOpenAck(tuple)
channelOpenConfirm
nonpayablefunction channelOpenConfirm(tuple)
channelOpenInit
nonpayablefunction channelOpenInit(tuple) returns (string, string)
channelOpenTry
nonpayablefunction channelOpenTry(tuple) returns (string, string)
channelUpgradeAck
nonpayablefunction channelUpgradeAck(tuple) returns (bool)
channelUpgradeConfirm
nonpayablefunction channelUpgradeConfirm(tuple) returns (bool)
channelUpgradeInit
nonpayablefunction channelUpgradeInit(tuple) returns (uint64)
channelUpgradeOpen
nonpayablefunction channelUpgradeOpen(tuple)
channelUpgradeTry
nonpayablefunction channelUpgradeTry(tuple) returns (bool, uint64)
connectionOpenAck
nonpayablefunction connectionOpenAck(tuple)
connectionOpenConfirm
nonpayablefunction connectionOpenConfirm(tuple)
connectionOpenInit
nonpayablefunction connectionOpenInit(tuple) returns (string)
connectionOpenTry
nonpayablefunction connectionOpenTry(tuple) returns (string)
createClient
nonpayablefunction createClient(tuple) returns (string)
initialize
nonpayablefunction initialize()
recvPacket
nonpayablefunction recvPacket(tuple)
registerClient
nonpayablefunction registerClient(string clientType, address client)
renounceOwnership
nonpayablefunction renounceOwnership()
sendPacket
nonpayablefunction sendPacket(string, string, tuple, uint64, bytes) returns (uint64)
setExpectedTimePerBlock
nonpayablefunction setExpectedTimePerBlock(uint64 expectedTimePerBlock_)
timeoutChannelUpgrade
nonpayablefunction timeoutChannelUpgrade(tuple)
timeoutOnClose
nonpayablefunction timeoutOnClose(tuple)
timeoutPacket
nonpayablefunction timeoutPacket(tuple)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateClient
nonpayablefunction updateClient(tuple)
updateClientCommitments
nonpayablefunction updateClientCommitments(string, tuple[])
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
wrappedRouteUpdateClient
nonpayablefunction wrappedRouteUpdateClient(tuple msg_) returns (address, bytes4, bytes)
writeAcknowledgement
nonpayablefunction writeAcknowledgement(string, string, uint64, bytes)
events
AcknowledgePacket
event AcknowledgePacket((uint64 sequence, string sourcePort, string sourceChannel, string destinationPort, string destinationChannel, bytes data, (uint64 revision_number, uint64 revision_height) timeoutHeight, uint64 timeoutTimestamp) packet, bytes acknowledgement)
ChannelUpgradeAck
event ChannelUpgradeAck(string portId, string channelId, uint64 upgradeSequence, uint8 channelState, (uint8 ordering, string[] connection_hops, string version) upgradeFields, ((uint64 revision_number, uint64 revision_height) height, uint64 timestamp) timeout, uint64 nextSequenceSend)
ChannelUpgradeConfirm
event ChannelUpgradeConfirm(string portId, string channelId, uint64 upgradeSequence, uint8 channelState)
ChannelUpgradeInit
event ChannelUpgradeInit(string portId, string channelId, uint64 upgradeSequence, (uint8 ordering, string[] connection_hops, string version) proposedUpgradeFields)
ChannelUpgradeOpen
event ChannelUpgradeOpen(string portId, string channelId, uint64 upgradeSequence)
ChannelUpgradeTry
event ChannelUpgradeTry(string portId, string channelId, uint64 upgradeSequence, (uint8 ordering, string[] connection_hops, string version) upgradeFields, ((uint64 revision_number, uint64 revision_height) height, uint64 timestamp) timeout, uint64 nextSequenceSend)
GeneratedChannelIdentifier
event GeneratedChannelIdentifier(string channelId)
GeneratedClientIdentifier
event GeneratedClientIdentifier(string clientId)
GeneratedConnectionIdentifier
event GeneratedConnectionIdentifier(string connectionId)
IBCModuleManagerChannelCapabilityClaimed
event IBCModuleManagerChannelCapabilityClaimed(string portId, string channelId, address module)
IBCModuleManagerPortCapabilityClaimed
event IBCModuleManagerPortCapabilityClaimed(string portId, address module)
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
RecvPacket
event RecvPacket((uint64 sequence, string sourcePort, string sourceChannel, string destinationPort, string destinationChannel, bytes data, (uint64 revision_number, uint64 revision_height) timeoutHeight, uint64 timeoutTimestamp) packet)
SendPacket
event SendPacket(uint64 sequence, string sourcePort, string sourceChannel, (uint64 revision_number, uint64 revision_height) timeoutHeight, uint64 timeoutTimestamp, bytes data)
TimeoutOnClose
event TimeoutOnClose((uint64 sequence, string sourcePort, string sourceChannel, string destinationPort, string destinationChannel, bytes data, (uint64 revision_number, uint64 revision_height) timeoutHeight, uint64 timeoutTimestamp) packet)
TimeoutPacket
event TimeoutPacket((uint64 sequence, string sourcePort, string sourceChannel, string destinationPort, string destinationChannel, bytes data, (uint64 revision_number, uint64 revision_height) timeoutHeight, uint64 timeoutTimestamp) packet)
Upgraded
event Upgraded(address indexed implementation)
WriteAcknowledgement
event WriteAcknowledgement(string destinationPortId, string destinationChannel, uint64 sequence, bytes acknowledgement)
WriteErrorReceipt
event WriteErrorReceipt(string portId, string channelId, uint64 upgradeSequence, string message)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
IBCChannelAckAlreadyProcessedInPreviousUpgrade
error IBCChannelAckAlreadyProcessedInPreviousUpgrade(uint64 sequence, uint64 ackStartSequence)
IBCChannelAcknowledgementAlreadyWritten
error IBCChannelAcknowledgementAlreadyWritten(string destinationPort, string destinationChannel, uint64 sequence)
IBCChannelAlreadyChannelExists
error IBCChannelAlreadyChannelExists()
IBCChannelCannotRecvNextUpgradePacket
error IBCChannelCannotRecvNextUpgradePacket(uint64 sequence, uint64 counterpartyNextSequenceSend)
IBCChannelChannelNotFound
error IBCChannelChannelNotFound(string portId, string channelId)
IBCChannelConnectionFeatureNotSupported
error IBCChannelConnectionFeatureNotSupported(uint8 ordering)
IBCChannelConnectionMultipleVersionsFound
error IBCChannelConnectionMultipleVersionsFound(string connectionId, uint256 length)
IBCChannelConnectionNotOpened
error IBCChannelConnectionNotOpened(string connectionId)
IBCChannelCounterpartyChannelIdNotEmpty
error IBCChannelCounterpartyChannelIdNotEmpty(string counterpartyChannelId)
IBCChannelEmptyAcknowledgement
error IBCChannelEmptyAcknowledgement()
IBCChannelFailedVerifyChannelState
error IBCChannelFailedVerifyChannelState(string clientId, bytes path, bytes value, bytes proof, (uint64 revision_number, uint64 revision_height) height)
IBCChannelFailedVerifyNextSequenceRecv
error IBCChannelFailedVerifyNextSequenceRecv(string clientId, bytes path, uint64 nextSequenceRecv, bytes proof, (uint64 revision_number, uint64 revision_height) height)
IBCChannelFailedVerifyPacketAcknowledgement
error IBCChannelFailedVerifyPacketAcknowledgement(string clientId, bytes path, bytes32 commitment, bytes proof, (uint64 revision_number, uint64 revision_height) height)
IBCChannelFailedVerifyPacketCommitment
error IBCChannelFailedVerifyPacketCommitment(string clientId, bytes path, bytes32 commitment, bytes proof, (uint64 revision_number, uint64 revision_height) height)
IBCChannelFailedVerifyPacketReceiptAbsence
error IBCChannelFailedVerifyPacketReceiptAbsence(string clientId, bytes path, bytes proof, (uint64 revision_number, uint64 revision_height) height)
IBCChannelInvalidConnectionHopsLength
error IBCChannelInvalidConnectionHopsLength(uint256 length)
IBCChannelPacketAlreadyProcessInPreviousUpgrade
error IBCChannelPacketAlreadyProcessInPreviousUpgrade(uint64 sequence, uint64 recvStartSequence)
IBCChannelPacketCommitmentMismatch
error IBCChannelPacketCommitmentMismatch(bytes32 expected, bytes32 actual)
IBCChannelPacketCommitmentNotFound
error IBCChannelPacketCommitmentNotFound(string portId, string channelId, uint64 sequence)
IBCChannelPacketMaybeAlreadyReceived
error IBCChannelPacketMaybeAlreadyReceived(uint64 sequence, uint64 nextSequenceRecv)
IBCChannelPacketReceiptAlreadyExists
error IBCChannelPacketReceiptAlreadyExists(string destinationPort, string destinationChannel, uint64 sequence)
IBCChannelPastPacketTimeoutHeight
error IBCChannelPastPacketTimeoutHeight((uint64 revision_number, uint64 revision_height) timeoutHeight, (uint64 revision_number, uint64 revision_height) latestHeight)
IBCChannelPastPacketTimeoutTimestamp
error IBCChannelPastPacketTimeoutTimestamp(uint64 timeoutTimestamp, uint64 latestTimestamp)
IBCChannelTimeoutNotReached
error IBCChannelTimeoutNotReached()
IBCChannelTimeoutPacketHeight
error IBCChannelTimeoutPacketHeight((uint64 revision_number, uint64 revision_height) currentHeight, (uint64 revision_number, uint64 revision_height) timeoutHeight)
IBCChannelTimeoutPacketTimestamp
error IBCChannelTimeoutPacketTimestamp(uint256 currentTimestamp, uint64 timeoutTimestamp)
IBCChannelUnexpectedChannelState
error IBCChannelUnexpectedChannelState(uint8 state)
IBCChannelUnexpectedNextSequenceAck
error IBCChannelUnexpectedNextSequenceAck(uint64 expected)
IBCChannelUnexpectedNextSequenceRecv
error IBCChannelUnexpectedNextSequenceRecv(string destinationPort, string destinationChannel, uint64 sequence, uint64 expected)
IBCChannelUnexpectedPacketDestination
error IBCChannelUnexpectedPacketDestination(string destinationPort, string destinationChannel)
IBCChannelUnexpectedPacketSource
error IBCChannelUnexpectedPacketSource(string sourcePort, string sourceChannel)
IBCChannelUnknownChannelOrder
error IBCChannelUnknownChannelOrder(uint8 ordering)
IBCChannelUnknownPacketReceiptCommitment
error IBCChannelUnknownPacketReceiptCommitment(bytes32 commitment)
IBCChannelUpgradeCounterpartyAlreadyFlushCompleted
error IBCChannelUpgradeCounterpartyAlreadyFlushCompleted()
IBCChannelUpgradeCounterpartyAlreadyUpgraded
error IBCChannelUpgradeCounterpartyAlreadyUpgraded()
IBCChannelUpgradeCounterpartyNotFlushingOrFlushcomplete
error IBCChannelUpgradeCounterpartyNotFlushingOrFlushcomplete(uint8 state)
IBCChannelUpgradeCounterpartyNotOpenOrFlushcomplete
error IBCChannelUpgradeCounterpartyNotOpenOrFlushcomplete(uint8 state)
IBCChannelUpgradeErrorReceiptEmpty
error IBCChannelUpgradeErrorReceiptEmpty()
IBCChannelUpgradeFailedVerifyMembership
error IBCChannelUpgradeFailedVerifyMembership(string clientId, string path, bytes value, bytes proof, (uint64 revision_number, uint64 revision_height) height)
IBCChannelUpgradeIncompatibleProposal
error IBCChannelUpgradeIncompatibleProposal()
IBCChannelUpgradeInvalidErrorReceiptSequence
error IBCChannelUpgradeInvalidErrorReceiptSequence()
IBCChannelUpgradeInvalidTimeout
error IBCChannelUpgradeInvalidTimeout()
IBCChannelUpgradeInvalidUpgradeFields
error IBCChannelUpgradeInvalidUpgradeFields()
IBCChannelUpgradeNoChanges
error IBCChannelUpgradeNoChanges()
IBCChannelUpgradeNoExistingUpgrade
error IBCChannelUpgradeNoExistingUpgrade()
IBCChannelUpgradeNotFlushcomplete
error IBCChannelUpgradeNotFlushcomplete(uint8 state)
IBCChannelUpgradeNotFlushing
error IBCChannelUpgradeNotFlushing(uint8 state)
IBCChannelUpgradeNotOpenOrFlushing
error IBCChannelUpgradeNotOpenOrFlushing(uint8 state)
IBCChannelUpgradeOldCounterpartyUpgradeSequence
error IBCChannelUpgradeOldCounterpartyUpgradeSequence()
IBCChannelUpgradeOldErrorReceiptSequence
error IBCChannelUpgradeOldErrorReceiptSequence()
IBCChannelUpgradeTimeoutHeightNotReached
error IBCChannelUpgradeTimeoutHeightNotReached()
IBCChannelUpgradeTimeoutTimestampNotReached
error IBCChannelUpgradeTimeoutTimestampNotReached()
IBCChannelUpgradeTimeoutUnallowedState
error IBCChannelUpgradeTimeoutUnallowedState()
IBCChannelUpgradeTryProposedConnectionHopsEmpty
error IBCChannelUpgradeTryProposedConnectionHopsEmpty()
IBCChannelUpgradeTryProposedConnectionHopsMismatch
error IBCChannelUpgradeTryProposedConnectionHopsMismatch()
IBCChannelUpgradeUnauthorizedChannelUpgrader
error IBCChannelUpgradeUnauthorizedChannelUpgrader(address upgrader)
IBCChannelUpgradeUnsupportedOrdering
error IBCChannelUpgradeUnsupportedOrdering(uint8 ordering)
IBCChannelUpgradeWriteOldErrorReceiptSequence
error IBCChannelUpgradeWriteOldErrorReceiptSequence(uint64 latestSequence, uint64 sequence)
IBCChannelZeroPacketTimeout
error IBCChannelZeroPacketTimeout()
IBCClientClientNotFound
error IBCClientClientNotFound(string clientId)
IBCClientConsensusStateNotFound
error IBCClientConsensusStateNotFound(string clientId, (uint64 revision_number, uint64 revision_height) consensusHeight)
IBCClientFailedUpdateClient
error IBCClientFailedUpdateClient(bytes4 selector, bytes args)
IBCClientInconsistentConsensusStateCommitment
error IBCClientInconsistentConsensusStateCommitment(bytes32 commitmentKey, bytes32 commitment, bytes32 prev)
IBCClientInvalidClientId
error IBCClientInvalidClientId(string clientId)
IBCClientNotActiveClient
error IBCClientNotActiveClient(string clientId)
IBCClientUnregisteredClientType
error IBCClientUnregisteredClientType(string clientType)
IBCConnectionAlreadyConnectionExists
error IBCConnectionAlreadyConnectionExists()
IBCConnectionEmptyConnectionCounterpartyVersions
error IBCConnectionEmptyConnectionCounterpartyVersions()
IBCConnectionFailedVerifyClientConsensusState
error IBCConnectionFailedVerifyClientConsensusState(string clientId, bytes path, bytes value, bytes proof, (uint64 revision_number, uint64 revision_height) height)
IBCConnectionFailedVerifyClientState
error IBCConnectionFailedVerifyClientState(string clientId, bytes path, bytes value, bytes proof, (uint64 revision_number, uint64 revision_height) height)
IBCConnectionFailedVerifyConnectionState
error IBCConnectionFailedVerifyConnectionState(string clientId, bytes path, bytes value, bytes proof, (uint64 revision_number, uint64 revision_height) height)
IBCConnectionIBCVersionNotSupported
error IBCConnectionIBCVersionNotSupported()
IBCConnectionInvalidCounterpartyConnectionIdentifier
error IBCConnectionInvalidCounterpartyConnectionIdentifier(string counterpartyConnectionId)
IBCConnectionInvalidHostConsensusStateProof
error IBCConnectionInvalidHostConsensusStateProof()
IBCConnectionInvalidSelfClientState
error IBCConnectionInvalidSelfClientState()
IBCConnectionNoMatchingVersionFound
error IBCConnectionNoMatchingVersionFound()
IBCConnectionUnexpectedConnectionState
error IBCConnectionUnexpectedConnectionState(uint8 state)
IBCConnectionVersionIdentifierNotEmpty
error IBCConnectionVersionIdentifierNotEmpty()
IBCConnectionVersionsAlreadySet
error IBCConnectionVersionsAlreadySet()
IBCHostChannelCapabilityAlreadyClaimed
error IBCHostChannelCapabilityAlreadyClaimed(string portId, string channelId)
IBCHostClientTypeAlreadyExists
error IBCHostClientTypeAlreadyExists(string clientType)
IBCHostFailedAuthenticateChannelCapability
error IBCHostFailedAuthenticateChannelCapability(string portId, string channelId, address caller)
IBCHostInvalidClientType
error IBCHostInvalidClientType(string clientType)
IBCHostInvalidLightClientAddress
error IBCHostInvalidLightClientAddress(address lcAddress)
IBCHostInvalidModuleAddress
error IBCHostInvalidModuleAddress(address moduleAddress)
IBCHostInvalidPortIdentifier
error IBCHostInvalidPortIdentifier(string portId)
IBCHostModuleChannelNotFound
error IBCHostModuleChannelNotFound(string portId, string channelId)
IBCHostModuleDoesNotSupportERC165
error IBCHostModuleDoesNotSupportERC165()
IBCHostModuleDoesNotSupportIIBCModule
error IBCHostModuleDoesNotSupportIIBCModule(address module, bytes4 interfaceId)
IBCHostModuleDoesNotSupportIIBCModuleInitializer
error IBCHostModuleDoesNotSupportIIBCModuleInitializer(address module, bytes4 interfaceId)
IBCHostModuleDoesNotSupportIIBCModuleUpgrade
error IBCHostModuleDoesNotSupportIIBCModuleUpgrade(address module)
IBCHostModulePortNotFound
error IBCHostModulePortNotFound(string portId)
IBCHostPortCapabilityAlreadyClaimed
error IBCHostPortCapabilityAlreadyClaimed(string portId)
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x6101803461022157601f6144b738819003918201601f19168301916001600160401b038311848410176102255780849260e0946040528339810103126102215780516001600160a01b03811691908290036102215760208101516001600160a01b038116908190036102215760408201516001600160a01b038116908190036102215760608301516001600160a01b03811691908290036102215760808401516001600160a01b03811693908490036102215760a08501516001600160a01b03811695908690036102215760c001516001600160a01b03811696908790036102215780158015610219575b8015610211575b8015610209575b8015610201575b80156101f9575b80156101f1575b6101ba5760805260a05260c05260e052610100526101205261014052306101605260405161427d908161023a823960805181818161150501528181612bca01526134ee015260a05181818161141201528181611c0c0152612412015260c05181610ca8015260e051818181610c2601528181612abd015261307401526101005181611149015261012051816116d6015261014051816104070152610160518181816118e80152611af40152f35b60405162461bcd60e51b815260206004820152600f60248201526e696e76616c6964206164647265737360881b6044820152606490fd5b50861561010d565b508515610106565b5084156100ff565b5083156100f8565b5082156100f1565b5081156100ea565b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe60806040526004361015610011575f80fd5b5f3560e01c80630db24ed7146103a0578063117e886a1461039b57806316fb38fd1461039657806318c1987014610391578063236ebd701461038c578063256c41991461038757806325cbc3a61461033257806327184c131461038257806327711a691461037d5780632d5386df146102e75780632e5e6d74146103785780633000217a14610373578063314c3c1c1461036e578063314d55c31461036957806332b5f86c14610364578063382db388146102c45780633fb7cb801461035f57806340d20d131461035a5780634e08c6f3146103555780634e61055a146103505780634f1ef2861461034b57806352d1902d14610346578063582418b61461034157806359ac54b81461033c57806359f37976146103375780635bd51b62146103325780636a728f2c146102ba5780636cf44bf41461032d5780636ecd6d4814610328578063715018a61461032357806376c81c421461031e5780637795820c146103195780637ad81754146103145780637eb789321461030f5780638129fc1c1461030a57806384515f5d146103055780638c145a93146103005780638da5cb5b146102fb57806391f62434146102f6578063921e51d4146102f15780639401dac3146102ec578063a06cb3a2146102e7578063aa18c8b1146102e2578063ad3cb1cc146102dd578063ae4cd201146102d8578063b5226815146102d3578063b56e79de146102ce578063b5ad7134146102c9578063c2333903146102c4578063cc93aebf146102bf578063d3c68ba0146102ba578063d5a24481146102b5578063da6cea55146102b0578063e211bb06146102ab578063ec75d829146102a6578063ee74d4da146102a1578063f2fde38b1461029c5763fb6c93f714610297575f80fd5b612d0b565b612cc0565b612c86565b612c29565b612bfc565b612bee565b612bb9565b611bfb565b612bab565b6115de565b612ae1565b612a1d565b6126f6565b612636565b6125b9565b6125ab565b61112a565b612585565b612577565b6124a6565b612436565b6123a2565b61232e565b6120bc565b612055565b611fbe565b611f57565b611ec1565b611de7565b611d8f565b611c50565b610ccc565b611bed565b611b6e565b611b44565b611aaf565b611869565b6116c5565b61165c565b611624565b6115ec565b61148a565b6113a2565b611394565b611287565b611138565b610fe2565b610d1d565b610c97565b610c15565b610a38565b610995565b610477565b6103f6565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126103f25760043567ffffffffffffffff81116103f25760a090600401809203126103f25790565b5f80fd5b346103f257610404366103a5565b507f00000000000000000000000000000000000000000000000000000000000000006136a2565b9181601f840112156103f25782359167ffffffffffffffff83116103f257602083818601950101116103f257565b73ffffffffffffffffffffffffffffffffffffffff8116036103f257565b346103f25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f25760043567ffffffffffffffff81116103f2576104c690369060040161042b565b6024356104d281610459565b6104da6136bf565b6104ed6104e8368486611833565b613afd565b156107255773ffffffffffffffffffffffffffffffffffffffff169173ffffffffffffffffffffffffffffffffffffffff61054561052b8484612d26565b5473ffffffffffffffffffffffffffffffffffffffff1690565b166106ec57821580156106e3575b6106a15761056761056384613f24565b1590565b6106795761057483614050565b801561066a575b15610604576105ff836105f37f672bdc33c6ad9acab4df1040165b17a2fb6b392cfd491d6c3732285ff0f6a1dc956105b38686612d26565b9073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60405193849384613c8d565b0390a1005b7fe63fbd47000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff83166004527facdd52ad0000000000000000000000000000000000000000000000000000000060245260445ffd5b50610674836140df565b61057b565b7f19a8c136000000000000000000000000000000000000000000000000000000005f5260045ffd5b7f8b423a4c000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff831660045260245ffd5b50308314610553565b6107216040519283927fe8aed45c000000000000000000000000000000000000000000000000000000008452600484016134db565b0390fd5b50906107216040519283927f0b8a0947000000000000000000000000000000000000000000000000000000008452600484016134db565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126103f25760043567ffffffffffffffff81116103f257816107a59160040161042b565b929092916024359067ffffffffffffffff82116103f2576107c89160040161042b565b9091565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6003111561080357565b6107cc565b9060038210156108035752565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9080602083519182815201916020808360051b8301019401925f915b83831061088357505050505090565b90919293946020806108bf837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086600196030187528951610815565b97019301930191939290610874565b92916020610993926040865261098a6040610947835160a0838b01526108f860e08b018251610808565b826109148b60606101008a8601519201526101408d0190610858565b9101517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff208b8303016101208c0152610815565b9267ffffffffffffffff858083015182828d83519060608483511691015201511660808d015201511660a08a0152015160c088019067ffffffffffffffff169052565b94019015159052565b565b346103f257610a12610a0c6109a93661075c565b925f60408096949396516109bc81611727565b81516109c781611727565b83815260606020820152606083820152815281516109e481611748565b82516109ef81611748565b848152846020820152815283602082015260208201520152612d5e565b91612e06565b610a256007600883015415159201612fac565b610a34604051928392836108ce565b0390f35b346103f25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f25760043567ffffffffffffffff81116103f257610a8790369060040161042b565b90602435610a9481610459565b610a9c6136bf565b610ab2610563610aad368686611833565b613cc2565b15610aed57506107216040519283927f61716875000000000000000000000000000000000000000000000000000000008452600484016134db565b73ffffffffffffffffffffffffffffffffffffffff610b0f61052b8585612d96565b16610b925773ffffffffffffffffffffffffffffffffffffffff169081158015610b89575b610b4757610b45926105b391612d96565b005b7fb9950919000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff821660045260245ffd5b50308214610b34565b506107216040519283927f6ada3f31000000000000000000000000000000000000000000000000000000008452600484016134db565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126103f25760043567ffffffffffffffff81116103f257608090600401809203126103f25790565b346103f257610c2336610bc8565b507f00000000000000000000000000000000000000000000000000000000000000006136a2565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126103f25760043567ffffffffffffffff81116103f25760e090600401809203126103f25790565b346103f257610ca536610c4a565b507f00000000000000000000000000000000000000000000000000000000000000006136a2565b346103f257610ca5366103a5565b6084359067ffffffffffffffff821682036103f257565b6044359067ffffffffffffffff821682036103f257565b359067ffffffffffffffff821682036103f257565b346103f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f25760043567ffffffffffffffff811681036103f257610d686136bf565b77ffffffffffffffffffffffffffffffffffffffffffffffff7fffffffffffffffff0000000000000000000000000000000000000000000000007f74277c96171a830beeb656543654929b9b37cec88976b4c31924799951550503549260c01b169116177f74277c96171a830beeb656543654929b9b37cec88976b4c31924799951550503555f80f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126103f2576004359067ffffffffffffffff82116103f2576107c89160040161042b565b6004111561080357565b9060048210156108035752565b6020610e98926040610e80610e708551606085526060850190610815565b8486015184820386860152610815565b93015190604081850391015251918181520190610815565b90565b92919060408452610eb8815160a0604087015260e0860190610815565b6020820151907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0868203016060870152815180825260208201916020808360051b8301019401925f915b838310610f775750505050508161098a6080610f63602094610f2f604061099399980151848c0190610e45565b60608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b83030160a08c0152610e52565b92015167ffffffffffffffff1660c0880152565b9091929394602080610fd3837fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0866001960301875289519083610fc38351604084526040840190610815565b9201519084818403910152610858565b97019301930191939290610f02565b346103f25761104c610ff336610df2565b905f608060405161100381611764565b606081526060602082015282604082015260405161102081611727565b606081526060602082015260405161103781611780565b60608152604082015260608201520152612dce565b61106c61105d600283015460ff1690565b9161106783610e3b565b613105565b90610a3460405192839215159083610e9b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc60409101126103f257602490565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbc60409101126103f257604490565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126103f25760043567ffffffffffffffff81116103f257604090600401809203126103f25790565b346103f257610ca5366110dd565b346103f25761114636610c4a565b507f00000000000000000000000000000000000000000000000000000000000000006136a2565b6007111561080357565b92916040845281516007811015610803576109939260209160408701526111a5828201516060880190610808565b61098a60a061127361123f61120c604086015160c060808d0152876111d98d61014084519160406101008201520190610815565b9101518c82037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00016101208e0152610815565b60608601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08c830301858d0152610858565b60808501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08b83030160c08c0152610815565b92015167ffffffffffffffff1660e0880152565b346103f257611317602061129a3661075c565b925f60a06040969396516112ad8161179c565b82815282858201526040516112c181611748565b60608152606086820152604082015260608082015260606080820152015282604051938492833781017f1952ed347963c5b7b1856335782fc9c26716d4219254baf3dfc6b26981b2dc0081520301902091612e06565b611334611325825460ff1690565b9161132f8361116d565b613233565b90610a3460405192839215159083611177565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126103f25760043567ffffffffffffffff81116103f25760c090600401809203126103f25790565b346103f257610ca536611347565b346103f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f25760043567ffffffffffffffff81116103f2577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc6101a091360301126103f2577f00000000000000000000000000000000000000000000000000000000000000006136a2565b7fffffffff00000000000000000000000000000000000000000000000000000000610e98949373ffffffffffffffffffffffffffffffffffffffff6060941683521660208201528160408201520190610815565b346103f2575f8061149a366110dd565b604051611501816114d560208201947f91f6243400000000000000000000000000000000000000000000000000000000865260248301613344565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826117b8565b51907f00000000000000000000000000000000000000000000000000000000000000005af461152e6133a9565b901561157057610a3461155f8260208073ffffffffffffffffffffffffffffffffffffffff9551830101910161344b565b906040939293519485941684611436565b80511561157f57805190602001fd5b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f726f757465557064617465436c69656e74206661696c656400000000000000006044820152606490fd5b346103f25761040436611347565b346103f2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f25760206040515f8152f35b346103f257602073ffffffffffffffffffffffffffffffffffffffff61165261164c36610df2565b90612d96565b5416604051908152f35b346103f257602067ffffffffffffffff60066116b78361167b3661075c565b9282604095929551938492833781017f1952ed347963c5b7b1856335782fc9c26716d4219254baf3dfc6b26981b2dc0081520301902091612e06565b015460801c16604051908152f35b346103f2576116d336611347565b507f00000000000000000000000000000000000000000000000000000000000000006136a2565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6060810190811067ffffffffffffffff82111761174357604052565b6116fa565b6040810190811067ffffffffffffffff82111761174357604052565b60a0810190811067ffffffffffffffff82111761174357604052565b6020810190811067ffffffffffffffff82111761174357604052565b60c0810190811067ffffffffffffffff82111761174357604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761174357604052565b67ffffffffffffffff811161174357601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b92919261183f826117f9565b9161184d60405193846117b8565b8294818452818301116103f2578281602093845f960137010152565b60407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f25760043561189f81610459565b60243567ffffffffffffffff81116103f257366023820112156103f2576118d0903690602481600401359101611833565b9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115611a6d575b50611a45576119206136bf565b604051917f52d1902d00000000000000000000000000000000000000000000000000000000835260208360048173ffffffffffffffffffffffffffffffffffffffff86165afa5f9381611a14575b506119b5577f4c9c8ce3000000000000000000000000000000000000000000000000000000005f5273ffffffffffffffffffffffffffffffffffffffff821660045260245ffd5b907f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc83036119e757610b459250613d9c565b7faa1d49a4000000000000000000000000000000000000000000000000000000005f52600483905260245ffd5b611a3791945060203d602011611a3e575b611a2f81836117b8565b81019061372b565b925f61196e565b503d611a25565b7fe07c8dba000000000000000000000000000000000000000000000000000000005f5260045ffd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f611913565b346103f2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f25773ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003611a455760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b346103f257602067ffffffffffffffff6006611b638361167b3661075c565b015416604051908152f35b346103f257611b7c36610df2565b73ffffffffffffffffffffffffffffffffffffffff611b9b8284612d26565b5416908115611baf57602082604051908152f35b90506107216040519283927f71adaca00000000000000000000000000000000000000000000000000000000084526020600485018181520191613306565b346103f257610c23366103a5565b346103f257611c0936610bc8565b507f00000000000000000000000000000000000000000000000000000000000000006136a2565b90611c48602091949394604084526040840190610815565b931515910152565b346103f25760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f25760043567ffffffffffffffff81116103f2575f611d24611ca5602093369060040161042b565b90611caf3661107f565b9173ffffffffffffffffffffffffffffffffffffffff611cd8611cd3368486611833565b61374c565b169267ffffffffffffffff611d3b604051988997889687967f6cf44bf4000000000000000000000000000000000000000000000000000000008852606060048901526064880191613306565b9383611d2f82610d08565b16602487015201610d08565b16604483015203915afa908115611d8a575f905f92611d65575b50610a3460405192839283611c30565b9050611d8391503d805f833e611d7b81836117b8565b81019061349a565b905f611d55565b6134d0565b346103f2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f25760206040517f1ee222554989dda120e26ecacf756fe1235cd8d726706b57517715dde4f0c9008152f35b346103f2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f257611e1d6136bf565b5f73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300547fffffffffffffffffffffffff000000000000000000000000000000000000000081167f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b346103f257611f345f611ed336610df2565b73ffffffffffffffffffffffffffffffffffffffff611ef6611cd3368486611833565b16906040518095819482937f76c81c420000000000000000000000000000000000000000000000000000000084526020600485018181520191613306565b03915afa908115611d8a575f905f92611d655750610a3460405192839283611c30565b346103f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f2576004355f527f1ee222554989dda120e26ecacf756fe1235cd8d726706b57517715dde4f0c900602052602060405f2054604051908152f35b346103f25760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f25760043567ffffffffffffffff81116103f25761200d90369060040161042b565b505060243567ffffffffffffffff81116103f257366023820112156103f25780600401359067ffffffffffffffff82116103f257602490369260061b010111156134ec575f80fd5b346103f257602073ffffffffffffffffffffffffffffffffffffffff60018261207d36610df2565b919082604051938492833781017f521e6acb905d37b69880078e1a941104ad5d8bcb8c5cf52f1d5f47d31739d500815203019020015416604051908152f35b346103f2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f2577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005467ffffffffffffffff61212f60ff604084901c16159267ffffffffffffffff1690565b1680159081612326575b600114908161231c575b159081612313575b506122eb57806121bf60017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000007ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b612270575b6121cc613512565b6121d257005b61223d7fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29080602081016105ff565b6122e6680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005416177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055565b6121c4565b7ff92ee8a9000000000000000000000000000000000000000000000000000000005f5260045ffd5b9050155f61214b565b303b159150612143565b829150612139565b346103f257610a3461238761238e602061234736610df2565b919082604051938492833781017f521e6acb905d37b69880078e1a941104ad5d8bcb8c5cf52f1d5f47d31739d50081520301902060405192838092612e94565b03826117b8565b604051918291602083526020830190610815565b346103f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f25760043567ffffffffffffffff81116103f2577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc61018091360301126103f2577f00000000000000000000000000000000000000000000000000000000000000006136a2565b346103f2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f257602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b346103f2576124eb5f6124b8366110dd565b604051809381927f32b5f86c00000000000000000000000000000000000000000000000000000000835260048301613344565b0381305afa8015611d8a575f905f925f91612512575b50610a349060405193849384611436565b925050503d805f833e61252581836117b8565b8101906060818303126103f25780519161253e83610459565b61254a602083016133d8565b9160408101519167ffffffffffffffff83116103f257610a349261256e9201613405565b92919290612501565b346103f25761040436610c4a565b346103f25760206125a16125983661075c565b92919091613533565b6040519015158152f35b346103f257611146366103a5565b346103f2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f257610a346040516125f86040826117b8565b600581527f352e302e300000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610815565b346103f25760c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f25760043567ffffffffffffffff81116103f25761268590369060040161042b565b505060243567ffffffffffffffff81116103f2576126a790369060040161042b565b50506126b2366110ae565b506126bb610cda565b5060a43567ffffffffffffffff81116103f2576126dc90369060040161042b565b5050613072565b9190602083019260028210156108035752565b346103f25760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f25760043567ffffffffffffffff81116103f25761274590369060040161042b565b60243567ffffffffffffffff81116103f25761276590369060040161042b565b909267ffffffffffffffff612778610cf1565b1690815f927a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008210156129f5575b806d04ee2d6d415b85acef8100000000600a9210156129d9575b662386f26fc100008110156129c4575b6305f5e1008110156129b2575b6127108110156129a2575b6064811015612993575b1015612988575b61285c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60216128266001870161415f565b958601015b01917f3031323334353637383961626364656600000000000000000000000000000000600a82061a8353600a900490565b90811561288e5761285c907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9061282b565b505061294661297c946114d56128e894612940612917610a349a612976996128e86128ee6040519a8b9960208b019d8e600f907f72656365697074732f706f7274732f000000000000000000000000000000000081520190565b91612d19565b7f2f6368616e6e656c732f000000000000000000000000000000000000000000008152600a0190565b7f2f73657175656e6365732f0000000000000000000000000000000000000000008152600b0190565b9061373a565b5190205f527f1ee222554989dda120e26ecacf756fe1235cd8d726706b57517715dde4f0c90060205260405f2090565b5461396b565b604051918291826126e3565b6001909201916127f4565b600290606490049401936127ed565b60049061271090049401936127e3565b6008906305f5e10090049401936127d8565b601090662386f26fc1000090049401936127cb565b6020906d04ee2d6d415b85acef810000000090049401936127bb565b50604092507a184f03e93ff9f4daa797ed6e38ed64bf6a1f01000000000000000081046127a1565b346103f25760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f25760043567ffffffffffffffff81116103f257612a6c90369060040161042b565b505060243567ffffffffffffffff81116103f257612a8e90369060040161042b565b5050612a98610cf1565b5060643567ffffffffffffffff81116103f257612ab990369060040161042b565b50507f00000000000000000000000000000000000000000000000000000000000000006136a2565b346103f2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f257610a34604051612b206040826117b8565b600381527f69626300000000000000000000000000000000000000000000000000000000006020820152604051918291602083526020830190610815565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126103f25760043567ffffffffffffffff81116103f257606090600401809203126103f25790565b346103f2576116d336612b5e565b346103f257612bc736612b5e565b507f00000000000000000000000000000000000000000000000000000000000000006136a2565b346103f257612bc7366110dd565b346103f257602067ffffffffffffffff6006612c1b8361167b3661075c565b015460401c16604051908152f35b346103f2575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f25760207f74277c96171a830beeb656543654929b9b37cec88976b4c319247999515505035460c01c604051908152f35b346103f2576020612ca2612c993661075c565b929190916139e9565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b346103f25760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103f257610b45600435612cfe81610459565b612d066136bf565b6135b5565b346103f2576116d336610bc8565b908092918237015f815290565b60209082604051938492833781017f74277c96171a830beeb656543654929b9b37cec88976b4c3192479995155050181520301902090565b60209082604051938492833781017f1952ed347963c5b7b1856335782fc9c26716d4219254baf3dfc6b26981b2dc0081520301902090565b60209082604051938492833781017f74277c96171a830beeb656543654929b9b37cec88976b4c3192479995155050081520301902090565b60209082604051938492833781017f9ef02a9acd7179d999aa130fa65a34ac06dd2f1bae667ae0fb5500040879380081520301902090565b6020919283604051948593843782019081520301902090565b60038210156108035752565b67ffffffffffffffff81116117435760051b60200190565b90600182811c92168015612e8a575b6020831014612e5d57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691612e52565b5f9291815491612ea383612e43565b8083529260018116908115612ef85750600114612ebf57505050565b5f9081526020812093945091925b838310612ede575060209250010190565b600181602092949394548385870101520191019190612ecd565b905060209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b90610993612f489260405193848092612e94565b03836117b8565b908154612f5b81612e2b565b92612f6960405194856117b8565b81845260208401905f5260205f205f915b838310612f875750505050565b600160208192604051612f9e816123878189612e94565b815201920192019190612f7a565b90610993604051612fbc81611727565b6040613063600583968351612fd081611727565b612fde60ff83541682612e1f565b612fea60018301612f4f565b60208201528451613002816123878160028701612e94565b858201528552835161301381611748565b845161301e81611748565b67ffffffffffffffff60038401548181168352871c166020820152815267ffffffffffffffff60048301541660208201526020860152015467ffffffffffffffff1690565b67ffffffffffffffff16910152565b7f00000000000000000000000000000000000000000000000000000000000000006136a2565b60048210156108035752565b90604051916130b283611727565b60408381516130c5816123878187612e94565b815281516130da816123878160018801612e94565b602082015260026130ff8351946130f086611780565b61238785518094819301612e94565b83520152565b9060405161311281611764565b8092604051613125816123878185612e94565b825260018101805461313681612e2b565b9161314460405193846117b8565b81835260208301905f5260205f205f915b8383106131ac575050505061306360068493608093602061099397015261318c613183600283015460ff1690565b60408701613098565b613198600382016130a4565b6060860152015467ffffffffffffffff1690565b600260206001926040516131bf81611748565b6040516131d081612387818a612e94565b81526131dd858701612f4f565b83820152815201920192019190613155565b906001602060405161320081611748565b61322f8195604051613216816123878185612e94565b83526132286040518096819301612e94565b03846117b8565b0152565b90604051916132418361179c565b8281549160ff831692600784101561080357600560a09261327460ff6130639461099398885260081c1660208701612e1f565b613280600182016131ef565b604086015261329160038201612f4f565b60608601526132a260048201612f34565b6080860152015467ffffffffffffffff1690565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156103f257016020813591019167ffffffffffffffff82116103f25781360383136103f257565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b90610e98916020815261337961336e61335d84806132b6565b604060208601526060850191613306565b9260208101906132b6565b9160407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082860301910152613306565b3d156133d3573d906133ba826117f9565b916133c860405193846117b8565b82523d5f602084013e565b606090565b51907fffffffff00000000000000000000000000000000000000000000000000000000821682036103f257565b81601f820112156103f25780519061341c826117f9565b9261342a60405194856117b8565b828452602083830101116103f257815f9260208093018386015e8301015290565b916060838303126103f257825161346181610459565b9261346e602082016133d8565b92604082015167ffffffffffffffff81116103f257610e989201613405565b519081151582036103f257565b91906040838203126103f25782519067ffffffffffffffff82116103f2576134c9602091610e98938601613405565b930161348d565b6040513d5f823e3d90fd5b916020610e98938181520191613306565b7f00000000000000000000000000000000000000000000000000000000000000006136a2565b61351a613ecd565b613522613ecd565b61352a613ecd565b610993336135b5565b91929092613575604051858582376020818781017f1952ed347963c5b7b1856335782fc9c26716d4219254baf3dfc6b26981b2dc008152030190208383612e06565b9384549360ff85166007811015610803576005036135ab5760ff67ffffffffffffffff6005610e98980154169560081c16613850565b5050505050505f90565b73ffffffffffffffffffffffffffffffffffffffff1680156136765773ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054827fffffffffffffffffffffffff00000000000000000000000000000000000000008216177f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b7f1e4fbdf7000000000000000000000000000000000000000000000000000000005f525f60045260245ffd5b5f8091368280378136915af43d5f803e156136bb573d5ff35b3d5ffd5b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300541633036136ff57565b7f118cdaa7000000000000000000000000000000000000000000000000000000005f523360045260245ffd5b908160209103126103f2575190565b805191908290602001825e015f815290565b73ffffffffffffffffffffffffffffffffffffffff6001604051602081613773818761373a565b7f521e6acb905d37b69880078e1a941104ad5d8bcb8c5cf52f1d5f47d31739d5008152030190200154169081156137a8575090565b610721906040519182917f8beef4740000000000000000000000000000000000000000000000000000000083526020600484018181520190610815565b908160209103126103f257610e989061348d565b9496959173ffffffffffffffffffffffffffffffffffffffff9360609561383567ffffffffffffffff946138439460808b5260808b0191613306565b9188830360208a0152613306565b9616604085015216910152565b6002909493919294613861816107f9565b14613912575b836138d461389b613882613882613882888760209b8a6139e9565b73ffffffffffffffffffffffffffffffffffffffff1690565b93604051978896879586957f4c707d970000000000000000000000000000000000000000000000000000000087523394600488016137f9565b03915afa908115611d8a575f916138e9575090565b610e98915060203d60201161390b575b61390381836117b8565b8101906137e5565b503d6138f9565b60066139286139218685612d5e565b8584612e06565b015467ffffffffffffffff61395a61394d8284169360801c67ffffffffffffffff1690565b67ffffffffffffffff1690565b911603613867575050505050600190565b8061397557505f90565b60405160208101907f01000000000000000000000000000000000000000000000000000000000000008252600181526139af6021826117b8565b51902081036139be5750600190565b7f03f233f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b9173ffffffffffffffffffffffffffffffffffffffff613a3d604051848682376020818681017f74277c96171a830beeb656543654929b9b37cec88976b4c319247999515505028152030190208684612e06565b5416938415613a4d575050505090565b9061072191613a8f6040519586957f8e64f0b9000000000000000000000000000000000000000000000000000000008752604060048801526044870191613306565b917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc858403016024860152613306565b908151811015613ad0570160200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b805190600282108015613c83575b613c7d575f5b828110613b2057505050600190565b613b65613b5f613b59613b338486613abf565b517fff000000000000000000000000000000000000000000000000000000000000001690565b60f81c90565b60ff1690565b606181101580613c72575b159081613c53575b81613c34575b81613bf4575b81613b9e575b50613b9757600101613b11565b5050505f90565b6023811491508115613be9575b8115613bde575b8115613bd3575b8115613bc8575b50155f613b8a565b603e9150145f613bc0565b603c81149150613bb9565b605d81149150613bb2565b605b81149150613bab565b9050602e81148015613c2a575b8015613c20575b8015613c16575b1590613b84565b50602d8114613c0f565b50602b8114613c08565b50605f8114613c01565b9050604181101580613c48575b1590613b7e565b50605a811115613c41565b9050603081101580613c67575b1590613b78565b506039811115613c60565b50607a811115613b70565b50505f90565b5060808211613b0b565b91613cbb60209273ffffffffffffffffffffffffffffffffffffffff92969596604086526040860191613306565b9416910152565b80518015613c7d57600781108015613d92575b613c7d575f5b818110613cea57505050600190565b613cfd613b5f613b59613b338487613abf565b806061111580613d87575b15613d1857506001905b01613cdb565b602d8103613d61575080158015613d36575b613b9757600190613d12565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82018114613d2a565b80603011159081613d7b575b5015613b9757600190613d12565b6039915011155f613d6d565b50607a811115613d08565b50603e8111613cd5565b90813b15613e8b5773ffffffffffffffffffffffffffffffffffffffff8216807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a2805115613e5a57613e5791614142565b50565b505034613e6357565b7fb398979f000000000000000000000000000000000000000000000000000000005f5260045ffd5b73ffffffffffffffffffffffffffffffffffffffff827f4c9c8ce3000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615613efc57565b7fd7e6bcf8000000000000000000000000000000000000000000000000000000005f5260045ffd5b60205f604051828101907f01ffc9a70000000000000000000000000000000000000000000000000000000082527f01ffc9a700000000000000000000000000000000000000000000000000000000602482015260248152613f866044826117b8565b519084617530fa903d5f519083614044575b508261403a575b5081613fa9575090565b602091505f90604051838101907f01ffc9a70000000000000000000000000000000000000000000000000000000082527fffffffff0000000000000000000000000000000000000000000000000000000060248201526024815261400e6044826117b8565b5191617530fa5f513d8261402e575b508161402857501590565b15919050565b6020111591505f61401d565b151591505f613f9f565b6020111592505f613f98565b5f602091604051838101907f01ffc9a70000000000000000000000000000000000000000000000000000000082527f1dbfa052000000000000000000000000000000000000000000000000000000006024820152602481526140b36044826117b8565b5191617530fa5f513d826140d3575b50816140cc575090565b9050151590565b6020111591505f6140c2565b5f602091604051838101907f01ffc9a70000000000000000000000000000000000000000000000000000000082527facdd52ad000000000000000000000000000000000000000000000000000000006024820152602481526140b36044826117b8565b5f80610e9893602081519101845af46141596133a9565b916141ae565b90614169826117f9565b61417660405191826117b8565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06141a482946117f9565b0190602036910137565b906141eb57508051156141c357805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b8151158061423e575b6141fc575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b156141f456fea2646970667358221220aa32bef42b80092e574133f0168069161777a2822a3218120e7b02b75258b7a764736f6c634300081c0033000000000000000000000000f7eec809713aaf21909f550ec9b6f5b0650a70190000000000000000000000006389e2f0bc4489ff89a60fb28a346c4fe68fd1d0000000000000000000000000d01865e51de1a33251c2c0b5b090fa184ce1c71500000000000000000000000092f7b75d6d0bdf1c3ab0f4f3364356f38f9f4ef300000000000000000000000088fe4199a941e4ed274d41a425c71dc0c03fd12b000000000000000000000000778d9c69d8fa0a97880af3f4bf3f9715d96f1586000000000000000000000000b947028d65e17bb0fd1041606c584e1e99df938b