0 txs
418 calls
constructor
constructor(address mToken, address swapFacility)
functions
allowance
viewfunction allowance(address account, address spender) view returns (uint256)
authorizationState
viewfunction authorizationState(address authorizer, bytes32 nonce) view returns (bool)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
CANCEL_AUTHORIZATION_TYPEHASH
viewfunction CANCEL_AUTHORIZATION_TYPEHASH() view returns (bytes32)
currentIndex
viewfunction currentIndex() view returns (uint128)
decimals
viewfunction decimals() view returns (uint8)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields_, string name_, string version_, uint256 chainId_, address verifyingContract_, bytes32 salt_, uint256[] extensions_)
FORCED_TRANSFER_MANAGER_ROLE
viewfunction FORCED_TRANSFER_MANAGER_ROLE() view returns (bytes32)
FREEZE_MANAGER_ROLE
viewfunction FREEZE_MANAGER_ROLE() view returns (bytes32)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isEarningEnabled
viewfunction isEarningEnabled() view returns (bool)
isFrozen
viewfunction isFrozen(address account) view returns (bool)
mToken
viewfunction mToken() view returns (address)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address account) view returns (uint256)
paused
viewfunction paused() view returns (bool)
PAUSER_ROLE
viewfunction PAUSER_ROLE() view returns (bytes32)
PERMIT_TYPEHASH
viewfunction PERMIT_TYPEHASH() view returns (bytes32)
RECEIVE_WITH_AUTHORIZATION_TYPEHASH
viewfunction RECEIVE_WITH_AUTHORIZATION_TYPEHASH() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
swapFacility
viewfunction swapFacility() view returns (address)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
TRANSFER_WITH_AUTHORIZATION_TYPEHASH
viewfunction TRANSFER_WITH_AUTHORIZATION_TYPEHASH() view returns (bytes32)
YIELD_RECIPIENT_MANAGER_ROLE
viewfunction YIELD_RECIPIENT_MANAGER_ROLE() view returns (bytes32)
yield
viewfunction yield() view returns (uint256)
yieldRecipient
viewfunction yieldRecipient() view returns (address)
approve
nonpayablefunction approve(address spender_, uint256 amount_) returns (bool)
cancelAuthorization
nonpayablefunction cancelAuthorization(address authorizer_, bytes32 nonce_, bytes signature_)
cancelAuthorization
nonpayablefunction cancelAuthorization(address authorizer_, bytes32 nonce_, bytes32 r_, bytes32 vs_)
cancelAuthorization
nonpayablefunction cancelAuthorization(address authorizer_, bytes32 nonce_, uint8 v_, bytes32 r_, bytes32 s_)
claimYield
nonpayablefunction claimYield() returns (uint256)
disableEarning
nonpayablefunction disableEarning()
enableEarning
nonpayablefunction enableEarning()
forceTransfer
nonpayablefunction forceTransfer(address frozenAccount, address recipient, uint256 amount)
forceTransfers
nonpayablefunction forceTransfers(address[] frozenAccounts, address[] recipients, uint256[] amounts)
freeze
nonpayablefunction freeze(address account)
freezeAccounts
nonpayablefunction freezeAccounts(address[] accounts)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address yieldRecipient, address admin, address freezeManager, address yieldRecipientManager, address pauser, address forcedTransferManager)
initialize
nonpayablefunction initialize(string name, string symbol, address yieldRecipient_, address admin, address freezeManager, address yieldRecipientManager)
pause
nonpayablefunction pause()
permit
nonpayablefunction permit(address owner_, address spender_, uint256 value_, uint256 deadline_, bytes signature_)
permit
nonpayablefunction permit(address owner_, address spender_, uint256 value_, uint256 deadline_, uint8 v_, bytes32 r_, bytes32 s_)
receiveWithAuthorization
nonpayablefunction receiveWithAuthorization(address from_, address to_, uint256 value_, uint256 validAfter_, uint256 validBefore_, bytes32 nonce_, bytes signature_)
receiveWithAuthorization
nonpayablefunction receiveWithAuthorization(address from_, address to_, uint256 value_, uint256 validAfter_, uint256 validBefore_, bytes32 nonce_, bytes32 r_, bytes32 vs_)
receiveWithAuthorization
nonpayablefunction receiveWithAuthorization(address from_, address to_, uint256 value_, uint256 validAfter_, uint256 validBefore_, bytes32 nonce_, uint8 v_, bytes32 r_, bytes32 s_)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setYieldRecipient
nonpayablefunction setYieldRecipient(address account)
transfer
nonpayablefunction transfer(address recipient_, uint256 amount_) returns (bool)
transferFrom
nonpayablefunction transferFrom(address sender_, address recipient_, uint256 amount_) returns (bool)
transferWithAuthorization
nonpayablefunction transferWithAuthorization(address from_, address to_, uint256 value_, uint256 validAfter_, uint256 validBefore_, bytes32 nonce_, bytes signature_)
transferWithAuthorization
nonpayablefunction transferWithAuthorization(address from_, address to_, uint256 value_, uint256 validAfter_, uint256 validBefore_, bytes32 nonce_, bytes32 r_, bytes32 vs_)
transferWithAuthorization
nonpayablefunction transferWithAuthorization(address from_, address to_, uint256 value_, uint256 validAfter_, uint256 validBefore_, bytes32 nonce_, uint8 v_, bytes32 r_, bytes32 s_)
unfreeze
nonpayablefunction unfreeze(address account)
unfreezeAccounts
nonpayablefunction unfreezeAccounts(address[] accounts)
unpause
nonpayablefunction unpause()
unwrap
nonpayablefunction unwrap(address, uint256 amount)
wrap
nonpayablefunction wrap(address recipient, uint256 amount)
events
Approval
event Approval(address indexed account, address indexed spender, uint256 amount)
AuthorizationCanceled
event AuthorizationCanceled(address indexed authorizer, bytes32 indexed nonce)
AuthorizationUsed
event AuthorizationUsed(address indexed authorizer, bytes32 indexed nonce)
EarningDisabled
event EarningDisabled(uint128 index)
EarningEnabled
event EarningEnabled(uint128 index)
EIP712DomainChanged
event EIP712DomainChanged()
ForcedTransfer
event ForcedTransfer(address indexed frozenAccount, address indexed recipient, address indexed forcedTransferManager, uint256 amount)
Frozen
event Frozen(address indexed account, uint256 timestamp)
Initialized
event Initialized(uint64 version)
Paused
event Paused(address account)
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)
Transfer
event Transfer(address indexed sender, address indexed recipient, uint256 amount)
Unfrozen
event Unfrozen(address indexed account, uint256 timestamp)
Unpaused
event Unpaused(address account)
YieldClaimed
event YieldClaimed(uint256 yield)
YieldRecipientSet
event YieldRecipientSet(address indexed yieldRecipient)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AccountFrozen
error AccountFrozen(address account)
AccountNotFrozen
error AccountNotFrozen(address account)
ArrayLengthMismatch
error ArrayLengthMismatch()
AuthorizationAlreadyUsed
error AuthorizationAlreadyUsed(address authorizer, bytes32 nonce)
AuthorizationExpired
error AuthorizationExpired(uint256 timestamp, uint256 validBefore)
AuthorizationNotYetValid
error AuthorizationNotYetValid(uint256 timestamp, uint256 validAfter)
CallerMustBePayee
error CallerMustBePayee(address caller, address payee)
EarningIsDisabled
error EarningIsDisabled()
EarningIsEnabled
error EarningIsEnabled()
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
InsufficientAllowance
error InsufficientAllowance(address spender, uint256 allowance, uint256 needed)
InsufficientAmount
error InsufficientAmount(uint256 amount)
InsufficientBalance
error InsufficientBalance(address account, uint256 balance, uint256 amount)
InvalidAccountNonce
error InvalidAccountNonce(uint256 nonce, uint256 expectedNonce)
InvalidInitialization
error InvalidInitialization()
InvalidRecipient
error InvalidRecipient(address recipient)
InvalidSignature
error InvalidSignature()
InvalidSignatureLength
error InvalidSignatureLength()
InvalidSignatureS
error InvalidSignatureS()
InvalidSignatureV
error InvalidSignatureV()
NotInitializing
error NotInitializing()
NotSwapFacility
error NotSwapFacility()
SignatureExpired
error SignatureExpired(uint256 deadline, uint256 timestamp)
SignerMismatch
error SignerMismatch()
ZeroAdmin
error ZeroAdmin()
ZeroForcedTransferManager
error ZeroForcedTransferManager()
ZeroFreezeManager
error ZeroFreezeManager()
ZeroMToken
error ZeroMToken()
ZeroPauser
error ZeroPauser()
ZeroSwapFacility
error ZeroSwapFacility()
ZeroYieldRecipient
error ZeroYieldRecipient()
ZeroYieldRecipientManager
error ZeroYieldRecipientManager()
creation bytecode
0x60c060405234801561000f575f80fd5b50604051614eb4380380614eb483398101604081905261002e9161016a565b8181818161003a61009d565b6001600160a01b03821660808190526100665760405163b01d5e2b60e01b815260040160405180910390fd5b6001600160a01b03811660a081905261009257604051636880ffc960e11b815260040160405180910390fd5b50505050505061019b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100ed5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161461014c5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b80516001600160a01b0381168114610165575f80fd5b919050565b5f806040838503121561017b575f80fd5b6101848361014f565b91506101926020840161014f565b90509250929050565b60805160a051614cb96101fb5f395f818161089b015281816110a0015261179201525f818161090d01528181610e8701528181611641015281816118900152818161199c015281816121c6015281816126450152612fd70152614cb95ff3fe608060405234801561000f575f80fd5b50600436106103b4575f3560e01c806388b7ab63116101f5578063c9144ddb11610114578063d9169487116100a9578063e583983611610079578063e583983614610a8c578063e63ab1e914610ae3578063e94a010214610b0a578063ef55bec614610b6e575f80fd5b8063d9169487146109db578063dd62ed3e14610a02578063e3ee160e14610a66578063e56f2fe414610a79575f80fd5b8063cf092995116100e4578063cf0929951461098f578063d505accf146109a2578063d547741f146109b5578063d7a49f0b146109c8575f80fd5b8063c9144ddb1461092f578063c967891a14610937578063cc2a9a5b1461093f578063cc4c5b6414610952575f80fd5b8063a8afc01f1161018a578063ae06b7e41161015a578063ae06b7e414610896578063b7b72899146108e2578063bf376c7a146108f5578063c3b6f93914610908575f80fd5b8063a8afc01f14610855578063a9059cbb1461085d578063aad1202914610870578063ace150a514610883575f80fd5b80639fd5a6cf116101c55780639fd5a6cf14610801578063a08cb48b14610814578063a0cc6a6814610827578063a217fddf1461084e575f80fd5b806388b7ab631461076f5780638d1fdf2f1461078257806391d148541461079557806395d89b41146107f9575f80fd5b806336568abe116102e15780635a049a70116102765780637ecebe00116102465780637ecebe00146106d15780637f2eecc3146107255780638456cb591461074c57806384b0196e14610754575f80fd5b80635a049a70146106195780635c975abb1461062c57806363f156491461065657806370a082311461067d575f80fd5b80634259dff9116102b15780634259dff9146105b957806345c8b1a6146105e057806345cf012d146105f3578063532992c514610606575f80fd5b806336568abe1461058357806339f47693146105965780633f4ba83a146105a9578063406cf229146105b1575f80fd5b806326987b601161035757806330adf81f1161032757806330adf81f1461050d578063313ce5671461053457806333bebb77146105685780633644e5151461057b575f80fd5b806326987b60146104a257806328593984146104cb5780632cfd442d146104d35780632f2ff15d146104fa575f80fd5b8063170e207011610392578063170e20701461040857806318160ddd1461041d57806323b872dd1461044e578063248a9ca314610461575f80fd5b806301ffc9a7146103b857806306fdde03146103e0578063095ea7b3146103f5575b5f80fd5b6103cb6103c63660046140b2565b610b81565b60405190151581526020015b60405180910390f35b6103e8610c19565b6040516103d7919061413d565b6103cb610403366004614170565b610ccc565b61041b6104163660046141db565b610ce1565b005b7fee2f6fc7e2e5879b17985791e0d12536cba689bda43c77b8911497248f4af100545b6040519081526020016103d7565b6103cb61045c36600461421a565b610d75565b61044061046f366004614258565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6104aa610e84565b6040516fffffffffffffffffffffffffffffffff90911681526020016103d7565b610440610f17565b6104407fc66b3536568140ce119bcc21a4fa7e3449a56fb5f260d32ff8e719230264132c81565b61041b61050836600461426f565b610f67565b6104407f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b7fcbbe23efb65c1eaba394256c463812c20abdb5376e247eba1d0e1e92054da1015460405160ff90911681526020016103d7565b61041b61057636600461421a565b610fb0565b610440610fe5565b61041b61059136600461426f565b61102a565b61041b6105a4366004614170565b611088565b61041b611171565b6104406111a6565b6104407f4a5e9eb1ba56d04185ff75ebf0f4f42a3d7c88c35b4a90fa278437e0c9bdceca81565b61041b6105ee36600461429d565b611247565b61041b61060136600461429d565b61129b565b61041b6106143660046142b8565b6112d7565b61041b610627366004614300565b6112f6565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff166103cb565b6104407f109b88c1c8d528799ca6f455418979dd2a552493f14553ce44443b23f7df8b3581565b61044061068b36600461429d565b73ffffffffffffffffffffffffffffffffffffffff165f9081527fee2f6fc7e2e5879b17985791e0d12536cba689bda43c77b8911497248f4af102602052604090205490565b6104406106df36600461429d565b73ffffffffffffffffffffffffffffffffffffffff165f9081527f1b21ba3f0a2135d61c468900b54084f04af8111bce0f8bbb6ab8c46d11afbd00602052604090205490565b6104407fd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de881565b61041b611316565b61075c611348565b6040516103d7979695949392919061434c565b61041b61077d3660046144e7565b6114a3565b61041b61079036600461429d565b6114d2565b6103cb6107a336600461426f565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6103e8611526565b61041b61080f36600461456a565b61154e565b61041b6108223660046145db565b61155e565b6104407f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a226781565b6104405f81565b61041b611588565b6103cb61086b366004614170565b6116a9565b61041b61087e3660046141db565b6116b5565b61041b6108913660046145db565b611742565b6108bd7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016103d7565b61041b6108f0366004614641565b611762565b61041b610903366004614170565b61177a565b6108bd7f000000000000000000000000000000000000000000000000000000000000000081565b6103cb611860565b61041b61190e565b61041b61094d366004614696565b6119ff565b7fee2f6fc7e2e5879b17985791e0d12536cba689bda43c77b8911497248f4af1015473ffffffffffffffffffffffffffffffffffffffff166108bd565b61041b61099d3660046144e7565b611cd5565b61041b6109b0366004614714565b611cf5565b61041b6109c336600461426f565b611d05565b61041b6109d636600461477e565b611d48565b6104407f158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a159742981565b610440610a1036600461481d565b73ffffffffffffffffffffffffffffffffffffffff9182165f9081527fcbbe23efb65c1eaba394256c463812c20abdb5376e247eba1d0e1e92054da1006020908152604080832093909416825291909152205490565b61041b610a74366004614849565b611e39565b61041b610a873660046148c8565b611e64565b6103cb610a9a36600461429d565b73ffffffffffffffffffffffffffffffffffffffff165f9081527f2fd5767309dce890c526ace85d7fe164825199d7dcd99c33588befc51b32ce00602052604090205460ff1690565b6104407f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a81565b6103cb610b18366004614170565b73ffffffffffffffffffffffffffffffffffffffff919091165f9081527f1116a1d33aa5fb91b2652b3b0fdb63704173742d6dbecaf4256ebe33a488860060209081526040808320938352929052205460ff1690565b61041b610b7c366004614849565b611fc6565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610c1357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b60607f103ce0bed7138196cdb0d79ef04042681b16e7a2c58d74b78443c813042ea1005b6002018054610c4b90614938565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7790614938565b8015610cc25780601f10610c9957610100808354040283529160200191610cc2565b820191905f5260205f20905b815481529060010190602001808311610ca557829003601f168201915b5050505050905090565b5f610cd8338484611fe6565b50600192915050565b7f109b88c1c8d528799ca6f455418979dd2a552493f14553ce44443b23f7df8b35610d0b81611ffc565b7f2fd5767309dce890c526ace85d7fe164825199d7dcd99c33588befc51b32ce005f5b83811015610d6e57610d6682868684818110610d4c57610d4c614989565b9050602002016020810190610d61919061429d565b612006565b600101610d2e565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff83165f9081527fcbbe23efb65c1eaba394256c463812c20abdb5376e247eba1d0e1e92054da100602081815260408084203385529091528220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610e6d5783811015610e3a576040517f192b9e4e00000000000000000000000000000000000000000000000000000000815233600482015260248101829052604481018590526064015b60405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff86165f90815260208381526040808320338452909152902084820390555b610e78868686612091565b50600195945050505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166326987b606040518163ffffffff1660e01b8152600401602060405180830381865afa158015610eee573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f1291906149b6565b905090565b5f80610f223061217f565b90505f610f4d7fee2f6fc7e2e5879b17985791e0d12536cba689bda43c77b8911497248f4af1005490565b9050808211610f5c575f610f60565b8082035b9250505090565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610fa081611ffc565b610faa8383612231565b50505050565b7fc66b3536568140ce119bcc21a4fa7e3449a56fb5f260d32ff8e719230264132c610fda81611ffc565b610faa84848461234f565b7f103ce0bed7138196cdb0d79ef04042681b16e7a2c58d74b78443c813042ea10080545f9190461461101e57611019612452565b611024565b80600101545b91505090565b73ffffffffffffffffffffffffffffffffffffffff81163314611079576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611083828261250d565b505050565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146110f7576040517f2bfe1b5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61116d3373ffffffffffffffffffffffffffffffffffffffff1663d737d0c76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611143573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061116791906149e5565b826125e9565b5050565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61119b81611ffc565b6111a36126c4565b50565b5f6111af612761565b5f6111b8610f17565b9050805f036111c8575f91505090565b6040518181527fd1c22369a95f91ae16576036bba6372736ba109f257ad94dccb89e141762e2659060200160405180910390a161124261123c7fee2f6fc7e2e5879b17985791e0d12536cba689bda43c77b8911497248f4af1015473ffffffffffffffffffffffffffffffffffffffff1690565b8261278b565b919050565b7f109b88c1c8d528799ca6f455418979dd2a552493f14553ce44443b23f7df8b3561127181611ffc565b61116d7f2fd5767309dce890c526ace85d7fe164825199d7dcd99c33588befc51b32ce0083612006565b7f4a5e9eb1ba56d04185ff75ebf0f4f42a3d7c88c35b4a90fa278437e0c9bdceca6112c581611ffc565b6112cd6111a6565b5061116d82612838565b6112ec846112e5868661295e565b84846129d9565b610faa84846129ed565b61130c85611304878761295e565b858585612a9a565b610d6e85856129ed565b7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a61134081611ffc565b6111a3612aaa565b5f606080828080837f103ce0bed7138196cdb0d79ef04042681b16e7a2c58d74b78443c813042ea10060020146305f806040519080825280602002602001820160405280156113a1578160200160208202803683370190505b507f0f0000000000000000000000000000000000000000000000000000000000000094939291908480546113d490614938565b80601f016020809104026020016040519081016040528092919081815260200182805461140090614938565b801561144b5780601f106114225761010080835404028352916020019161144b565b820191905f5260205f20905b81548152906001019060200180831161142e57829003601f168201915b505050505094506040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525093929190965096509650965096509650965090919293949596565b6114bb876114b5898989898989612b23565b83612baa565b6114c9878787878787612bf5565b50505050505050565b7f109b88c1c8d528799ca6f455418979dd2a552493f14553ce44443b23f7df8b356114fc81611ffc565b61116d7f2fd5767309dce890c526ace85d7fe164825199d7dcd99c33588befc51b32ce0083612c78565b60607fcbbe23efb65c1eaba394256c463812c20abdb5376e247eba1d0e1e92054da100610c3d565b610d6e856114b587878787612d01565b611570886112e58a8a8a8a8a8a612b23565b61157e888888888888612bf5565b5050505050505050565b611590611860565b6115c6576040517fb019ea3500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fee580fdb4da10ea17aa673e6f5c8c2370b4166d6a94bc88900e5a96d0589e3ce6115ef610e84565b6040516fffffffffffffffffffffffffffffffff909116815260200160405180910390a16040517f81399be40000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906381399be4906024015f604051808303815f87803b158015611697575f80fd5b505af1158015610faa573d5f803e3d5ffd5b5f610cd8338484612091565b7f109b88c1c8d528799ca6f455418979dd2a552493f14553ce44443b23f7df8b356116df81611ffc565b7f2fd5767309dce890c526ace85d7fe164825199d7dcd99c33588befc51b32ce005f5b83811015610d6e5761173a8286868481811061172057611720614989565b9050602002016020810190611735919061429d565b612c78565b600101611702565b611754886112e58a8a8a8a8a8a612dcb565b61157e888888888888612e47565b611770836114b5858561295e565b61108383836129ed565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146117e9576040517f2bfe1b5c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61116d3373ffffffffffffffffffffffffffffffffffffffff1663d737d0c76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611835573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061185991906149e5565b8383612f7f565b6040517f84af270f0000000000000000000000000000000000000000000000000000000081523060048201525f907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906384af270f90602401602060405180830381865afa1580156118ea573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f129190614a00565b611916611860565b1561194d576040517f7a42736800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f5098de6eb11dbd1127cf4dcd5e960e3944d48a7570b9b1939cff715cb35c5a18611976610e84565b6040516fffffffffffffffffffffffffffffffff909116815260200160405180910390a17f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a36e40fc6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015611697575f80fd5b5f611a08613061565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f81158015611a345750825b90505f8267ffffffffffffffff166001148015611a505750303b155b905081158015611a5e575080155b15611a95576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315611af65784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b73ffffffffffffffffffffffffffffffffffffffff8716611b43576040517f042d717b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8616611b90576040517f354368a500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611c086040518060400160405280600c81526020017f4d6574614d61736b2055534400000000000000000000000000000000000000008152506040518060400160405280600481526020017f6d555344000000000000000000000000000000000000000000000000000000008152508d8d8d8d613089565b611c1061317c565b611c3a7f65d7a28e3265b37a6474929f336521b332c1681b933f6cb9f3376673440d862a88612231565b50611c657fc66b3536568140ce119bcc21a4fa7e3449a56fb5f260d32ff8e719230264132c87612231565b508315611cc85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b5050505050505050505050565b611ce7876114b5898989898989612dcb565b6114c9878787878787612e47565b6114c98761130489898989612d01565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154611d3e81611ffc565b610faa838361250d565b7fc66b3536568140ce119bcc21a4fa7e3449a56fb5f260d32ff8e719230264132c611d7281611ffc565b8584141580611d815750858214155b15611db8576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b8681101561157e57611e31888883818110611dd757611dd7614989565b9050602002016020810190611dec919061429d565b878784818110611dfe57611dfe614989565b9050602002016020810190611e13919061429d565b868685818110611e2557611e25614989565b9050602002013561234f565b600101611dba565b611e4b896113048b8b8b8b8b8b612dcb565b611e59898989898989612e47565b505050505050505050565b5f611e6d613061565b805490915060ff68010000000000000000820416159067ffffffffffffffff165f81158015611e995750825b90505f8267ffffffffffffffff166001148015611eb55750303b155b905081158015611ec3575080155b15611efa576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315611f5b5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b611f698b8b8b8b8b8b613089565b8315611cc85784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602001611cbf565b611fd8896113048b8b8b8b8b8b612b23565b611e59898989898989612bf5565b611ff1838383613186565b6110838383836131bb565b6111a3813361323f565b61201082826132e5565b73ffffffffffffffffffffffffffffffffffffffff81165f818152602084815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590514281527f07d647ad688e085159820c1d8d030e5765cdc5274d4ee4065c6066b388a2ef5991015b60405180910390a25050565b61209a8261335b565b6120a58383836133c0565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161210491815260200190565b60405180910390a3805f0361211857505050565b61212283826133d3565b73ffffffffffffffffffffffffffffffffffffffff8084165f9081527fee2f6fc7e2e5879b17985791e0d12536cba689bda43c77b8911497248f4af102602052604080822080548590039055918416815220805482019055505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301525f917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa15801561220d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c139190614a1f565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16612346575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556122e23390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610c13565b5f915050610c13565b6123588261335b565b61236183613477565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516123c091815260200190565b60405180910390a33373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f47cea260e2dfb95ed2ab59ad44fe2ac9cddb432afb828d2a1475936b5a2b829a8460405161243e91815260200190565b60405180910390a4805f0361211857505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f103ce0bed7138196cdb0d79ef04042681b16e7a2c58d74b78443c813042ea1006002016040516124a59190614a36565b6040805191829003822060208301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1615612346575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610c13565b6125f28161350c565b6125fc8282613548565b61260633826133d3565b612610338261355a565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303815f875af11580156126a0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110839190614a00565b6126cc6135ff565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001681557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a150565b7f4a5e9eb1ba56d04185ff75ebf0f4f42a3d7c88c35b4a90fa278437e0c9bdceca6111a381611ffc565b73ffffffffffffffffffffffffffffffffffffffff82165f8181527fee2f6fc7e2e5879b17985791e0d12536cba689bda43c77b8911497248f4af102602090815260408083208054860190557fee2f6fc7e2e5879b17985791e0d12536cba689bda43c77b8911497248f4af1008054860181559051858152909392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91015b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8116612885576040517f5dfd400c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fee2f6fc7e2e5879b17985791e0d12536cba689bda43c77b8911497248f4af101547fee2f6fc7e2e5879b17985791e0d12536cba689bda43c77b8911497248f4af1009073ffffffffffffffffffffffffffffffffffffffff908116908316036128ed575050565b6001810180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff84169081179091556040517f77f12a3c9f87d4602fe59bb8d2b68c7b516e0cacba414a53e74ea75d435dc18d905f90a25050565b604080517f158b0a9edf7a828aad02f63cd515c68ef2f50ba807396f6d12842833a1597429602082015273ffffffffffffffffffffffffffffffffffffffff841691810191909152606081018290525f906129d2906080015b6040516020818303038152906040528051906020012061365a565b9392505050565b610faa6129e8858585856136bb565b6136f6565b6129f782826138ba565b73ffffffffffffffffffffffffffffffffffffffff82165f8181527f1116a1d33aa5fb91b2652b3b0fdb63704173742d6dbecaf4256ebe33a48886006020908152604080832085845290915280822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055518392917f1cdd46ff242716cdaa72d159d339a485b3438398348d68f09d7c8c0a59353d8191a35050565b610d6e6129e88686868686613962565b612ab26139aa565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011781557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25833612736565b604080517fd099cc98ef71107a616c4f0f941f04c322d8e254fe26b3c6668db87aae413de8602082015273ffffffffffffffffffffffffffffffffffffffff8089169282019290925290861660608201526080810185905260a0810184905260c0810183905260e081018290525f90612b9f90610100016129b7565b979650505050505050565b5f612bb6848484613a06565b90505f816005811115612bcb57612bcb614ac5565b03612bd65750505050565b612be1848484613a4a565b15612bec5750505050565b610faa816136f6565b3373ffffffffffffffffffffffffffffffffffffffff861614612c62576040517f1c5939f300000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff86166024820152604401610e31565b612c70868686868686612e47565b505050505050565b612c828282613b92565b73ffffffffffffffffffffffffffffffffffffffff81165f818152602084905260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055517f68e0d8c112165d0949ce87205b719ed7d98c7401866c34a159f7c67c6f5620e7906120859042815260200190565b5f612d0b82613c09565b612d16858585611fe6565b73ffffffffffffffffffffffffffffffffffffffff8086165f8181527f1b21ba3f0a2135d61c468900b54084f04af8111bce0f8bbb6ab8c46d11afbd00602090815260409182902080546001810190915582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928101929092529181019290925291861660608201526080810185905260a081019190915260c08101839052612dc29060e0016129b7565b95945050505050565b604080517f7c7c6cdb67a18743f49ec6fa9b35f50d52ed05cbed4cc592e13b44501c1a2267602082015273ffffffffffffffffffffffffffffffffffffffff8089169282019290925290861660608201526080810185905260a0810184905260c0810183905260e081018290525f90612b9f90610100016129b7565b824211612e89576040517f498ff9a200000000000000000000000000000000000000000000000000000000815242600482015260248101849052604401610e31565b814210612ecb576040517fb3fcd33e00000000000000000000000000000000000000000000000000000000815242600482015260248101839052604401610e31565b612ed586826138ba565b73ffffffffffffffffffffffffffffffffffffffff86165f8181527f1116a1d33aa5fb91b2652b3b0fdb63704173742d6dbecaf4256ebe33a48886006020908152604080832085845290915280822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055518392917f98de503528ee59b575ef0c0a2576a82497bfc029a5685b209e9ec333479b10a591a3612c70868686612091565b612f888261335b565b612f918161350c565b612f9c838383613c4c565b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303815f875af1158015613032573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130569190614a00565b50611083828261278b565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610c13565b613091613c5f565b73ffffffffffffffffffffffffffffffffffffffff81166130de576040517f09d50edf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff831661312b576040517f7289db0e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6131358686613c9d565b61313e82613cb1565b61314784612838565b6131515f84612231565b506114c97f4a5e9eb1ba56d04185ff75ebf0f4f42a3d7c88c35b4a90fa278437e0c9bdceca82612231565b613184613c5f565b565b7f2fd5767309dce890c526ace85d7fe164825199d7dcd99c33588befc51b32ce006131b18185613b92565b610faa8184613b92565b73ffffffffffffffffffffffffffffffffffffffff8381165f8181527fcbbe23efb65c1eaba394256c463812c20abdb5376e247eba1d0e1e92054da100602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910161282b565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661116d576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610e31565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020839052604090205460ff1661116d576040517ffc78247900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610e31565b73ffffffffffffffffffffffffffffffffffffffff81166111a3576040517f17858bbe00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610e31565b6133c86139aa565b611083838383613d30565b73ffffffffffffffffffffffffffffffffffffffff82165f9081527fee2f6fc7e2e5879b17985791e0d12536cba689bda43c77b8911497248f4af102602052604090205481811015611083576040517fdb42144d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610e31565b73ffffffffffffffffffffffffffffffffffffffff81165f9081527f2fd5767309dce890c526ace85d7fe164825199d7dcd99c33588befc51b32ce00602052604090205460ff166111a3576040517ffc78247900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610e31565b805f036111a3576040517f77b8dde300000000000000000000000000000000000000000000000000000000815260048101829052602401610e31565b6135506139aa565b61116d8282613d65565b73ffffffffffffffffffffffffffffffffffffffff82165f8181527fee2f6fc7e2e5879b17985791e0d12536cba689bda43c77b8911497248f4af10260209081526040808320805486900390557fee2f6fc7e2e5879b17985791e0d12536cba689bda43c77b8911497248f4af1008054869003815590518581529093917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910161282b565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff16613184576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f613663610fe5565b6040517f19010000000000000000000000000000000000000000000000000000000000006020820152602281019190915260428101839052606201604051602081830303815290604052805190602001209050919050565b5f805f6136c9868686613d8f565b90925090505f8260058111156136e1576136e1614ac5565b146136ec5781612b9f565b612b9f8782613dd6565b5f81600581111561370957613709614ac5565b036137115750565b600181600581111561372557613725614ac5565b0361375c576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600281600581111561377057613770614ac5565b036137a7576040517f4be6321b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038160058111156137bb576137bb614ac5565b036137f2576040517fbf4bf5b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600481600581111561380657613806614ac5565b0361383d576040517fff551e8900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600581600581111561385157613851614ac5565b03613888576040517f10c74b0300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82165f9081527f1116a1d33aa5fb91b2652b3b0fdb63704173742d6dbecaf4256ebe33a48886006020908152604080832084845290915290205460ff161561116d576040517fd309466d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015260248101829052604401610e31565b5f805f61397187878787613e19565b90925090505f82600581111561398957613989614ac5565b14613994578161399e565b61399e8882613dd6565b98975050505050505050565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005460ff1615613184576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f805f613a138585613f26565b90925090505f826005811115613a2b57613a2b614ac5565b14613a365781613a40565b613a408682613dd6565b9695505050505050565b5f805f8573ffffffffffffffffffffffffffffffffffffffff168585604051602401613a77929190614af2565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f1626ba7e0000000000000000000000000000000000000000000000000000000017905251613af89190614b12565b5f60405180830381855afa9150503d805f8114613b30576040519150601f19603f3d011682016040523d82523d5f602084013e613b35565b606091505b5091509150818015613b4957506020815110155b8015613a40575080517f1626ba7e0000000000000000000000000000000000000000000000000000000090613b879083016020908101908401614a1f565b149695505050505050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526020839052604090205460ff161561116d576040517f4f2a367e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82166004820152602401610e31565b804211156111a3576040517ff88f049000000000000000000000000000000000000000000000000000000000815260048101829052426024820152604401610e31565b613c546139aa565b611083838383613186565b613c67613f6a565b613184576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613ca5613c5f565b61116d82826006613f88565b613cb9613c5f565b73ffffffffffffffffffffffffffffffffffffffff8116613d06576040517f6cbbd1d300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61116d7f109b88c1c8d528799ca6f455418979dd2a552493f14553ce44443b23f7df8b3582612231565b7f2fd5767309dce890c526ace85d7fe164825199d7dcd99c33588befc51b32ce00613d5b8133613b92565b6131b18185613b92565b61116d7f2fd5767309dce890c526ace85d7fe164825199d7dcd99c33588befc51b32ce0083613b92565b5f80601b60ff84901c017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8416613dc887838884613e19565b935093505050935093915050565b5f8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614613e115760056129d2565b505f92915050565b5f807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0831115613e4e5750600390505f613f1d565b8460ff16601b14158015613e6657508460ff16601c14155b15613e765750600490505f613f1d565b604080515f81526020810180835288905260ff871691810191909152606081018590526080810184905260019060a0016020604051602081039080840390855afa158015613ec6573d5f803e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811615613f14575f81613f18565b60015f5b915091505b94509492505050565b5f808251604114613f3c5750600290505f613f63565b6020830151604084015160608501515f1a9190613f5b87848484613e19565b945094505050505b9250929050565b5f613f73613061565b5468010000000000000000900460ff16919050565b613f90613c5f565b613f9983614031565b7fcbbe23efb65c1eaba394256c463812c20abdb5376e247eba1d0e1e92054da10180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff83161790557fcbbe23efb65c1eaba394256c463812c20abdb5376e247eba1d0e1e92054da1007fcbbe23efb65c1eaba394256c463812c20abdb5376e247eba1d0e1e92054da102610d6e8482614b6c565b614039613c5f565b6111a381614045613c5f565b6111a381614051613c5f565b7f103ce0bed7138196cdb0d79ef04042681b16e7a2c58d74b78443c813042ea1007f103ce0bed7138196cdb0d79ef04042681b16e7a2c58d74b78443c813042ea10261409d8382614b6c565b504681556140a9612452565b60019091015550565b5f602082840312156140c2575f80fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146129d2575f80fd5b5f81518084528060208401602086015e5f6020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081525f6129d260208301846140f1565b73ffffffffffffffffffffffffffffffffffffffff811681146111a3575f80fd5b5f8060408385031215614181575f80fd5b823561418c8161414f565b946020939093013593505050565b5f8083601f8401126141aa575f80fd5b50813567ffffffffffffffff8111156141c1575f80fd5b6020830191508360208260051b8501011115613f63575f80fd5b5f80602083850312156141ec575f80fd5b823567ffffffffffffffff811115614202575f80fd5b61420e8582860161419a565b90969095509350505050565b5f805f6060848603121561422c575f80fd5b83356142378161414f565b925060208401356142478161414f565b929592945050506040919091013590565b5f60208284031215614268575f80fd5b5035919050565b5f8060408385031215614280575f80fd5b8235915060208301356142928161414f565b809150509250929050565b5f602082840312156142ad575f80fd5b81356129d28161414f565b5f805f80608085870312156142cb575f80fd5b84356142d68161414f565b966020860135965060408601359560600135945092505050565b803560ff81168114611242575f80fd5b5f805f805f60a08688031215614314575f80fd5b853561431f8161414f565b945060208601359350614334604087016142f0565b94979396509394606081013594506080013592915050565b7fff000000000000000000000000000000000000000000000000000000000000008816815260e060208201525f61438660e08301896140f1565b828103604084015261439881896140f1565b6060840188905273ffffffffffffffffffffffffffffffffffffffff8716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b818110156143fa5783518352602093840193909201916001016143dc565b50909b9a5050505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f82601f830112614447575f80fd5b8135602083015f8067ffffffffffffffff8411156144675761446761440b565b506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f85018116603f0116810181811067ffffffffffffffff821117156144b4576144b461440b565b6040528381529050808284018710156144cb575f80fd5b838360208301375f602085830101528094505050505092915050565b5f805f805f805f60e0888a0312156144fd575f80fd5b87356145088161414f565b965060208801356145188161414f565b955060408801359450606088013593506080880135925060a0880135915060c088013567ffffffffffffffff81111561454f575f80fd5b61455b8a828b01614438565b91505092959891949750929550565b5f805f805f60a0868803121561457e575f80fd5b85356145898161414f565b945060208601356145998161414f565b93506040860135925060608601359150608086013567ffffffffffffffff8111156145c2575f80fd5b6145ce88828901614438565b9150509295509295909350565b5f805f805f805f80610100898b0312156145f3575f80fd5b88356145fe8161414f565b9750602089013561460e8161414f565b979a9799505050506040860135956060810135956080820135955060a0820135945060c0820135935060e0909101359150565b5f805f60608486031215614653575f80fd5b833561465e8161414f565b925060208401359150604084013567ffffffffffffffff811115614680575f80fd5b61468c86828701614438565b9150509250925092565b5f805f805f8060c087890312156146ab575f80fd5b86356146b68161414f565b955060208701356146c68161414f565b945060408701356146d68161414f565b935060608701356146e68161414f565b925060808701356146f68161414f565b915060a08701356147068161414f565b809150509295509295509295565b5f805f805f805f60e0888a03121561472a575f80fd5b87356147358161414f565b965060208801356147458161414f565b95506040880135945060608801359350614761608089016142f0565b9699959850939692959460a0840135945060c09093013592915050565b5f805f805f8060608789031215614793575f80fd5b863567ffffffffffffffff8111156147a9575f80fd5b6147b589828a0161419a565b909750955050602087013567ffffffffffffffff8111156147d4575f80fd5b6147e089828a0161419a565b909550935050604087013567ffffffffffffffff8111156147ff575f80fd5b61480b89828a0161419a565b979a9699509497509295939492505050565b5f806040838503121561482e575f80fd5b82356148398161414f565b915060208301356142928161414f565b5f805f805f805f805f6101208a8c031215614862575f80fd5b893561486d8161414f565b985060208a013561487d8161414f565b975060408a0135965060608a0135955060808a0135945060a08a013593506148a760c08b016142f0565b989b979a50959894979396929550929360e081013593506101000135919050565b5f805f805f8060c087890312156148dd575f80fd5b863567ffffffffffffffff8111156148f3575f80fd5b6148ff89828a01614438565b965050602087013567ffffffffffffffff81111561491b575f80fd5b61492789828a01614438565b95505060408701356146d68161414f565b600181811c9082168061494c57607f821691505b602082108103614983577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f602082840312156149c6575f80fd5b81516fffffffffffffffffffffffffffffffff811681146129d2575f80fd5b5f602082840312156149f5575f80fd5b81516129d28161414f565b5f60208284031215614a10575f80fd5b815180151581146129d2575f80fd5b5f60208284031215614a2f575f80fd5b5051919050565b5f808354614a4381614938565b600182168015614a5a5760018114614a8d57614aba565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0083168652811515820286019350614aba565b865f5260205f205f5b83811015614ab257815488820152600190910190602001614a96565b505081860193505b509195945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b828152604060208201525f614b0a60408301846140f1565b949350505050565b5f82518060208501845e5f920191825250919050565b601f82111561108357805f5260205f20601f840160051c81016020851015614b4d5750805b601f840160051c820191505b81811015610d6e575f8155600101614b59565b815167ffffffffffffffff811115614b8657614b8661440b565b614b9a81614b948454614938565b84614b28565b6020601f821160018114614beb575f8315614bb55750848201515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b178455610d6e565b5f848152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08516915b82811015614c385787850151825560209485019460019092019101614c18565b5084821015614c7457868401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b60f8161c191681555b50505050600190811b0190555056fea2646970667358221220137acbeccb04ab355abeb82458ee0c253ff13d654d07fae20e8d6360528c3ba464736f6c634300081a0033000000000000000000000000866a2bf4e572cbcf37d5071a7a58503bfb36be1b000000000000000000000000b6807116b3b1b321a390594e31ecd6e0076f6278