154 txs
470 calls
constructor
constructor(address router, address admin, address updater, address emergencyUpdater)
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
automationEnabled
viewfunction automationEnabled() view returns (bool)
checkUpkeep
viewfunction checkUpkeep(bytes) view returns (bool upkeepNeeded, bytes performData)
decimals
purefunction decimals() pure returns (uint8)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
deviationCheckEnabled
viewfunction deviationCheckEnabled() view returns (bool)
donId
viewfunction donId() view returns (bytes32)
EMERGENCY_UPDATER_ROLE
viewfunction EMERGENCY_UPDATER_ROLE() view returns (bytes32)
getCurrentNAV
viewfunction getCurrentNAV() view returns (uint256 nav, uint256 timestamp)
getPercentageChange
viewfunction getPercentageChange() view returns (int256 percentageChange)
getPreviousNAV
viewfunction getPreviousNAV() view returns (uint256 nav, uint256 timestamp)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
lastAutomatedUpdateTimestamp
viewfunction lastAutomatedUpdateTimestamp() view returns (uint256)
lastForceUpdateTimestamp
viewfunction lastForceUpdateTimestamp() view returns (uint256)
latestNAV
viewfunction latestNAV() view returns (uint256)
latestRequestId
viewfunction latestRequestId() view returns (bytes32)
latestTimestamp
viewfunction latestTimestamp() view returns (uint256)
maxDeviationBps
viewfunction maxDeviationBps() view returns (uint256)
MIN_CALLBACK_GAS_LIMIT
viewfunction MIN_CALLBACK_GAS_LIMIT() view returns (uint32)
MIN_FORCE_UPDATE_INTERVAL
viewfunction MIN_FORCE_UPDATE_INTERVAL() view returns (uint256)
navReceiver
viewfunction navReceiver() view returns (address)
previousNAV
viewfunction previousNAV() view returns (uint256)
previousTimestamp
viewfunction previousTimestamp() view returns (uint256)
subscriptionId
viewfunction subscriptionId() view returns (uint64)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
targetHour
viewfunction targetHour() view returns (uint256)
targetMinute
viewfunction targetMinute() view returns (uint256)
timeWindow
viewfunction timeWindow() view returns (uint256)
UPDATER_ROLE
viewfunction UPDATER_ROLE() view returns (bytes32)
configure
nonpayablefunction configure(uint64 _subscriptionId, bytes32 _donId, string _source, bytes _encryptedSecretsReference)
forceNAVUpdate
nonpayablefunction forceNAVUpdate(uint256 _navValue, string _reason)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
handleOracleFulfillment
nonpayablefunction handleOracleFulfillment(bytes32 requestId, bytes response, bytes err)
manualTriggerUpdate
nonpayablefunction manualTriggerUpdate()
performUpkeep
nonpayablefunction performUpkeep(bytes)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
requestNAV
nonpayablefunction requestNAV() returns (bytes32 requestId)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setAutomationEnabled
nonpayablefunction setAutomationEnabled(bool enabled)
setAutomationTimeParameters
nonpayablefunction setAutomationTimeParameters(uint256 _targetHour, uint256 _targetMinute, uint256 _timeWindow)
setCallbackGasLimit
nonpayablefunction setCallbackGasLimit(uint32 _callbackGasLimit)
setDeviationCheckEnabled
nonpayablefunction setDeviationCheckEnabled(bool _enabled)
setMaxDeviation
nonpayablefunction setMaxDeviation(uint256 _maxDeviationBps)
setNAVReceiver
nonpayablefunction setNAVReceiver(address _navReceiver)
events
AutomatedUpdateTriggered
event AutomatedUpdateTriggered(uint256 timestamp)
AutomationParametersUpdated
event AutomationParametersUpdated(uint256 targetHour, uint256 targetMinute, uint256 timeWindow)
DeviationCheckToggled
event DeviationCheckToggled(bool enabled)
ExcessiveNAVDeviation
event ExcessiveNAVDeviation(bytes32 indexed requestId, uint256 newNav, uint256 previousNav, uint256 deviationBps)
MaxDeviationUpdated
event MaxDeviationUpdated(uint256 newMaxDeviationBps)
NAVForceUpdated
event NAVForceUpdated(uint256 indexed timestamp, uint256 navValue, uint256 deviationBps, string reason, address caller)
NAVFulfilled
event NAVFulfilled(bytes32 indexed requestId, uint256 navValue)
NAVReceiverUpdated
event NAVReceiverUpdated(address indexed receiver)
NAVReceiverUpdateFailed
event NAVReceiverUpdateFailed(uint256 navValue, address receiver)
NAVRequestFailed
event NAVRequestFailed(bytes32 indexed requestId, string error)
NAVRequestSent
event NAVRequestSent(bytes32 indexed requestId)
NAVUpdated
event NAVUpdated(uint256 indexed timestamp, uint256 navValue)
RequestFulfilled
event RequestFulfilled(bytes32 indexed id)
RequestSent
event RequestSent(bytes32 indexed id)
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)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
DeviationCannotBeZero
error DeviationCannotBeZero()
EmptySecrets
error EmptySecrets()
EmptySource
error EmptySource()
ForceUpdateTooFrequent
error ForceUpdateTooFrequent(uint256 timeSinceLastUpdate, uint256 minimumRequired)
InvalidDonId
error InvalidDonId()
InvalidEncryptedSecretsReference
error InvalidEncryptedSecretsReference()
InvalidGasLimit
error InvalidGasLimit(uint32 minimum)
InvalidNAVValue
error InvalidNAVValue(uint256 navValue)
InvalidReceiverAddress
error InvalidReceiverAddress()
InvalidSourceCode
error InvalidSourceCode()
InvalidSubscriptionId
error InvalidSubscriptionId()
InvalidTargetHour
error InvalidTargetHour()
InvalidTargetMinute
error InvalidTargetMinute()
InvalidTimeWindow
error InvalidTimeWindow()
NoInlineSecrets
error NoInlineSecrets()
OnlyRouterCanFulfill
error OnlyRouterCanFulfill()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
UnauthorizedNAVUpdateRequest
error UnauthorizedNAVUpdateRequest()
UpkeepConditionsNotMet
error UpkeepConditionsNotMet()
ZeroAddress
error ZeroAddress(string parameter)
creation bytecode
0x60a06040526017600b55602d600c55610384600d5560108054600160ff1991821681179092556103e860115560128054909116909117905534801561004357600080fd5b506040516132cb3803806132cb833981016040819052610062916102f5565b6001600160a01b0384166080819052600180556100b05760405163eac0d38960e01b81526020600482015260066024820152653937baba32b960d11b60448201526064015b60405180910390fd5b6001600160a01b0383166100ef5760405163eac0d38960e01b815260206004820152600560248201526430b236b4b760d91b60448201526064016100a7565b6001600160a01b0382166101305760405163eac0d38960e01b81526020600482015260076024820152663ab83230ba32b960c91b60448201526064016100a7565b6001600160a01b03811661017a5760405163eac0d38960e01b815260206004820152601060248201526f32b6b2b933b2b731bcaab83230ba32b960811b60448201526064016100a7565b6008805463ffffffff60401b19166a0493e000000000000000001790556101a260008461022d565b506101cd7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217758461022d565b506101f87f73e573f9566d61418a34d5de3ff49360f9c51fec37f7486551670290f6285dab8361022d565b506102237f9d1945eeb09f3a9323e5f22a567caed248092672554a0b04901240709fb134768261022d565b5050505050610349565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166102cf576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556102873390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102d3565b5060005b92915050565b80516001600160a01b03811681146102f057600080fd5b919050565b6000806000806080858703121561030b57600080fd5b610314856102d9565b9350610322602086016102d9565b9250610330604086016102d9565b915061033e606086016102d9565b905092959194509250565b608051612f6061036b600039600081816107280152611fff0152612f606000f3fe608060405234801561001057600080fd5b50600436106102ff5760003560e01c806379e666221161019c578063d2f343c7116100ee578063e4c71cb311610097578063f475877511610071578063f475877514610660578063f6cb839014610669578063f7ced0e71461067157600080fd5b8063e4c71cb314610641578063eb5f23a61461064a578063f063aa331461065757600080fd5b8063daf6bce4116100c8578063daf6bce41461061e578063dd3a9a1014610626578063dddbc0491461062e57600080fd5b8063d2f343c7146105f5578063d547741f146105fe578063d966a5941461061157600080fd5b80639c66e16211610150578063a66143821161012a578063a6614382146105c4578063b3d03582146105cd578063cc6dfe79146105ec57600080fd5b80639c66e16214610596578063a217fddf146105a9578063a4eb718c146105b157600080fd5b80638dbe7b9d116101815780638dbe7b9d1461054357806391d148541461054c5780639bdcaf591461058357600080fd5b806379e66622146105275780638205bf6a1461053a57600080fd5b80633b72d5f51161025557806354e4d19a116102095780636e04ff0d116101e35780636e04ff0d146104b8578063721be422146104d957806375b238fc1461050057600080fd5b806354e4d19a146104885780635953de9614610491578063693de592146104ad57600080fd5b8063424562131161023a578063424562131461043b5780634585e33b1461044e57806347e633801461046157600080fd5b80633b72d5f5146104295780633ee7a7011461043257600080fd5b80631d9ff6e4116102b75780632f2ff15d116102915780632f2ff15d146103f4578063313ce5671461040757806336568abe1461041657600080fd5b80631d9ff6e414610398578063248a9ca3146103a15780632c2f03e0146103c457600080fd5b80630ca76175116102e85780630ca761751461035957806314f69ebe1461036e5780631aa46f591461038157600080fd5b806301ffc9a71461030457806309c1ba2e1461032c575b600080fd5b610317610312366004612607565b610684565b60405190151581526020015b60405180910390f35b6008546103409067ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610323565b61036c61036736600461270e565b61071d565b005b61036c61037c3660046127c2565b6107ba565b61038a60025481565b604051908152602001610323565b61038a60065481565b61038a6103af366004612860565b60009081526020819052604090206001015490565b6012546103dc9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610323565b61036c610402366004612895565b6108d1565b60405160128152602001610323565b61036c610424366004612895565b6108fc565b61038a60055481565b61038a60115481565b61036c6104493660046128c1565b61094d565b61036c61045c36600461290d565b610b26565b61038a7f73e573f9566d61418a34d5de3ff49360f9c51fec37f7486551670290f6285dab81565b61038a61384081565b6005546006545b60408051928352602083019190915201610323565b600354600454610498565b6104cb6104c636600461290d565b610c2e565b60405161032392919061299f565b61038a7f9d1945eeb09f3a9323e5f22a567caed248092672554a0b04901240709fb1347681565b61038a7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177581565b61036c6105353660046129d0565b610d5e565b61038a60045481565b61038a60075481565b61031761055a366004612895565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b61036c6105913660046129ed565b610d9c565b61036c6105a4366004612a19565b610ed9565b61038a600081565b61036c6105bf366004612a34565b610fad565b61038a600b5481565b6105d7620186a081565b60405163ffffffff9091168152602001610323565b61038a600e5481565b61038a600d5481565b61036c61060c366004612895565b611037565b6010546103179060ff1681565b61038a61105c565b61038a61110a565b61036c61063c366004612860565b611152565b61038a60035481565b6012546103179060ff1681565b61038a600f5481565b61038a600c5481565b61036c6111f3565b61036c61067f3660046129d0565b611229565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061071757507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461077f576040517fc6829f8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61078a838383611294565b60405183907f85e1543bf2f84fe80c6badbce3648c8539ad1df4d2b3d822938ca0538be727e690600090a2505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756107e48161168c565b8667ffffffffffffffff1660000361080f57604051630ebd8d1960e11b815260040160405180910390fd5b8561082d576040516391f7443960e01b815260040160405180910390fd5b600084900361084f57604051631161b0b360e01b815260040160405180910390fd5b600082900361088a576040517f08974bc000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6008805467ffffffffffffffff191667ffffffffffffffff8916179055600786905560096108b9858783612ae2565b50600a6108c7838583612ae2565b5050505050505050565b6000828152602081905260409020600101546108ec8161168c565b6108f68383611699565b50505050565b6001600160a01b038116331461093e576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109488282611743565b505050565b7f9d1945eeb09f3a9323e5f22a567caed248092672554a0b04901240709fb134766109778161168c565b61097f6117c6565b836000036109c1576040517fc0c148d4000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b6000600f54426109d19190612bb8565b90506000600f541180156109e6575061384081105b15610a28576040517f29108fcd0000000000000000000000000000000000000000000000000000000081526004810182905261384060248201526044016109b8565b60035460009015610a7e5760006003548711610a515786600354610a4c9190612bb8565b610a5e565b600354610a5e9088612bb8565b600354909150610a7082612710612bcb565b610a7a9190612bf8565b9150505b6003805460055560048054600655908790554290819055600f55610aa186611809565b427f2d7f7ae13710a5fc7ea85533ac930ce3bb3317b7282af073f3645dd3e6a412f48783888833604051610ad9959493929190612c0c565b60405180910390a2427f224bbf4ba043354bee6487d05aa90892db4426afe8e3aa79007d0eae1b985ebc87604051610b1391815260200190565b60405180910390a250506108f660018055565b6040517f6e04ff0d00000000000000000000000000000000000000000000000000000000815260206004820152600060248201819052903090636e04ff0d90604401600060405180830381865afa158015610b85573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bad9190810190612c5c565b50905080610be7576040517fa37ddd2000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610bef61190d565b5042600e8190556040519081527f883e407cc0ae0d12f7a01c2fdc3bd21afa3181401fc985b413f52316341eabe89060200160405180910390a1505050565b60105460009060609060ff16610c565750506040805160208101909152600080825290610d57565b426000610c666201518083612ce9565b90506000610c76610e1083612bf8565b90506000603c610c88610e1085612ce9565b610c929190612bf8565b90506000600c54603c610ca59190612bcb565b600b54610cb490610e10612bcb565b610cbe9190612cfd565b90506000610ccd603c86612ce9565b610cd884603c612bcb565b610ce486610e10612bcb565b610cee9190612cfd565b610cf89190612cfd565b90506000828210158015610d175750600d54610d149084612cfd565b82105b9050600062011940600e5489610d2d9190612bb8565b119050818015610d3a5750805b995060405180602001604052806000815250985050505050505050505b9250929050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610d888161168c565b506010805460ff1916911515919091179055565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610dc68161168c565b60188410610e00576040517f6bae8b6500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b603c8310610e3a576040517f053c1f4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61012c821080610e4c57506138408210155b15610e83576040517fb11cd48100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600b849055600c839055600d82905560408051858152602081018590529081018390527f7ba3a5f107a3591b604d817104b45edf844cd83ed1b93401dc66c4ac37a5bad09060600160405180910390a150505050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610f038161168c565b6001600160a01b038216610f43576040517fa05ff47e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601280547fffffffffffffffffffffff0000000000000000000000000000000000000000ff166101006001600160a01b038516908102919091179091556040517fee26f3ffb0fd9f2274be5e2c82a9e710e999b2da7d338b2d662d2540b14cf1bb90600090a25050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c21775610fd78161168c565b620186a063ffffffff8316101561100657604051630298914960e41b8152620186a060048201526024016109b8565b506008805463ffffffff90921668010000000000000000026bffffffff000000000000000019909216919091179055565b6000828152602081905260409020600101546110528161168c565b6108f68383611743565b3360009081527f7d7ffb7a348e1c6a02869081a26547b49160dd3df72d1d75a570eb9b698292ec602052604081205460ff16806110c757503360009081527f738678fe42df6a4211eb7628ac9b056229141839eb4f4ef4cc249f1d36e8c921602052604090205460ff165b6110fd576040517f9cf11bdb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61110561190d565b905090565b600060055460000361111c5750600090565b600060055460035461112e9190612d10565b600554909150611142826305f5e100612d37565b61114c9190612d67565b91505090565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561117c8161168c565b816000036111b6576040517f5880a9f100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60118290556040518281527f3f9ef5ed5d378ef819698e4b3c710d362f981f90087b428b7a1ee1e716d689d5906020015b60405180910390a15050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c2177561121d8161168c565b61122561190d565b5050565b7fa49807205ce4d355092ef5a8a18f56e8913cf4a201fbe287825b095693c217756112538161168c565b6012805460ff19168315159081179091556040519081527f4b3846e59e75439d5fd0202dae15523da9daacc4b91b1e0e2c7c9c6d5972aa4e906020016111e7565b61129c6117c6565b8051156112e057827f427bedf194be24d8a151ec8cb762b5c8eae088b4f0c01e72a307cf5a51ade5d8826040516112d39190612d95565b60405180910390a2611683565b815160000361134957827f427bedf194be24d8a151ec8cb762b5c8eae088b4f0c01e72a307cf5a51ade5d86040516112d39060208082526013908201527f456d70747920726573706f6e7365206461746100000000000000000000000000604082015260600190565b6020825110156113d957827f427bedf194be24d8a151ec8cb762b5c8eae088b4f0c01e72a307cf5a51ade5d86040516112d3906020808252602d908201527f4d616c666f726d656420726573706f6e73652064617461202d20696e7375666660408201527f696369656e74206c656e67746800000000000000000000000000000000000000606082015260800190565b81516020141580156113ed57508151604014155b1561147857827f427bedf194be24d8a151ec8cb762b5c8eae088b4f0c01e72a307cf5a51ade5d86040516112d39060208082526023908201527f496e76616c696420726573706f6e7365206c656e67746820666f722075696e7460408201527f3235360000000000000000000000000000000000000000000000000000000000606082015260800190565b60008280602001905181019061148e9190612da8565b90508060000361152c57837f427bedf194be24d8a151ec8cb762b5c8eae088b4f0c01e72a307cf5a51ade5d860405161151e9060208082526021908201527f43616e6e6f74207570646174652077697468207a65726f204e41562076616c7560408201527f6500000000000000000000000000000000000000000000000000000000000000606082015260800190565b60405180910390a250611683565b60125460ff16801561154057506000600354115b156115ef5760006003548211156115655760035461155e9083612bb8565b9050611576565b816003546115739190612bb8565b90505b60035460009061158883612710612bcb565b6115929190612bf8565b90506011548111156115ec57600354604080518581526020810192909252810182905286907f87f1134414af80af3c021db7f09983bd44be06e21b368b608181833a9e6289999060600160405180910390a2505050611683565b50505b60038054600555600480546006559082905542905561160d81611809565b837f80bd2b323e3a6af589795c93e573d2de859bdd53d085cdf5b68eb5edc750b6c28260405161163f91815260200190565b60405180910390a2427f224bbf4ba043354bee6487d05aa90892db4426afe8e3aa79007d0eae1b985ebc8260405161167991815260200190565b60405180910390a2505b61094860018055565b6116968133611bc8565b50565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1661173b576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556116f33390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610717565b506000610717565b6000828152602081815260408083206001600160a01b038516845290915281205460ff161561173b576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610717565b600260015403611802576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600155565b60125461010090046001600160a01b031615611696576012546040517f16b60249000000000000000000000000000000000000000000000000000000008152600481018390526101009091046001600160a01b0316906316b6024990602401600060405180830381600087803b15801561188257600080fd5b505af1925050508015611893575060015b611696573d8080156118c1576040519150601f19603f3d011682016040523d82523d6000602084013e6118c6565b606091505b50601254604080518481526101009092046001600160a01b031660208301527fcc893a8b2c65b4d2b98d7ce00c3caf92cde0bf58c518a6cf746f792c1cf534c691016111e7565b60006009805461191c90612a5a565b905060000361193e57604051631161b0b360e01b815260040160405180910390fd5b60085467ffffffffffffffff1660000361196b57604051630ebd8d1960e11b815260040160405180910390fd5b60075461198b576040516391f7443960e01b815260040160405180910390fd5b600854620186a06801000000000000000090910463ffffffff1610156119c957604051630298914960e41b8152620186a060048201526024016109b8565b611a0a6040805160e0810190915280600081526020016000815260200160008152602001606081526020016060815260200160608152602001606081525090565b611aa760098054611a1a90612a5a565b80601f0160208091040260200160405190810160405280929190818152602001828054611a4690612a5a565b8015611a935780601f10611a6857610100808354040283529160200191611a93565b820191906000526020600020905b815481529060010190602001808311611a7657829003601f168201915b505050505082611c3490919063ffffffff16565b6000600a8054611ab690612a5a565b90501115611b5b57611b5b600a8054611ace90612a5a565b80601f0160208091040260200160405190810160405280929190818152602001828054611afa90612a5a565b8015611b475780601f10611b1c57610100808354040283529160200191611b47565b820191906000526020600020905b815481529060010190602001808311611b2a57829003601f168201915b505050505082611c4190919063ffffffff16565b611b91611b6782611c8b565b60085460075467ffffffffffffffff82169168010000000000000000900463ffffffff1690611ffa565b600281905560405190925082907fe4a590f2aeb7a78489900321756fa3943a8ad762dcffc1daea08af7885afe91590600090a25090565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16611225576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602481018390526044016109b8565b61122582600080846120cc565b8051600003611c7c576040517fe889636f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016020830152608090910152565b60606000611c9a610100612163565b9050611ce46040518060400160405280600c81526020017f636f64654c6f636174696f6e00000000000000000000000000000000000000008152508261218490919063ffffffff16565b8251611d02906002811115611cfb57611cfb612dc1565b829061219d565b60408051808201909152600881527f6c616e67756167650000000000000000000000000000000000000000000000006020820152611d41908290612184565b6040830151611d58908015611cfb57611cfb612dc1565b60408051808201909152600681527f736f7572636500000000000000000000000000000000000000000000000000006020820152611d97908290612184565b6060830151611da7908290612184565b60a08301515115611e4c5760408051808201909152600481527f61726773000000000000000000000000000000000000000000000000000000006020820152611df1908290612184565b611dfa816121d6565b60005b8360a0015151811015611e4257611e3a8460a001518281518110611e2357611e23612dd7565b60200260200101518361218490919063ffffffff16565b600101611dfd565b50611e4c816121fa565b60808301515115611f4d57600083602001516002811115611e6f57611e6f612dc1565b03611ea6576040517fa80d31f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408051808201909152600f81527f736563726574734c6f636174696f6e00000000000000000000000000000000006020820152611ee5908290612184565b611efe83602001516002811115611cfb57611cfb612dc1565b60408051808201909152600781527f73656372657473000000000000000000000000000000000000000000000000006020820152611f3d908290612184565b6080830151611f4d908290612218565b60c08301515115611ff25760408051808201909152600981527f62797465734172677300000000000000000000000000000000000000000000006020820152611f97908290612184565b611fa0816121d6565b60005b8360c0015151811015611fe857611fe08460c001518281518110611fc957611fc9612dd7565b60200260200101518361221890919063ffffffff16565b600101611fa3565b50611ff2816121fa565b515192915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663461d27628688600188886040518663ffffffff1660e01b8152600401612052959493929190612ded565b6020604051808303816000875af1158015612071573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120959190612da8565b60405190915081907f1131472297a800fee664d1d89cfa8f7676ff07189ecc53f80bbb5f4969099db890600090a295945050505050565b8051600003612107576040517f22ce3edd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8383600281111561211a5761211a612dc1565b9081600281111561212d5761212d612dc1565b9052506040840182801561214357612143612dc1565b9081801561215357612153612dc1565b9052506060909301929092525050565b61216b6125d2565b80516121779083612225565b5060006020820152919050565b612191826003835161229c565b815161094890826123bd565b81516121aa9060c26123e5565b5061122582826040516020016121c291815260200190565b604051602081830303815290604052612218565b6121e181600461244e565b6001816020018181516121f49190612cfd565b90525050565b61220581600761244e565b6001816020018181516121f49190612bb8565b612191826002835161229c565b604080518082019091526060815260006020820152612245602083612ce9565b1561226d57612255602083612ce9565b612260906020612bb8565b61226a9083612cfd565b91505b60208084018390526040518085526000815290818401018181101561229157600080fd5b604052509192915050565b60178167ffffffffffffffff16116122c35782516108f69060e0600585901b1683176123e5565b60ff8167ffffffffffffffff16116123055782516122ec906018611fe0600586901b16176123e5565b5082516108f69067ffffffffffffffff83166001612465565b61ffff8167ffffffffffffffff161161234857825161232f906019611fe0600586901b16176123e5565b5082516108f69067ffffffffffffffff83166002612465565b63ffffffff8167ffffffffffffffff161161238d57825161237490601a611fe0600586901b16176123e5565b5082516108f69067ffffffffffffffff83166004612465565b82516123a490601b611fe0600586901b16176123e5565b5082516108f69067ffffffffffffffff83166008612465565b6040805180820190915260608152600060208201526123de838384516124ea565b9392505050565b604080518082019091526060815260006020820152825151600061240a826001612cfd565b90508460200151821061242b5761242b85612426836002612bcb565b6125bb565b8451602083820101858153508051821115612444578181525b5093949350505050565b815161094890601f611fe0600585901b16176123e5565b60408051808201909152606081526000602082015283515160006124898285612cfd565b905085602001518111156124a6576124a686612426836002612bcb565b600060016124b686610100612f1e565b6124c09190612bb8565b905086518281018783198251161781525080518311156124de578281525b50959695505050505050565b604080518082019091526060815260006020820152825182111561250d57600080fd5b835151600061251c8483612cfd565b905085602001518111156125395761253986612426836002612bcb565b855180518382016020019160009180851115612553578482525b505050602086015b602086106125935780518252612572602083612cfd565b915061257f602082612cfd565b905061258c602087612bb8565b955061255b565b51815160001960208890036101000a0190811690199190911617905250849150509392505050565b81516125c78383612225565b506108f683826123bd565b60405180604001604052806125fa604051806040016040528060608152602001600081525090565b8152602001600081525090565b60006020828403121561261957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146123de57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561268857612688612649565b604052919050565b600067ffffffffffffffff8211156126aa576126aa612649565b50601f01601f191660200190565b600082601f8301126126c957600080fd5b81356126dc6126d782612690565b61265f565b8181528460208386010111156126f157600080fd5b816020850160208301376000918101602001919091529392505050565b60008060006060848603121561272357600080fd5b83359250602084013567ffffffffffffffff81111561274157600080fd5b61274d868287016126b8565b925050604084013567ffffffffffffffff81111561276a57600080fd5b612776868287016126b8565b9150509250925092565b60008083601f84011261279257600080fd5b50813567ffffffffffffffff8111156127aa57600080fd5b602083019150836020828501011115610d5757600080fd5b600080600080600080608087890312156127db57600080fd5b863567ffffffffffffffff811681146127f357600080fd5b955060208701359450604087013567ffffffffffffffff81111561281657600080fd5b61282289828a01612780565b909550935050606087013567ffffffffffffffff81111561284257600080fd5b61284e89828a01612780565b979a9699509497509295939492505050565b60006020828403121561287257600080fd5b5035919050565b80356001600160a01b038116811461289057600080fd5b919050565b600080604083850312156128a857600080fd5b823591506128b860208401612879565b90509250929050565b6000806000604084860312156128d657600080fd5b83359250602084013567ffffffffffffffff8111156128f457600080fd5b61290086828701612780565b9497909650939450505050565b6000806020838503121561292057600080fd5b823567ffffffffffffffff81111561293757600080fd5b61294385828601612780565b90969095509350505050565b60005b8381101561296a578181015183820152602001612952565b50506000910152565b6000815180845261298b81602086016020860161294f565b601f01601f19169290920160200192915050565b82151581526040602082015260006129ba6040830184612973565b949350505050565b801515811461169657600080fd5b6000602082840312156129e257600080fd5b81356123de816129c2565b600080600060608486031215612a0257600080fd5b505081359360208301359350604090920135919050565b600060208284031215612a2b57600080fd5b6123de82612879565b600060208284031215612a4657600080fd5b813563ffffffff811681146123de57600080fd5b600181811c90821680612a6e57607f821691505b602082108103612a8e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111561094857806000526020600020601f840160051c81016020851015612abb5750805b601f840160051c820191505b81811015612adb5760008155600101612ac7565b5050505050565b67ffffffffffffffff831115612afa57612afa612649565b612b0e83612b088354612a5a565b83612a94565b6000601f841160018114612b425760008515612b2a5750838201355b600019600387901b1c1916600186901b178355612adb565b600083815260209020601f19861690835b82811015612b735786850135825560209485019460019092019101612b53565b5086821015612b905760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561071757610717612ba2565b808202811582820484141761071757610717612ba2565b634e487b7160e01b600052601260045260246000fd5b600082612c0757612c07612be2565b500490565b85815284602082015260806040820152826080820152828460a0830137600060a08483010152600060a0601f19601f86011683010190506001600160a01b03831660608301529695505050505050565b60008060408385031215612c6f57600080fd5b8251612c7a816129c2565b602084015190925067ffffffffffffffff811115612c9757600080fd5b8301601f81018513612ca857600080fd5b8051612cb66126d782612690565b818152866020838501011115612ccb57600080fd5b612cdc82602083016020860161294f565b8093505050509250929050565b600082612cf857612cf8612be2565b500690565b8082018082111561071757610717612ba2565b8181036000831280158383131683831282161715612d3057612d30612ba2565b5092915050565b80820260008212600160ff1b84141615612d5357612d53612ba2565b818105831482151761071757610717612ba2565b600082612d7657612d76612be2565b600160ff1b821460001984141615612d9057612d90612ba2565b500590565b6020815260006123de6020830184612973565b600060208284031215612dba57600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b67ffffffffffffffff8616815260a060208201526000612e1060a0830187612973565b61ffff9590951660408301525063ffffffff92909216606083015260809091015292915050565b6001815b6001841115612e7257808504811115612e5657612e56612ba2565b6001841615612e6457908102905b60019390931c928002612e3b565b935093915050565b600082612e8957506001610717565b81612e9657506000610717565b8160018114612eac5760028114612eb657612ed2565b6001915050610717565b60ff841115612ec757612ec7612ba2565b50506001821b610717565b5060208310610133831016604e8410600b8410161715612ef5575081810a610717565b612f026000198484612e37565b8060001904821115612f1657612f16612ba2565b029392505050565b60006123de8383612e7a56fea2646970667358221220ebb9424e23b2fedc99eaf01afd206168657a612c512ff64443c4fc615a50b70564736f6c634300081d003300000000000000000000000065dcc24f8ff9e51f10dcc7ed1e4e2a61e6e14bd60000000000000000000000006c15b25e9750dccb698c1a4023f34015bfe576490000000000000000000000006c15b25e9750dccb698c1a4023f34015bfe576490000000000000000000000006c15b25e9750dccb698c1a4023f34015bfe57649