0 txs
774 calls
constructor
constructor(address _application)
functions
application
viewfunction application() view returns (address)
cohortFingerprint
purefunction cohortFingerprint(address[] nodes) pure returns (bytes32)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
defaultAdmin
viewfunction defaultAdmin() view returns (address)
defaultAdminDelay
viewfunction defaultAdminDelay() view returns (uint48)
defaultAdminDelayIncreaseWait
viewfunction defaultAdminDelayIncreaseWait() view returns (uint48)
expectedTranscriptSize
purefunction expectedTranscriptSize(uint16 dkgSize, uint16 threshold) pure returns (uint256)
feeModelsRegistry
viewfunction feeModelsRegistry(address) view returns (bool)
getAccessController
viewfunction getAccessController(uint32 ritualId) view returns (address)
getAuthority
viewfunction getAuthority(uint32 ritualId) view returns (address)
getFeeModel
viewfunction getFeeModel(uint32 ritualId) view returns (address)
getInitiator
viewfunction getInitiator(uint32 ritualId) view returns (address)
getParticipant
viewfunction getParticipant(uint32 ritualId, address provider, bool transcript) view returns (tuple)
getParticipantFromProvider
viewfunction getParticipantFromProvider(uint32 ritualId, address provider) view returns (tuple)
getParticipants
viewfunction getParticipants(uint32 ritualId, uint256 startIndex, uint256 maxParticipants, bool includeTranscript) view returns (tuple[])
getParticipants
viewfunction getParticipants(uint32 ritualId) view returns (tuple[])
getProviderPublicKey
viewfunction getProviderPublicKey(address provider, uint256 ritualId) view returns (tuple)
getProviders
viewfunction getProviders(uint32 ritualId) view returns (address[])
getPublicKeyFromRitualId
viewfunction getPublicKeyFromRitualId(uint32 ritualId) view returns (tuple)
getRitualIdFromPublicKey
viewfunction getRitualIdFromPublicKey(tuple dkgPublicKey) view returns (uint32 ritualId)
getRitualState
viewfunction getRitualState(uint32 ritualId) view returns (uint8)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getThresholdForRitualSize
purefunction getThresholdForRitualSize(uint16 size) pure returns (uint16)
getTimestamps
viewfunction getTimestamps(uint32 ritualId) view returns (uint32 initTimestamp, uint32 endTimestamp)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isEncryptionAuthorized
viewfunction isEncryptionAuthorized(uint32 ritualId, bytes evidence, bytes ciphertextHeader) view returns (bool)
isParticipant
viewfunction isParticipant(uint32 ritualId, address provider) view returns (bool)
isProviderPublicKeySet
viewfunction isProviderPublicKeySet(address provider) view returns (bool)
isRitualActive
viewfunction isRitualActive(uint32 ritualId) view returns (bool)
maxDkgSize
viewfunction maxDkgSize() view returns (uint16)
numberOfRituals
viewfunction numberOfRituals() view returns (uint256)
owner
viewfunction owner() view returns (address)
pendingDefaultAdmin
viewfunction pendingDefaultAdmin() view returns (address newAdmin, uint48 schedule)
pendingDefaultAdminDelay
viewfunction pendingDefaultAdminDelay() view returns (uint48 newDelay, uint48 schedule)
rituals
viewfunction rituals(uint256 ritualId) view returns (address initiator, uint32 initTimestamp, uint32 endTimestamp, uint16 totalTranscripts, uint16 totalAggregations, address authority, uint16 dkgSize, uint16 threshold, bool aggregationMismatch, address accessController, tuple publicKey, bytes aggregatedTranscript, address feeModel)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
timeout
viewfunction timeout() view returns (uint32)
TREASURY_ROLE
viewfunction TREASURY_ROLE() view returns (bytes32)
acceptDefaultAdminTransfer
nonpayablefunction acceptDefaultAdminTransfer()
approveFeeModel
nonpayablefunction approveFeeModel(address feeModel)
beginDefaultAdminTransfer
nonpayablefunction beginDefaultAdminTransfer(address newAdmin)
cancelDefaultAdminTransfer
nonpayablefunction cancelDefaultAdminTransfer()
changeDefaultAdminDelay
nonpayablefunction changeDefaultAdminDelay(uint48 newDelay)
extendRitual
nonpayablefunction extendRitual(uint32 ritualId, uint32 duration)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(uint32 _timeout, uint16 _maxDkgSize, address _admin)
initializeNumberOfRituals
nonpayablefunction initializeNumberOfRituals()
initiateRitual
nonpayablefunction initiateRitual(address feeModel, address[] providers, address authority, uint32 duration, address accessController) returns (uint32)
postAggregation
nonpayablefunction postAggregation(uint32 ritualId, bytes aggregatedTranscript, tuple dkgPublicKey, bytes decryptionRequestStaticKey)
postTranscript
nonpayablefunction postTranscript(uint32 ritualId, bytes transcript)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
rollbackDefaultAdminDelay
nonpayablefunction rollbackDefaultAdminDelay()
setMaxDkgSize
nonpayablefunction setMaxDkgSize(uint16 newSize)
setProviderPublicKey
nonpayablefunction setProviderPublicKey(tuple publicKey)
setReimbursementPool
nonpayablefunction setReimbursementPool(address pool)
setTimeout
nonpayablefunction setTimeout(uint32 newTimeout)
transferRitualAuthority
nonpayablefunction transferRitualAuthority(uint32 ritualId, address newAuthority)
withdrawAllTokens
nonpayablefunction withdrawAllTokens(address token)
events
AggregationPosted
event AggregationPosted(uint32 indexed ritualId, address indexed node, bytes32 aggregatedTranscriptDigest)
DefaultAdminDelayChangeCanceled
event DefaultAdminDelayChangeCanceled()
DefaultAdminDelayChangeScheduled
event DefaultAdminDelayChangeScheduled(uint48 newDelay, uint48 effectSchedule)
DefaultAdminTransferCanceled
event DefaultAdminTransferCanceled()
DefaultAdminTransferScheduled
event DefaultAdminTransferScheduled(address indexed newAdmin, uint48 acceptSchedule)
EndRitual
event EndRitual(uint32 indexed ritualId, bool successful)
FeeModelApproved
event FeeModelApproved(address feeModel)
Initialized
event Initialized(uint64 version)
MaxDkgSizeChanged
event MaxDkgSizeChanged(uint16 oldSize, uint16 newSize)
ParticipantPublicKeySet
event ParticipantPublicKeySet(uint32 indexed ritualId, address indexed participant, (bytes32 word0, bytes32 word1, bytes32 word2) publicKey)
ReimbursementPoolSet
event ReimbursementPoolSet(address indexed pool)
RitualAuthorityTransferred
event RitualAuthorityTransferred(uint32 indexed ritualId, address indexed previousAuthority, address indexed newAuthority)
RitualExtended
event RitualExtended(uint32 indexed ritualId, uint32 endTimestamp)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
StartAggregationRound
event StartAggregationRound(uint32 indexed ritualId)
StartRitual
event StartRitual(uint32 indexed ritualId, address indexed authority, address[] participants)
TimeoutChanged
event TimeoutChanged(uint32 oldTimeout, uint32 newTimeout)
TranscriptPosted
event TranscriptPosted(uint32 indexed ritualId, address indexed node, bytes32 transcriptDigest)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlEnforcedDefaultAdminDelay
error AccessControlEnforcedDefaultAdminDelay(uint48 schedule)
AccessControlEnforcedDefaultAdminRules
error AccessControlEnforcedDefaultAdminRules()
AccessControlInvalidDefaultAdmin
error AccessControlInvalidDefaultAdmin(address defaultAdmin)
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
FailedInnerCall
error FailedInnerCall()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x60c06040523480156200001157600080fd5b506040516200565438038062005654833981016040819052620000349162000176565b6001600160a01b038116608081905260408051637841064960e11b8152905163f0820c92916004808201926020929091908290030181865afa1580156200007f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000a59190620001a8565b6001600160601b031660a052620000bb620000c2565b50620001d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620001135760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620001735780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6000602082840312156200018957600080fd5b81516001600160a01b0381168114620001a157600080fd5b9392505050565b600060208284031215620001bb57600080fd5b81516001600160601b0381168114620001a157600080fd5b60805160a05161542a6200022a6000396000612e72015260008181610481015281816115350152818161177401528181611b5601528181611bfc0152818161217f015281816122250152612e9d015261542a6000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c806391d14854116101e9578063cc8463c81161010f578063dc52537c116100ad578063f430c5c81161007c578063f430c5c8146108ac578063f456ad64146108bf578063fad7d6b8146108d2578063fc9c3965146108f257600080fd5b8063dc52537c1461085a578063dc80d1041461087d578063ec9ff25114610890578063f1e0ff19146108a357600080fd5b8063d11a57ec116100e9578063d11a57ec14610805578063d3c978f81461082c578063d547741f1461083f578063d602b9fd1461085257600080fd5b8063cc8463c8146107c7578063cefc1429146107cf578063cf6eefb7146107d757600080fd5b8063a878aee611610187578063b8c45cc911610156578063b8c45cc914610751578063c20f75eb14610771578063c6968ca214610784578063c700f1fb1461079757600080fd5b8063a878aee614610710578063aa2853ff14610723578063acfd36aa1461072b578063aeafcb061461073e57600080fd5b80639c48937b116101c35780639c48937b146106bb578063a1eda53c146106ce578063a217fddf146106f5578063a5f1b8fe146106fd57600080fd5b806391d14854146106825780639b848a18146106955780639c488a5a146106a857600080fd5b80633d796abc116102ce578063649a5ec71161026c57806384ef8ffc1161023b57806384ef8ffc146106345780638a42e63f1461063c5780638cf95061146106675780638da5cb5b1461067a57600080fd5b8063649a5ec7146105d65780636b75f53e146105e957806370dea79a146105fc57806380cb82981461062157600080fd5b806353f7a4b0116102a857806353f7a4b01461058a578063545c6c0a1461059d578063618c542b146105b0578063634e93da146105c357600080fd5b80633d796abc1461052b57806346f5c620146105575780634e62cf3f1461056a57600080fd5b806326e4ca821161033b5780632afeecfe116103155780632afeecfe146104dc5780632f2eaebc146104ef5780632f2ff15d1461050557806336568abe1461051857600080fd5b806326e4ca821461047c57806327842adb146104a357806329555101146104c957600080fd5b8063068e077311610377578063068e0773146104065780630aa6220b14610431578063214b02ad1461043b578063248a9ca31461045b57600080fd5b806301ad0e731461039e57806301ffc9a7146103c7578063022d63fb146103ea575b600080fd5b6103b16103ac366004614580565b610927565b6040516103be919061465c565b60405180910390f35b6103da6103d536600461466f565b610ac2565b60405190151581526020016103be565b620697805b60405165ffffffffffff90911681526020016103be565b610419610414366004614699565b610ae7565b6040516001600160a01b0390911681526020016103be565b610439610b05565b005b61044e610449366004614699565b610b1b565b6040516103be91906146b4565b61046e610469366004614718565b610cd4565b6040519081526020016103be565b6104197f000000000000000000000000000000000000000000000000000000000000000081565b6104b66104b1366004614743565b610cf6565b60405161ffff90911681526020016103be565b6104396104d736600461475e565b610d0e565b6103b16104ea36600461479f565b610ef7565b6001546104b690640100000000900461ffff1681565b6104396105133660046147e8565b6110aa565b6104396105263660046147e8565b6110d6565b61053e610539366004614718565b61119a565b6040516103be9d9c9b9a9998979695949392919061480d565b610439610565366004614743565b6113c8565b61057d610578366004614699565b611442565b6040516103be91906148d5565b610439610598366004614922565b61151a565b6104396105ab36600461493a565b6117de565b6104396105be366004614976565b611915565b6104396105d1366004614976565b611a30565b6104396105e4366004614993565b611a44565b6104396105f73660046149fc565b611a58565b60015461060c9063ffffffff1681565b60405163ffffffff90911681526020016103be565b61044e61062f366004614a4e565b611df4565b6104196120d5565b6103da61064a366004614976565b6001600160a01b0316600090815260066020526040902054151590565b610439610675366004614a96565b6120ec565b610419612724565b6103da6106903660046147e8565b612733565b6104196106a3366004614699565b61276b565b61060c6106b6366004614b61565b612786565b61046e6106c9366004614bfa565b6127dc565b6106d661280f565b6040805165ffffffffffff9384168152929091166020830152016103be565b61046e600081565b61041961070b366004614699565b612894565b61043961071e366004614976565b6128b4565b6104396129a6565b61060c610739366004614c3b565b612a8b565b6103da61074c366004614d52565b613030565b61076461075f366004614699565b613112565b6040516103be9190614dc5565b6103da61077f366004614699565b6131e4565b6103da610792366004614580565b6131fb565b6107aa6107a5366004614699565b61321f565b6040805163ffffffff9384168152929091166020830152016103be565b6103ef61324e565b6104396132de565b6107df61331e565b604080516001600160a01b03909316835265ffffffffffff9091166020830152016103be565b61046e7fe1dcbdb91df27212a29bc27177c840cf2f819ecf2187432e1fac86c2dd5dfca981565b61046e61083a366004614de6565b61334c565b61043961084d3660046147e8565b61338d565b6104396133b5565b6103da610868366004614976565b60086020526000908152604090205460ff1681565b61043961088b366004614699565b6133c8565b61043961089e366004614580565b613434565b61046e600a5481565b6104196108ba366004614699565b613547565b6104396108cd366004614976565b613567565b6108e56108e0366004614699565b61364e565b6040516103be9190614e26565b610905610900366004614e4e565b613661565b60408051825181526020808401519082015291810151908201526060016103be565b60408051608081018252600080825260208201526060918101829052818101919091526000610955846137a1565b90506000610963828561384f565b6040805160808101825282546001600160a01b0381168252600160a01b900460ff16151560208201526001830180549193928401916109a190614e7a565b80601f01602080910402602001604051908101604052809291908181526020018280546109cd90614e7a565b8015610a1a5780601f106109ef57610100808354040283529160200191610a1a565b820191906000526020600020905b8154815290600101906020018083116109fd57829003601f168201915b50505050508152602001600282018054610a3390614e7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610a5f90614e7a565b8015610aac5780601f10610a8157610100808354040283529160200191610aac565b820191906000526020600020905b815481529060010190602001808311610a8f57829003601f168201915b5050509190925250919450505050505b92915050565b60006001600160e01b031982166318a4c3c360e11b1480610abc5750610abc826138b7565b6000610af2826137a1565b600101546001600160a01b031692915050565b6000610b10816138ec565b610b186138f6565b50565b60606000610b28836137a1565b6006810180546040805160208084028201810190925282815293945060009084015b82821015610cc8576000848152602090819020604080516080810182526003860290920180546001600160a01b0381168452600160a01b900460ff1615159383019390935260018301805492939291840191610ba590614e7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610bd190614e7a565b8015610c1e5780601f10610bf357610100808354040283529160200191610c1e565b820191906000526020600020905b815481529060010190602001808311610c0157829003601f168201915b50505050508152602001600282018054610c3790614e7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610c6390614e7a565b8015610cb05780601f10610c8557610100808354040283529160200191610cb0565b820191906000526020600020905b815481529060010190602001808311610c9357829003601f168201915b50505050508152505081526020019060010190610b4a565b50505050915050919050565b60009081526000805160206153d5833981519152602052604090206001015490565b6000610d03600283614eda565b610abc906001614efb565b6000610d19836137a1565b80549091506001600160a01b03163314610d7a5760405162461bcd60e51b815260206004820181905260248201527f4f6e6c7920696e69746961746f722063616e20657874656e642072697475616c60448201526064015b60405180910390fd5b6005610d8582613903565b6006811115610d9657610d96614e10565b14610dee5760405162461bcd60e51b815260206004820152602260248201527f4f6e6c79206163746976652072697475616c2063616e20626520657874656e64604482015261195960f21b6064820152608401610d71565b805482908290601890610e0f908490600160c01b900463ffffffff16614f16565b82546101009290920a63ffffffff8181021990931691831602179091556007830154835460068501546040516321972a4160e11b81526001600160a01b03928316600482015288851660248201526044810191909152928616606484015216915063432e548290608401600060405180830381600087803b158015610e9357600080fd5b505af1158015610ea7573d6000803e3d6000fd5b50508254604051600160c01b90910463ffffffff9081168252861692507fffff978721b8591d077dcef875f627c2ad11d2867fe71410228cce10eb263d7f915060200160405180910390a2505050565b60408051608081018252600080825260208201526060918101829052818101919091526000610f25856137a1565b90506000610f33828661384f565b6040805160808101825282546001600160a01b0381168252600160a01b900460ff1615156020820152600183018054919392840191610f7190614e7a565b80601f0160208091040260200160405190810160405280929190818152602001828054610f9d90614e7a565b8015610fea5780601f10610fbf57610100808354040283529160200191610fea565b820191906000526020600020905b815481529060010190602001808311610fcd57829003601f168201915b5050505050815260200160028201805461100390614e7a565b80601f016020809104026020016040519081016040528092919081815260200182805461102f90614e7a565b801561107c5780601f106110515761010080835404028352916020019161107c565b820191906000526020600020905b81548152906001019060200180831161105f57829003601f168201915b50505050508152505090508361109f576040805160208101825260008152908201525b9150505b9392505050565b816110c857604051631fe1e13d60e11b815260040160405180910390fd5b6110d28282613a61565b5050565b6000805160206153b58339815191528215801561110b57506110f66120d5565b6001600160a01b0316826001600160a01b0316145b1561118b5760008061111b61331e565b90925090506001600160a01b03821615158061113d575065ffffffffffff8116155b8061115057504265ffffffffffff821610155b15611178576040516319ca5ebb60e01b815265ffffffffffff82166004820152602401610d71565b5050805465ffffffffffff60a01b191681555b6111958383613a83565b505050565b6000806000806000806000806000806111d360405180604001604052806000801916815260200160006001600160801b03191681525090565b60606000806111e18f6137a1565b90508060000160009054906101000a90046001600160a01b03169d508060000160149054906101000a900463ffffffff169c508060000160189054906101000a900463ffffffff169b5080600001601c9054906101000a900461ffff169a5080600001601e9054906101000a900461ffff1699508060010160009054906101000a90046001600160a01b031698508060010160149054906101000a900461ffff1697508060010160169054906101000a900461ffff1696508060010160189054906101000a900460ff1695508060020160009054906101000a90046001600160a01b0316945080600301604051806040016040529081600082015481526020016001820160009054906101000a900460801b6001600160801b0319166001600160801b03191681525050935080600501805461131c90614e7a565b80601f016020809104026020016040519081016040528092919081815260200182805461134890614e7a565b80156113955780601f1061136a57610100808354040283529160200191611395565b820191906000526020600020905b81548152906001019060200180831161137857829003601f168201915b505050505092508060070160009054906101000a90046001600160a01b031691505091939597999b9d90929496989a9c50565b60006113d3816138ec565b6001546040805161ffff6401000000009093048316815291841660208301527f78a7068824d7a88c6fd3df9af582a9ef75dae070f53ea48608b2251080dbd81b910160405180910390a1506001805461ffff9092166401000000000265ffff0000000019909216919091179055565b6060600061144f836137a1565b60068101549091506000906001600160401b0381111561147157611471614b35565b60405190808252806020026020018201604052801561149a578160200160208202803683370190505b50905060005b6006830154811015611512578260060181815481106114c1576114c1614f33565b600091825260209091206003909102015482516001600160a01b03909116908390839081106114f2576114f2614f33565b6001600160a01b03909216602092830291909101909101526001016114a0565b509392505050565b600a5460405163ded56d4560e01b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ded56d4590602401602060405180830381865afa158015611584573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a89190614f49565b90506001600160a01b0381166116135760405162461bcd60e51b815260206004820152602a60248201527f4f70657261746f7220686173206e6f20626f6e642077697468207374616b696e6044820152693390383937bb34b232b960b11b6064820152608401610d71565b600060405180604001604052808463ffffffff1681526020018580360381019061163d9190614f66565b90526001600160a01b0383166000818152600660209081526040808320805460018082018355918552938390208651600490950201805463ffffffff191663ffffffff9586161781558684015180519282019290925581840151600282015590820151600390910155805189358152898301359281019290925288810135908201529293509091908516907fd6a9eae65f2798bb7380d31031efc51345c3f7e594ac11926be6e7d85cf6a1309060600160405180910390a333321461175f5760405162461bcd60e51b815260206004820152603260248201527f4f6e6c79206f70657261746f722077697468207265616c20616464726573732060448201527163616e20736574207075626c6963206b657960701b6064820152608401610d71565b6040516325d71d9960e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634bae3b3290602401600060405180830381600087803b1580156117c057600080fd5b505af11580156117d4573d6000803e3d6000fd5b5050505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03166000811580156118235750825b90506000826001600160401b0316600114801561183f5750303b155b90508115801561184d575080155b1561186b5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561189557845460ff60401b1916600160401b1785555b6001805461ffff89166401000000000265ffffffffffff1990911663ffffffff8b16171790556118c6600087613ab6565b83156117d457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15050505050505050565b6000611920816138ec565b6001600160a01b038216158061199957506040516301fd3f7760e71b81523060048201526001600160a01b0383169063fe9fbb8090602401602060405180830381865afa158015611975573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119999190614fc1565b6119e55760405162461bcd60e51b815260206004820152601960248201527f496e76616c6964205265696d62757273656d656e74506f6f6c000000000000006044820152606401610d71565b600580546001600160a01b0319166001600160a01b0384169081179091556040517fc472bd22bd3434e9d74366c775610f08d3f902e604ada3140aa2f2f557fcbc7190600090a25050565b6000611a3b816138ec565b6110d282613ac8565b6000611a4f816138ec565b6110d282613b3b565b60005a90506000611a68856137a1565b90506001611a7582613903565b6006811115611a8657611a86614e10565b14611ad35760405162461bcd60e51b815260206004820152601b60248201527f4e6f742077616974696e6720666f72207472616e7363726970747300000000006044820152606401610d71565b6001810154611af69061ffff600160a01b8204811691600160b01b90041661334c565b8314611b3e5760405162461bcd60e51b8152602060048201526017602482015276496e76616c6964207472616e7363726970742073697a6560481b6044820152606401610d71565b60405163ded56d4560e01b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ded56d4590602401602060405180830381865afa158015611ba5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bc99190614f49565b90506000611bd7838361384f565b60405163c4903d5b60e01b81526001600160a01b0384811660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063c4903d5b90602401602060405180830381865afa158015611c43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c679190614fde565b6001600160601b031611611c8d5760405162461bcd60e51b8152600401610d7190615007565b806001018054611c9c90614e7a565b159050611ceb5760405162461bcd60e51b815260206004820152601e60248201527f4e6f646520616c726561647920706f73746564207472616e73637269707400006044820152606401610d71565b60008686604051611cfd92919061503e565b604051908190039020905060018201611d1787898361509e565b50826001600160a01b03168863ffffffff167f66568b934e848078c9787d6a66dae153eaae57f0ec3a553c11939fcdcf9c11fb83604051611d5a91815260200190565b60405180910390a38354600160e01b900461ffff1684601c611d7b8361515e565b82546101009290920a61ffff81810219909316918316021790915560018601548654600160a01b9091048216600160e01b909104909116039050611deb5760405163ffffffff8916907fca79a3f8fdffa27f8c0a30733144db5a5bd2663f1f2561d8d665bf4da6a3dfbe90600090a25b6117d485613ba4565b60606000611e01866137a1565b6006810154909150808610611e4c5760405162461bcd60e51b81526020600482015260116024820152700aee4dedcce40e6e8c2e4e840d2dcc8caf607b1b6044820152606401610d71565b8415801590611e63575080611e61868861517f565b105b15611e7557611e72858761517f565b90505b6000611e818783615192565b6001600160401b03811115611e9857611e98614b35565b604051908082528060200260200182016040528015611eec57816020015b6040805160808101825260008082526020820152606091810182905281810191909152815260200190600190039081611eb65790505b5090506000875b838110156120c7576000856006018281548110611f1257611f12614f33565b600091825260209182902060408051608081018252600390930290910180546001600160a01b038116845260ff600160a01b9091041615159383019390935260018301805492939291840191611f6790614e7a565b80601f0160208091040260200160405190810160405280929190818152602001828054611f9390614e7a565b8015611fe05780601f10611fb557610100808354040283529160200191611fe0565b820191906000526020600020905b815481529060010190602001808311611fc357829003601f168201915b50505050508152602001600282018054611ff990614e7a565b80601f016020809104026020016040519081016040528092919081815260200182805461202590614e7a565b80156120725780601f1061204757610100808354040283529160200191612072565b820191906000526020600020905b81548152906001019060200180831161205557829003601f168201915b505050505081525050905087612095576040805160208101825260008152908201525b8084846120a1816151a5565b9550815181106120b3576120b3614f33565b602090810291909101015250600101611ef3565b509098975050505050505050565b6000806000805160206153b5833981519152610af2565b60005a905060006120fc886137a1565b9050600261210982613903565b600681111561211a5761211a614e10565b146121675760405162461bcd60e51b815260206004820152601c60248201527f4e6f742077616974696e6720666f72206167677265676174696f6e73000000006044820152606401610d71565b60405163ded56d4560e01b81523360048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ded56d4590602401602060405180830381865afa1580156121ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121f29190614f49565b90506000612200838361384f565b60405163c4903d5b60e01b81526001600160a01b0384811660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063c4903d5b90602401602060405180830381865afa15801561226c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122909190614fde565b6001600160601b0316116122b65760405162461bcd60e51b8152600401610d7190615007565b8054600160a01b900460ff161561230f5760405162461bcd60e51b815260206004820152601f60248201527f4e6f646520616c726561647920706f73746564206167677265676174696f6e006044820152606401610d71565b80600201805461231e90614e7a565b1590506123895760405162461bcd60e51b815260206004820152603360248201527f4e6f646520616c72656164792070726f76696465642064656372797074696f6e604482015272207265717565737420737461746963206b657960681b6064820152608401610d71565b602a85146123f25760405162461bcd60e51b815260206004820152603060248201527f496e76616c6964206c656e67746820666f722064656372797074696f6e20726560448201526f717565737420737461746963206b657960801b6064820152608401610d71565b60018301546124159061ffff600160a01b8204811691600160b01b90041661334c565b881461245d5760405162461bcd60e51b8152602060048201526017602482015276496e76616c6964207472616e7363726970742073697a6560481b6044820152606401610d71565b6000898960405161246f92919061503e565b604051908190039020825460ff60a01b1916600160a01b17835590506002820161249a87898361509e565b50826001600160a01b03168b63ffffffff167f1884446739eb06b60e314b4c3b25f08b5c7377f20538c132ce7c064f38272bac836040516124dd91815260200190565b60405180910390a38360050180546124f490614e7a565b9050600003612524576005840161250c8a8c8361509e565b50876003850161251c82826151be565b9050506125f9565b6040805180820190915260038501548152600485015460801b6001600160801b03191660208201526125649061255f368b90038b018b614b61565b613c5a565b15806125885750808460050160405161257d91906151ed565b604051809103902014155b156125f95760018401805460ff60c01b1916600160c01b1790556000600385018190556004850180546001600160801b031916905560405190815263ffffffff8c16907fbcca4dbb1c4bb22a406b6aa7fb93ded17778d2f20c772aa043bc11b5150552789060200160405180910390a25b6001840154600160c01b900460ff1661270e578354600160f01b900461ffff1684601e6126258361515e565b82546101009290920a61ffff81810219909316918316021790915560018601548654600160a01b9091048216600160f01b90910490911603905061270e57600061267c612677368b90038b018b614b61565b613c85565b60405160200161268c9190615263565b6040516020818303038152906040528051906020012090508b60016126b19190614f16565b600082815260076020908152604091829020805463ffffffff191663ffffffff948516179055905160018152918e16917fbcca4dbb1c4bb22a406b6aa7fb93ded17778d2f20c772aa043bc11b515055278910160405180910390a2505b61271785613ba4565b5050505050505050505050565b600061272e6120d5565b905090565b60009182526000805160206153d5833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6000612776826137a1565b546001600160a01b031692915050565b60008061279283613c85565b6040516020016127a29190615263565b60408051601f198184030181529181528151602092830120600081815260079093529120549091506110a39060019063ffffffff1661527f565b600082826040516020016127f192919061529c565b60405160208183030381529060405280519060200120905092915050565b7feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d869840154600090600160d01b900465ffffffffffff166000805160206153b5833981519152811580159061286957504265ffffffffffff831610155b6128755760008061288b565b6001810154600160a01b900465ffffffffffff16825b92509250509091565b6000806128a0836137a1565b600701546001600160a01b03169392505050565b7fe1dcbdb91df27212a29bc27177c840cf2f819ecf2187432e1fac86c2dd5dfca96128de816138ec565b6040516370a0823160e01b81523060048201526000906001600160a01b038416906370a0823190602401602060405180830381865afa158015612925573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294991906152ea565b9050600081116129925760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610d71565b6111956001600160a01b0384163383613ccb565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805460029190600160401b900460ff16806129ef575080546001600160401b03808416911610155b15612a0d5760405163f92ee8a960e01b815260040160405180910390fd5b805468ffffffffffffffffff19166001600160401b03831617600160401b178155600a54600003612a3f57600054600a555b805460ff60401b191681556040516001600160401b03831681527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15050565b60006001600160a01b038416612ad75760405162461bcd60e51b8152602060048201526011602482015270496e76616c696420617574686f7269747960781b6044820152606401610d71565b6001600160a01b03871660009081526008602052604090205460ff16612b3f5760405162461bcd60e51b815260206004820152601a60248201527f466565206d6f64656c206d75737420626520617070726f7665640000000000006044820152606401610d71565b8461ffff8116600211801590612b67575060015461ffff640100000000909104811690821611155b612bb35760405162461bcd60e51b815260206004820152601760248201527f496e76616c6964206e756d626572206f66206e6f6465730000000000000000006044820152606401610d71565b620151808463ffffffff161015612c0c5760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642072697475616c206475726174696f6e0000000000000000006044820152606401610d71565b600a805463ffffffff811660009081526009602052604081209192600191612c34838661517f565b909155505080546001600160a01b0319163317815560018101805461ffff8516600160a01b026001600160b01b03199091166001600160a01b038a1617179055612c7d83610cf6565b60018201805461ffff92909216600160b01b0261ffff60b01b19909216919091179055805463ffffffff428116600160a01b90810263ffffffff60a01b1990931692909217808455612cd3928992910416614f16565b815463ffffffff91909116600160c01b0263ffffffff60c01b199091161781556002810180546001600160a01b038088166001600160a01b031992831617909255600783018054928d16929091169190911790556000805b8461ffff16811015612f5657600683018054600181018255600091825260208220600390910201908c8c84818110612d6557612d65614f33565b9050602002016020810190612d7a9190614976565b6001600160a01b0381166000908152600660205260409020805491925090612df25760405162461bcd60e51b815260206004820152602560248201527f50726f766964657220686173206e6f7420736574207468656972207075626c6960448201526463206b657960d81b6064820152608401610d71565b816001600160a01b0316856001600160a01b031610612e535760405162461bcd60e51b815260206004820152601860248201527f50726f766964657273206d75737420626520736f7274656400000000000000006044820152606401610d71565b60405163c4903d5b60e01b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000006001600160601b0316917f00000000000000000000000000000000000000000000000000000000000000009091169063c4903d5b90602401602060405180830381865afa158015612ee6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0a9190614fde565b6001600160601b03161015612f315760405162461bcd60e51b8152600401610d7190615007565b5081546001600160a01b0319166001600160a01b038216179091559150600101612d2b565b50604051637b82e37160e11b815233600482015263ffffffff808516602483015261ffff86166044830152881660648201526001600160a01b038c169063f705c6e290608401600060405180830381600087803b158015612fb657600080fd5b505af1158015612fca573d6000803e3d6000fd5b50505060018301546040516001600160a01b03909116915063ffffffff8516907fa4e3b0c0b125669bbe2cfcbf57b6b13b68dc908d343dde9bdf0df75081ae403f90613019908e908e9061529c565b60405180910390a350909998505050505050505050565b60008061303c856137a1565b9050600561304982613903565b600681111561305a5761305a614e10565b1461309b5760405162461bcd60e51b815260206004820152601160248201527052697475616c206e6f742061637469766560781b6044820152606401610d71565b60028101546040516321751e3960e11b81526001600160a01b03909116906342ea3c72906130d190889088908890600401615303565b602060405180830381865afa1580156130ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109f9190614fc1565b60408051808201909152600080825260208201526000613131836137a1565b9050600061313e82613903565b9050600581600681111561315457613154614e10565b14806131715750600681600681111561316f5761316f614e10565b145b6131b45760405162461bcd60e51b8152602060048201526014602482015273149a5d1d585b081b9bdd08199a5b985b1a5e995960621b6044820152606401610d71565b50604080518082019091526003820154815260049091015460801b6001600160801b031916602082015292915050565b6000806131f0836137a1565b90506110a381613d1d565b600080613207846137a1565b905060006132158285613d42565b5095945050505050565b600080600061322d846137a1565b5463ffffffff600160a01b8204811696600160c01b90920416945092505050565b7feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401546000906000805160206153b583398151915290600160d01b900465ffffffffffff1680158015906132a857504265ffffffffffff8216105b6132c2578154600160d01b900465ffffffffffff166132d7565b6001820154600160a01b900465ffffffffffff165b9250505090565b60006132e861331e565b509050336001600160a01b0382161461331657604051636116401160e11b8152336004820152602401610d71565b610b18613e3f565b6000805160206153b5833981519152546001600160a01b03811691600160a01b90910465ffffffffffff1690565b600061335d603061ffff8416615334565b606061336a856001614efb565b61ffff166133789190615334565b61338390602861517f565b6110a3919061517f565b816133ab57604051631fe1e13d60e11b815260040160405180910390fd5b6110d28282613edc565b60006133c0816138ec565b610b18613ef8565b60006133d3816138ec565b6001546040805163ffffffff928316815291841660208301527feb65c6287031cadd2d71b59499e985dddd00f14b3a8b2ce8d951da00f29995f6910160405180910390a1506001805463ffffffff191663ffffffff92909216919091179055565b600061343f836137a1565b905061344a81613d1d565b61348d5760405162461bcd60e51b815260206004820152601460248201527352697475616c206973206e6f742061637469766560601b6044820152606401610d71565b60018101546001600160a01b03163381146134ea5760405162461bcd60e51b815260206004820152601b60248201527f53656e646572206e6f742072697475616c20617574686f7269747900000000006044820152606401610d71565b6001820180546001600160a01b0319166001600160a01b03858116918217909255604051909183169063ffffffff8716907ff3384b3f7c45bb9eb4b2b10a87553cda4b90c4d63e4c7d20f75f7bc8cc92d89c90600090a450505050565b600080613553836137a1565b600201546001600160a01b03169392505050565b7fe1dcbdb91df27212a29bc27177c840cf2f819ecf2187432e1fac86c2dd5dfca9613591816138ec565b6001600160a01b03821660009081526008602052604090205460ff16156135fa5760405162461bcd60e51b815260206004820152601a60248201527f466565206d6f64656c20616c726561647920617070726f7665640000000000006044820152606401610d71565b6001600160a01b038216600081815260086020908152604091829020805460ff1916600117905590519182527f73b4e04ac76476edd6a5cbe8762cc0dcf5257bc8ba20305f86ca8a346d573c9e9101612a7f565b6000610abc61365c836137a1565b613903565b60408051606081018252600080825260208083018290528284018290526001600160a01b0386168252600690529190912080545b80156137455783826136a8600184615192565b815481106136b8576136b8614f33565b600091825260209091206004909102015463ffffffff161161373357816136e0600183615192565b815481106136f0576136f0614f33565b9060005260206000209060040201600101604051806060016040529081600082015481526020016001820154815260200160028201548152505092505050610abc565b8061373d8161534b565b915050613695565b5060405162461bcd60e51b815260206004820152602a60248201527f4e6f206b65797320666f756e64207072696f7220746f207468652070726f7669604482015269191959081c9a5d1d585b60b21b6064820152608401610d71565b6000805463ffffffff831610156137e05760008263ffffffff16815481106137cb576137cb614f33565b90600052602060002090600802019050919050565b600a548263ffffffff16106138375760405162461bcd60e51b815260206004820152601760248201527f52697475616c206964206f7574206f6620626f756e64730000000000000000006044820152606401610d71565b5063ffffffff16600090815260096020526040902090565b600080600061385e8585613d42565b91509150816138af5760405162461bcd60e51b815260206004820152601e60248201527f5061727469636970616e74206e6f742070617274206f662072697475616c00006044820152606401610d71565b949350505050565b60006001600160e01b03198216637965db0b60e01b1480610abc57506301ffc9a760e01b6001600160e01b0319831614610abc565b610b188133613f03565b613901600080613f3c565b565b805460015460009163ffffffff600160a01b9091048116918391613928911683614f16565b90508163ffffffff16600003613942575060009392505050565b60018401548454600160a01b90910461ffff908116600160f01b909204160361398e578354600160c01b900463ffffffff164211613984575060059392505050565b5060069392505050565b6001840154600160c01b900460ff16156139ac575060049392505050565b8063ffffffff164211156139c4575060039392505050565b60018401548454600160a01b90910461ffff908116600160e01b9092041610156139f2575060019392505050565b60018401548454600160a01b90910461ffff908116600160f01b909204161015613a20575060029392505050565b60405162461bcd60e51b8152602060048201526016602482015275416d626967756f75732072697475616c20737461746560501b6044820152606401610d71565b613a6a82610cd4565b613a73816138ec565b613a7d8383614029565b50505050565b6001600160a01b0381163314613aac5760405163334bd91960e11b815260040160405180910390fd5b6111958282614098565b613abe6140f1565b6110d2828261413a565b6000613ad261324e565b613adb426141a3565b613ae59190615362565b9050613af182826141da565b60405165ffffffffffff821681526001600160a01b038316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200160405180910390a25050565b6000613b4682614267565b613b4f426141a3565b613b599190615362565b9050613b658282613f3c565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b9101612a7f565b6005546001600160a01b031615610b18576000613bc2608036615192565b613bcd906010615334565b613bd99061020061517f565b90506000815a613be99085615192565b613bf3919061517f565b600554604051631eb489b760e21b8152600481018390523360248201529192506001600160a01b031690637ad226dc90604401600060405180830381600087803b158015613c4057600080fd5b505af1925050508015613c51575060015b61119557505050565b805182516000911480156110a35750506020908101519101516001600160801b031990811691161490565b606081600001518260200151604051602001613cb59291909182526001600160801b031916602082015260300190565b6040516020818303038152906040529050919050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526111959084906142af565b60006005613d2a83613903565b6006811115613d3b57613d3b614e10565b1492915050565b60068201546000908190808203613d61576000601c9250925050613e38565b600080613d6f600184615192565b90505b808211613e2c5760006002613d87838561517f565b613d919190615381565b90506000886006018281548110613daa57613daa614f33565b6000918252602090912060039091020180549091506001600160a01b03808a16911603613de157600196509450613e389350505050565b80546001600160a01b03808a1691161015613e0857613e0182600161517f565b9350613e25565b81600003613e17575050613e2c565b613e22600183615192565b92505b5050613d72565b6000601c945094505050505b9250929050565b6000805160206153b5833981519152600080613e5961331e565b91509150613e6e8165ffffffffffff16151590565b1580613e8257504265ffffffffffff821610155b15613eaa576040516319ca5ebb60e01b815265ffffffffffff82166004820152602401610d71565b613ebc6000613eb76120d5565b614098565b50613ec8600083614029565b505081546001600160d01b03191690915550565b613ee582610cd4565b613eee816138ec565b613a7d8383614098565b6139016000806141da565b613f0d8282612733565b6110d25760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610d71565b7feef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401546000805160206153b583398151915290600160d01b900465ffffffffffff168015613feb574265ffffffffffff82161015613fc157600182015482546001600160d01b0316600160a01b90910465ffffffffffff16600160d01b02178255613feb565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec590600090a15b5060010180546001600160a01b0316600160a01b65ffffffffffff948516026001600160d01b031617600160d01b9290931691909102919091179055565b60006000805160206153b58339815191528361408e5760006140496120d5565b6001600160a01b03161461407057604051631fe1e13d60e11b815260040160405180910390fd5b6001810180546001600160a01b0319166001600160a01b0385161790555b6138af8484614312565b60006000805160206153b5833981519152831580156140cf57506140ba6120d5565b6001600160a01b0316836001600160a01b0316145b156140e7576001810180546001600160a01b03191690555b6138af84846143be565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661390157604051631afcd79f60e31b815260040160405180910390fd5b6141426140f1565b6000805160206153b58339815191526001600160a01b03821661417b57604051636116401160e11b815260006004820152602401610d71565b80546001600160d01b0316600160d01b65ffffffffffff851602178155613a7d600083614029565b600065ffffffffffff8211156141d6576040516306dfcc6560e41b81526030600482015260248101839052604401610d71565b5090565b6000805160206153b583398151915260006141f361331e565b835465ffffffffffff8616600160a01b026001600160d01b03199091166001600160a01b03881617178455915061423390508165ffffffffffff16151590565b15613a7d576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a960510990600090a150505050565b60008061427261324e565b90508065ffffffffffff168365ffffffffffff161161429a576142958382615395565b6110a3565b6110a365ffffffffffff84166206978061443a565b60006142c46001600160a01b03841683614450565b905080516000141580156142e95750808060200190518101906142e79190614fc1565b155b1561119557604051635274afe760e01b81526001600160a01b0384166004820152602401610d71565b60006000805160206153d583398151915261432d8484612733565b6143ad576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556143633390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610abc565b6000915050610abc565b5092915050565b60006000805160206153d58339815191526143d98484612733565b156143ad576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610abc565b600081831061444957816110a3565b5090919050565b60606110a38383600084600080856001600160a01b031684866040516144769190615263565b60006040518083038185875af1925050503d80600081146144b3576040519150601f19603f3d011682016040523d82523d6000602084013e6144b8565b606091505b50915091506144c88683836144d2565b9695505050505050565b6060826144e25761429582614529565b81511580156144f957506001600160a01b0384163b155b1561452257604051639996b31560e01b81526001600160a01b0385166004820152602401610d71565b50806110a3565b8051156145395780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b803563ffffffff8116811461456657600080fd5b919050565b6001600160a01b0381168114610b1857600080fd5b6000806040838503121561459357600080fd5b61459c83614552565b915060208301356145ac8161456b565b809150509250929050565b60005b838110156145d25781810151838201526020016145ba565b50506000910152565b600081518084526145f38160208601602086016145b7565b601f01601f19169290920160200192915050565b60018060a01b038151168252602081015115156020830152600060408201516080604085015261463a60808501826145db565b90506060830151848203606086015261465382826145db565b95945050505050565b6020815260006110a36020830184614607565b60006020828403121561468157600080fd5b81356001600160e01b0319811681146110a357600080fd5b6000602082840312156146ab57600080fd5b6110a382614552565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561470b57603f198886030184526146f9858351614607565b945092850192908501906001016146dd565b5092979650505050505050565b60006020828403121561472a57600080fd5b5035919050565b803561ffff8116811461456657600080fd5b60006020828403121561475557600080fd5b6110a382614731565b6000806040838503121561477157600080fd5b61477a83614552565b915061478860208401614552565b90509250929050565b8015158114610b1857600080fd5b6000806000606084860312156147b457600080fd5b6147bd84614552565b925060208401356147cd8161456b565b915060408401356147dd81614791565b809150509250925092565b600080604083850312156147fb57600080fd5b8235915060208301356145ac8161456b565b6001600160a01b038e16815263ffffffff8d811660208301528c16604082015261ffff8b811660608301528a16608082015260006001600160a01b038a1660a083015261ffff891660c083015261ffff881660e08301528615156101008301526001600160a01b038616610120830152845161014083015260208501516001600160801b0319166101608301526101c06101808301526148b16101c08301856145db565b6001600160a01b0384166101a084015290509e9d5050505050505050505050505050565b6020808252825182820181905260009190848201906040850190845b818110156149165783516001600160a01b0316835292840192918401916001016148f1565b50909695505050505050565b60006060828403121561493457600080fd5b50919050565b60008060006060848603121561494f57600080fd5b61495884614552565b925061496660208501614731565b915060408401356147dd8161456b565b60006020828403121561498857600080fd5b81356110a38161456b565b6000602082840312156149a557600080fd5b813565ffffffffffff811681146110a357600080fd5b60008083601f8401126149cd57600080fd5b5081356001600160401b038111156149e457600080fd5b602083019150836020828501011115613e3857600080fd5b600080600060408486031215614a1157600080fd5b614a1a84614552565b925060208401356001600160401b03811115614a3557600080fd5b614a41868287016149bb565b9497909650939450505050565b60008060008060808587031215614a6457600080fd5b614a6d85614552565b935060208501359250604085013591506060850135614a8b81614791565b939692955090935050565b60008060008060008086880360a0811215614ab057600080fd5b614ab988614552565b965060208801356001600160401b0380821115614ad557600080fd5b614ae18b838c016149bb565b90985096508691506040603f1984011215614afb57600080fd5b60408a01955060808a0135925080831115614b1557600080fd5b5050614b2389828a016149bb565b979a9699509497509295939492505050565b634e487b7160e01b600052604160045260246000fd5b6001600160801b031981168114610b1857600080fd5b600060408284031215614b7357600080fd5b604051604081018181106001600160401b0382111715614b9557614b95614b35565b604052823581526020830135614baa81614b4b565b60208201529392505050565b60008083601f840112614bc857600080fd5b5081356001600160401b03811115614bdf57600080fd5b6020830191508360208260051b8501011115613e3857600080fd5b60008060208385031215614c0d57600080fd5b82356001600160401b03811115614c2357600080fd5b614c2f85828601614bb6565b90969095509350505050565b60008060008060008060a08789031215614c5457600080fd5b8635614c5f8161456b565b955060208701356001600160401b03811115614c7a57600080fd5b614c8689828a01614bb6565b9096509450506040870135614c9a8161456b565b9250614ca860608801614552565b91506080870135614cb88161456b565b809150509295509295509295565b600082601f830112614cd757600080fd5b81356001600160401b0380821115614cf157614cf1614b35565b604051601f8301601f19908116603f01168101908282118183101715614d1957614d19614b35565b81604052838152866020858801011115614d3257600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215614d6757600080fd5b614d7084614552565b925060208401356001600160401b0380821115614d8c57600080fd5b614d9887838801614cc6565b93506040860135915080821115614dae57600080fd5b50614dbb86828701614cc6565b9150509250925092565b815181526020808301516001600160801b0319169082015260408101610abc565b60008060408385031215614df957600080fd5b614e0283614731565b915061478860208401614731565b634e487b7160e01b600052602160045260246000fd5b6020810160078310614e4857634e487b7160e01b600052602160045260246000fd5b91905290565b60008060408385031215614e6157600080fd5b8235614e6c8161456b565b946020939093013593505050565b600181811c90821680614e8e57607f821691505b60208210810361493457634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600061ffff80841680614eef57614eef614eae565b92169190910492915050565b61ffff8181168382160190808211156143b7576143b7614ec4565b63ffffffff8181168382160190808211156143b7576143b7614ec4565b634e487b7160e01b600052603260045260246000fd5b600060208284031215614f5b57600080fd5b81516110a38161456b565b600060608284031215614f7857600080fd5b604051606081018181106001600160401b0382111715614f9a57614f9a614b35565b80604052508235815260208301356020820152604083013560408201528091505092915050565b600060208284031215614fd357600080fd5b81516110a381614791565b600060208284031215614ff057600080fd5b81516001600160601b03811681146110a357600080fd5b60208082526018908201527f4e6f7420656e6f75676820617574686f72697a6174696f6e0000000000000000604082015260600190565b8183823760009101908152919050565b601f821115611195576000816000526020600020601f850160051c810160208610156150775750805b601f850160051c820191505b8181101561509657828155600101615083565b505050505050565b6001600160401b038311156150b5576150b5614b35565b6150c9836150c38354614e7a565b8361504e565b6000601f8411600181146150fd57600085156150e55750838201355b600019600387901b1c1916600186901b178355615157565b600083815260209020601f19861690835b8281101561512e578685013582556020948501946001909201910161510e565b508682101561514b5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b600061ffff80831681810361517557615175614ec4565b6001019392505050565b80820180821115610abc57610abc614ec4565b81810381811115610abc57610abc614ec4565b6000600182016151b7576151b7614ec4565b5060010190565b813581556001810160208301356151d481614b4b565b81546001600160801b03191660809190911c1790555050565b60008083546151fb81614e7a565b60018281168015615213576001811461522857615257565b60ff1984168752821515830287019450615257565b8760005260208060002060005b8581101561524e5781548a820152908401908201615235565b50505082870194505b50929695505050505050565b600082516152758184602087016145b7565b9190910192915050565b63ffffffff8281168282160390808211156143b7576143b7614ec4565b60208082528181018390526000908460408401835b868110156152df5782356152c48161456b565b6001600160a01b0316825291830191908301906001016152b1565b509695505050505050565b6000602082840312156152fc57600080fd5b5051919050565b63ffffffff8416815260606020820152600061532260608301856145db565b82810360408401526144c881856145db565b8082028115828204841417610abc57610abc614ec4565b60008161535a5761535a614ec4565b506000190190565b65ffffffffffff8181168382160190808211156143b7576143b7614ec4565b60008261539057615390614eae565b500490565b65ffffffffffff8281168282160390808211156143b7576143b7614ec456feeef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d869840002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212200176d5b77166e7b1b48e792dc9c5c170b666f7d86d94f55be8d59dd2527ac31464736f6c63430008170033000000000000000000000000fa07aab78062fac4c36995bf28f6d677667973f5