0 txs
0 calls
constructor
constructor(address chainlinkFeedRegistry_)
functions
ADD_PT_TOKEN_PRICE
viewfunction ADD_PT_TOKEN_PRICE() view returns (bytes32)
CHAINLINK_FEED_REGISTRY
viewfunction CHAINLINK_FEED_REGISTRY() view returns (address)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getAssetPrice
viewfunction getAssetPrice(address asset_) view returns (uint256 assetPrice, uint256 decimals)
getAssetsPrices
viewfunction getAssetsPrices(address[] assets_) view returns (uint256[] assetPrices, uint256[] decimalsList)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRoleMember
viewfunction getRoleMember(bytes32 role, uint256 index) view returns (address)
getRoleMemberCount
viewfunction getRoleMemberCount(bytes32 role) view returns (uint256)
getSourceOfAssetPrice
viewfunction getSourceOfAssetPrice(address asset_) view returns (address sourceOfAssetPrice)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
QUOTE_CURRENCY_DECIMALS
viewfunction QUOTE_CURRENCY_DECIMALS() view returns (uint256)
QUOTE_CURRENCY
viewfunction QUOTE_CURRENCY() view returns (address)
SET_ASSETS_PRICES_SOURCES
viewfunction SET_ASSETS_PRICES_SOURCES() view returns (bytes32)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
createAndAddPtTokenPriceFeed
nonpayablefunction createAndAddPtTokenPriceFeed(address pendleOracle_, address pendleMarket_, uint32 twapWindow_, int256 expextedPriceAfterDeployment_, uint256 usePendleOracleMethod_) returns (address ptPriceFeed)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address initialAdmin_)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setAssetsPricesSources
nonpayablefunction setAssetsPricesSources(address[] assets_, address[] sources_)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AssetPriceSourceUpdated
event AssetPriceSourceUpdated(address asset, address source)
Initialized
event Initialized(uint64 version)
NewPtPriceFeedDeployedEvent
event NewPtPriceFeedDeployedEvent(address ptPriceFeed)
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)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AddressEmptyCode
error AddressEmptyCode(address target)
ArrayLengthMismatch
error ArrayLengthMismatch()
AssetPriceSourceAlreadySet
error AssetPriceSourceAlreadySet()
AssetsAddressCanNotBeZero
error AssetsAddressCanNotBeZero()
EmptyArrayNotSupported
error EmptyArrayNotSupported()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedInnerCall
error FailedInnerCall()
InvalidExpectedPrice
error InvalidExpectedPrice()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
PriceDeltaTooHigh
error PriceDeltaTooHigh()
SafeCastOverflowedIntToUint
error SafeCastOverflowedIntToUint(int256 value)
SourceAddressCanNotBeZero
error SourceAddressCanNotBeZero()
UnexpectedPriceResult
error UnexpectedPriceResult()
UnsupportedAsset
error UnsupportedAsset()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60c060405230608052348015610013575f80fd5b50604051614658380380614658833981016040819052610032916100fd565b61003a61004b565b6001600160a01b031660a05261012a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161561009b5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100fa5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b5f6020828403121561010d575f80fd5b81516001600160a01b0381168114610123575f80fd5b9392505050565b60805160a0516144ea61016e5f395f818161032d015281816116e50152818161179d01526118a101525f81816112a8015281816112d101526114f601526144ea5ff3fe608060405260043610610178575f3560e01c80639010d07c116100d1578063b5122b971161007c578063cfefbec911610057578063cfefbec914610518578063d547741f14610537578063f4a6e45814610556575f80fd5b8063b5122b97146104a7578063c4d66de8146104da578063ca15c873146104f9575f80fd5b8063a217fddf116100ac578063a217fddf1461040b578063ad3cb1cc1461041e578063b3596f0714610473575f80fd5b80639010d07c1461034f57806391d148541461036e5780639d23d9f2146103de575f80fd5b8063324d73651161013157806352d1902d1161010c57806352d1902d146102d55780637ad33719146102e95780637d9f77121461031c575f80fd5b8063324d73651461028f57806336568abe146102a35780634f1ef286146102c2575f80fd5b8063248a9ca311610161578063248a9ca3146101d157806329626d0a1461022c5780632f2ff15d14610270575f80fd5b806301ffc9a71461017c5780630cd95a0c146101b0575b5f80fd5b348015610187575f80fd5b5061019b6101963660046121a9565b61056b565b60405190151581526020015b60405180910390f35b3480156101bb575f80fd5b506101cf6101ca366004612230565b6105c6565b005b3480156101dc575f80fd5b5061021e6101eb36600461229c565b5f9081527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800602052604090206001015490565b6040519081526020016101a7565b348015610237575f80fd5b5061024b6102463660046122d4565b6106df565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101a7565b34801561027b575f80fd5b506101cf61028a366004612333565b610abe565b34801561029a575f80fd5b5061021e601281565b3480156102ae575f80fd5b506101cf6102bd366004612333565b610b07565b6101cf6102d036600461238e565b610b65565b3480156102e0575f80fd5b5061021e610b84565b3480156102f4575f80fd5b5061021e7f58fb5220de46b94ead43a7c850443ec6b00bec9e9e2a8741abda98af086ec95781565b348015610327575f80fd5b5061024b7f000000000000000000000000000000000000000000000000000000000000000081565b34801561035a575f80fd5b5061024b610369366004612491565b610bb2565b348015610379575f80fd5b5061019b610388366004612333565b5f9182527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156103e9575f80fd5b506103fd6103f83660046124b1565b610bf2565b6040516101a792919061252a565b348015610416575f80fd5b5061021e5f81565b348015610429575f80fd5b506104666040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516101a7919061254e565b34801561047e575f80fd5b5061049261048d3660046125a1565b610d3e565b604080519283526020830191909152016101a7565b3480156104b2575f80fd5b5061021e7f7bbd1fd432aa686d83eaff2e940b6d3b56e45b893444614ca341987f14379c7d81565b3480156104e5575f80fd5b506101cf6104f43660046125a1565b610d53565b348015610504575f80fd5b5061021e61051336600461229c565b610ee3565b348015610523575f80fd5b5061024b6105323660046125a1565b610f21565b348015610542575f80fd5b506101cf610551366004612333565b610f6e565b348015610561575f80fd5b5061024b61034881565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f5a05180f0000000000000000000000000000000000000000000000000000000014806105c057506105c082610fb1565b92915050565b7f58fb5220de46b94ead43a7c850443ec6b00bec9e9e2a8741abda98af086ec9576105f081611047565b83828115806105fd575080155b15610634576040517fb9fd259b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821461066d576040517fa24a13a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f5b828110156106d5576106cd88888381811061068c5761068c6125bc565b90506020020160208101906106a191906125a1565b8787848181106106b3576106b36125bc565b90506020020160208101906106c891906125a1565b611054565b60010161066f565b5050505050505050565b5f7f7bbd1fd432aa686d83eaff2e940b6d3b56e45b893444614ca341987f14379c7d61070a81611047565b5f8413610743576040517f8c34751400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b86868630866040516107549061219c565b73ffffffffffffffffffffffffffffffffffffffff9586168152938516602085015263ffffffff9092166040840152929092166060820152608081019190915260a001604051809103905ff0801580156107b0573d5f803e3d5ffd5b5091505f8273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107fd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108219190612607565b50505091505084811215610897575f61083a8287612682565b90505f866108498360646126a1565b6108539190612719565b90506001811315610890576040517fbc7362a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50506108fb565b5f6108a28683612682565b90505f866108b18360646126a1565b6108bb9190612719565b905060018113156108f8576040517fbc7362a600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505b5f8373ffffffffffffffffffffffffffffffffffffffff16630f61ac826040518163ffffffff1660e01b8152600401602060405180830381865afa158015610945573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109699190612780565b90505f8173ffffffffffffffffffffffffffffffffffffffff16632c8ce6bc6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156109b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109d9919061279b565b5073ffffffffffffffffffffffffffffffffffffffff8181165f9081527fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd0060205260409020549193501690508015610a5d576040517f8713059400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a678287611054565b60405173ffffffffffffffffffffffffffffffffffffffff871681527f50c0668eda69125914053d9f080dd87ea0ceaa86c9112a3f3bfe6f9c5e2781889060200160405180910390a1505050505095945050505050565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610af781611047565b610b0183836111ef565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610b56576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b608282611244565b505050565b610b6d611290565b610b7682611396565b610b8082826113a0565b5050565b5f610b8d6114de565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b5f8281527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220610bea908461154d565b949350505050565b606080825f819003610c30576040517fb9fd259b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8067ffffffffffffffff811115610c4957610c49612361565b604051908082528060200260200182016040528015610c72578160200160208202803683370190505b5092508067ffffffffffffffff811115610c8e57610c8e612361565b604051908082528060200260200182016040528015610cb7578160200160208202803683370190505b5091505f5b81811015610d3557610cf3868683818110610cd957610cd96125bc565b9050602002016020810190610cee91906125a1565b611558565b858381518110610d0557610d056125bc565b60200260200101858481518110610d1e57610d1e6125bc565b602090810291909101019190915252600101610cbc565b50509250929050565b5f80610d4983611558565b9094909350915050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f81158015610d9d5750825b90505f8267ffffffffffffffff166001148015610db95750303b155b905081158015610dc7575080155b15610dfe576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610e5f5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610e67611971565b610e6f611985565b610e795f876111ef565b508315610edb5784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b5f8181527fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000602081905260408220610f1a9061198d565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff8082165f9081527fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd0060205260408120549091166105c0565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020526040902060010154610fa781611047565b610b018383611244565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806105c057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316146105c0565b6110518133611996565b50565b73ffffffffffffffffffffffffffffffffffffffff82166110a1576040517f8eb68d5900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff81166110ee576040517fbbf7accc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8281165f9081527fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd00602052604090205481169082168114610b605773ffffffffffffffffffffffffffffffffffffffff8381165f8181527fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd00602090815260409182902080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169487169485179055815192835282019290925281517fe6c35d0425da27d8f991ada353619254c33e5094fc7e19154e02feb391937390929181900390910190a1505050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e823717059320008161121c8585611a3c565b90508015610bea575f85815260208390526040902061123b9085611b61565b50949350505050565b5f7fc1f6fe24621ce81ec5827caf0253cadb74709b061630e6b55e82371705932000816112718585611b82565b90508015610bea575f85815260208390526040902061123b9085611c5e565b3073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148061135d57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166113447f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b15611394576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f610b8081611047565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611425575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252611422918101906127e5565b60015b611478576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146114d4576040517faa1d49a40000000000000000000000000000000000000000000000000000000081526004810182905260240161146f565b610b608383611c7f565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611394576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610f1a8383611ce1565b5f8073ffffffffffffffffffffffffffffffffffffffff83166115a7576040517f24a0114400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff8381165f9081527fefe839ce0caa5648581e30daa19dcc84419e945902cc17f7f481f056193edd006020526040812054909116908082156116e3578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611640573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061166491906127fc565b60ff1690508273ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156116b2573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116d69190612607565b5091945061191892505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611750576040517f24a0114400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517fbcfd032d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff878116600483015261034860248301527f0000000000000000000000000000000000000000000000000000000000000000169063bcfd032d9060440160a060405180830381865afa92505050801561181e575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820190925261181b91810190612607565b60015b611854576040517f24a0114400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f58e2d3a800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8c8116600483015261034860248301527f000000000000000000000000000000000000000000000000000000000000000016906358e2d3a890604401602060405180830381865afa1580156118e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061190a91906127fc565b60ff16955083965050505050505b61192a61192483611d07565b82611d49565b94505f8511611965576040517fb73dbe6300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60129350505050915091565b611979611db5565b611981611985565b6113945b611394611db5565b5f6105c0825490565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020908152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16610b80576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024810183905260440161146f565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff16611b51575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055611aed3390565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506105c0565b5f9150506105c0565b5092915050565b5f610f1a8373ffffffffffffffffffffffffffffffffffffffff8416611e1c565b5f8281527f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268006020818152604080842073ffffffffffffffffffffffffffffffffffffffff8616855290915282205460ff1615611b51575f8481526020828152604080832073ffffffffffffffffffffffffffffffffffffffff8716808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506105c0565b5f610f1a8373ffffffffffffffffffffffffffffffffffffffff8416611e68565b611c8882611f42565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611cd957610b608282612010565b610b8061208f565b5f825f018281548110611cf657611cf66125bc565b905f5260205f200154905092915050565b5f80821215611d45576040517fa8ce44320000000000000000000000000000000000000000000000000000000081526004810183905260240161146f565b5090565b5f8215611dae5760128203611d5f5750816105c0565b6012821115611d8e57611d8783611d7760128561281c565b611d8290600a612950565b6120c7565b90506105c0565b611d9982601261281c565b611da490600a612950565b611d87908461295b565b50816105c0565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff16611394576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f818152600183016020526040812054611e6157508154600181810184555f8481526020808220909301849055845484825282860190935260409020919091556105c0565b505f6105c0565b5f8181526001830160205260408120548015611b51575f611e8a60018361281c565b85549091505f90611e9d9060019061281c565b9050808214611efc575f865f018281548110611ebb57611ebb6125bc565b905f5260205f200154905080875f018481548110611edb57611edb6125bc565b5f918252602080832090910192909255918252600188019052604090208390555b8554869080611f0d57611f0d612972565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f9055600193505050506105c0565b8073ffffffffffffffffffffffffffffffffffffffff163b5f03611faa576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260240161146f565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60605f808473ffffffffffffffffffffffffffffffffffffffff1684604051612039919061299f565b5f60405180830381855af49150503d805f8114612071576040519150601f19603f3d011682016040523d82523d5f602084013e612076565b606091505b50915091506120868583836120d2565b95945050505050565b3415611394576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f610f1a82846129b5565b6060826120e7576120e28261215a565b610f1a565b815115801561210b575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611b5a576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8516600482015260240161146f565b80511561216a5780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611aec806129c983390190565b5f602082840312156121b9575f80fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610f1a575f80fd5b5f8083601f8401126121f8575f80fd5b50813567ffffffffffffffff81111561220f575f80fd5b6020830191508360208260051b8501011115612229575f80fd5b9250929050565b5f805f8060408587031215612243575f80fd5b843567ffffffffffffffff811115612259575f80fd5b612265878288016121e8565b909550935050602085013567ffffffffffffffff811115612284575f80fd5b612290878288016121e8565b95989497509550505050565b5f602082840312156122ac575f80fd5b5035919050565b73ffffffffffffffffffffffffffffffffffffffff81168114611051575f80fd5b5f805f805f60a086880312156122e8575f80fd5b85356122f3816122b3565b94506020860135612303816122b3565b9350604086013563ffffffff8116811461231b575f80fd5b94979396509394606081013594506080013592915050565b5f8060408385031215612344575f80fd5b823591506020830135612356816122b3565b809150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f806040838503121561239f575f80fd5b82356123aa816122b3565b9150602083013567ffffffffffffffff8111156123c5575f80fd5b8301601f810185136123d5575f80fd5b803567ffffffffffffffff8111156123ef576123ef612361565b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8501160116810181811067ffffffffffffffff8211171561245b5761245b612361565b604052818152828201602001871015612472575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f80604083850312156124a2575f80fd5b50508035926020909101359150565b5f80602083850312156124c2575f80fd5b823567ffffffffffffffff8111156124d8575f80fd5b6124e4858286016121e8565b90969095509350505050565b5f8151808452602084019350602083015f5b82811015612520578151865260209586019590910190600101612502565b5093949350505050565b604081525f61253c60408301856124f0565b828103602084015261208681856124f0565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b5f602082840312156125b1575f80fd5b8135610f1a816122b3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b805169ffffffffffffffffffff81168114612602575f80fd5b919050565b5f805f805f60a0868803121561261b575f80fd5b612624866125e9565b60208701516040880151606089015192975090955093509150612649608087016125e9565b90509295509295909350565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181035f831280158383131683831282161715611b5a57611b5a612655565b8082025f82127f8000000000000000000000000000000000000000000000000000000000000000841416156126d8576126d8612655565b81810583148215176105c0576105c0612655565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82612727576127276126ec565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83147f80000000000000000000000000000000000000000000000000000000000000008314161561277b5761277b612655565b500590565b5f60208284031215612790575f80fd5b8151610f1a816122b3565b5f805f606084860312156127ad575f80fd5b83516127b8816122b3565b60208501519093506127c9816122b3565b60408501519092506127da816122b3565b809150509250925092565b5f602082840312156127f5575f80fd5b5051919050565b5f6020828403121561280c575f80fd5b815160ff81168114610f1a575f80fd5b818103818111156105c0576105c0612655565b6001815b600184111561286a5780850481111561284e5761284e612655565b600184161561285c57908102905b60019390931c928002612833565b935093915050565b5f82612880575060016105c0565b8161288c57505f6105c0565b81600181146128a257600281146128ac576128c8565b60019150506105c0565b60ff8411156128bd576128bd612655565b50506001821b6105c0565b5060208310610133831016604e8410600b84101617156128eb575081810a6105c0565b6129167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848461282f565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561294857612948612655565b029392505050565b5f610f1a8383612872565b80820281158282048414176105c0576105c0612655565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f82518060208501845e5f920191825250919050565b5f826129c3576129c36126ec565b50049056fe610140604052348015610010575f80fd5b50604051611aec380380611aec83398101604081905261002f9161027b565b61012c63ffffffff8416101561006c5760405163c6a5f5e360e01b815263ffffffff8416600482015261012c602482015260440160405180910390fd5b6001600160a01b038516158061008957506001600160a01b038416155b8061009b57506001600160a01b038216155b156100b957604051630b92e73360e21b815260040160405180910390fd5b60405162439f4b60e91b81526001600160a01b03858116600483015263ffffffff851660248301525f91829188169063873e960090604401606060405180830381865afa15801561010c573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061013091906102fe565b9250509150818061013f575080155b1561015d5760405163eefb0e6b60e01b815260040160405180910390fd5b5f866001600160a01b0316632c8ce6bc6040518163ffffffff1660e01b8152600401606060405180830381865afa15801561019a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101be9190610346565b505090505f80826001600160a01b031663a40bee506040518163ffffffff1660e01b8152600401606060405180830381865afa158015610200573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906102249190610390565b6001600160a01b039b8c1660805263ffffffff909a1660a052978a1660c052505050509490921660e05260ff909216610100525061012052506103d79050565b6001600160a01b0381168114610278575f80fd5b50565b5f805f805f60a0868803121561028f575f80fd5b855161029a81610264565b60208701519095506102ab81610264565b604087015190945063ffffffff811681146102c4575f80fd5b60608701519093506102d581610264565b80925050608086015190509295509295909350565b805180151581146102f9575f80fd5b919050565b5f805f60608486031215610310575f80fd5b610319846102ea565b9250602084015161ffff8116811461032f575f80fd5b915061033d604085016102ea565b90509250925092565b5f805f60608486031215610358575f80fd5b835161036381610264565b602085015190935061037481610264565b604085015190925061038581610264565b809150509250925092565b5f805f606084860312156103a2575f80fd5b8351600281106103b0575f80fd5b60208501519093506103c181610264565b604085015190925060ff81168114610385575f80fd5b60805160a05160c05160e05161010051610120516116896104635f395f818161017101526103c401525f61021101525f8181610113015281816102af015261048501525f81816101ea015281816102db01526104b101525f81816101ae0152818161037201526103a201525f818160c201528181610351015281816103ef015261042001526116895ff3fe608060405234801561000f575f80fd5b50600436106100b9575f3560e01c8063e06c25ba11610072578063f1e3854a11610058578063f1e3854a146101e5578063f4db89841461020c578063feaf968c14610233575f80fd5b8063e06c25ba146101a1578063e2c1d1d1146101a9575f80fd5b8063313ce567116100a2578063313ce56714610135578063468f02d21461014f5780636001b77f1461016c575f80fd5b80630f61ac82146100bd5780631d4be0431461010e575b5f80fd5b6100e47f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100e47f000000000000000000000000000000000000000000000000000000000000000081565b61013d600881565b60405160ff9091168152602001610105565b610157610272565b60408051928352602083019190915201610105565b6101937f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610105565b61019361034b565b6101d07f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610105565b6100e47f000000000000000000000000000000000000000000000000000000000000000081565b61013d7f000000000000000000000000000000000000000000000000000000000000000081565b61023b61039b565b6040805169ffffffffffffffffffff968716815260208101959095528401929092526060830152909116608082015260a001610105565b6040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301525f9182917f0000000000000000000000000000000000000000000000000000000000000000169063b3596f07906024016040805180830381865afa15801561031f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906103439190611146565b915091509091565b5f6103967f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006105b1565b905090565b5f808080807f0000000000000000000000000000000000000000000000000000000000000000817f000000000000000000000000000000000000000000000000000000000000000060010361041b576104147f0000000000000000000000000000000000000000000000000000000000000000836105b1565b9050610448565b6104457f000000000000000000000000000000000000000000000000000000000000000083610601565b90505b6040517fb3596f0700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301525f9182917f0000000000000000000000000000000000000000000000000000000000000000169063b3596f07906024016040805180830381865afa1580156104f5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105199190611146565b915091505f610526600890565b60ff16610534836012611195565b61053e91906111a8565b905061056761054e82600a6112dc565b61055885876112e7565b610562919061132b565b61063a565b98505f89136105a2576040517fd9de0a4700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b42965050505050509091929394565b5f805f6105bd856106a1565b915091508082106105db576105d2858561090e565b925050506105fb565b80826105e7878761090e565b6105f191906112e7565b6105d2919061132b565b92915050565b5f805f61060d856106a1565b9150915080821061062c576105d282610626878761090e565b906109e3565b6105d281610626878761090e565b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82111561069d576040517f24775e06000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b5090565b5f805f808473ffffffffffffffffffffffffffffffffffffffff16632c8ce6bc6040518163ffffffff1660e01b8152600401606060405180830381865afa1580156106ee573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107129190611362565b92505091508173ffffffffffffffffffffffffffffffffffffffff16633ba0b9a96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610760573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061078491906113ac565b93505f8173ffffffffffffffffffffffffffffffffffffffff1663d2a3584e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107d0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107f491906113ac565b90508173ffffffffffffffffffffffffffffffffffffffff1663516399df6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561083f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061086391906113c3565b80156108ec5750438273ffffffffffffffffffffffffffffffffffffffff166360e0a9e16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108b4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108d891906113e2565b6fffffffffffffffffffffffffffffffff16145b156108f957809350610906565b6109038582610a11565b93505b505050915091565b5f808373ffffffffffffffffffffffffffffffffffffffff1663e184c9be6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610959573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061097d91906113ac565b905042811161099757670de0b6b3a76400009150506105fb565b5f6109a28585610a28565b90505f6109af42846111a8565b90505f6109c46109bf8484610b9f565b610bdf565b90506109d8670de0b6b3a7640000826109e3565b9450505050506105fb565b5f806109f7670de0b6b3a7640000856112e7565b9050828181610a0857610a086112fe565b04949350505050565b5f818311610a1f5781610a21565b825b9392505050565b6040805160028082526060820183525f928392919060208301908036833701905050905082815f81518110610a5f57610a5f61143e565b63ffffffff909216602092830291909101909101526040517f883bdbfd0000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff86169063883bdbfd90610ac890859060040161146b565b5f60405180830381865afa158015610ae2573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052610b2791908101906114e2565b90508363ffffffff16815f81518110610b4257610b4261143e565b602002602001015182600181518110610b5d57610b5d61143e565b6020026020010151610b6f91906115cb565b610b7991906115fe565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff1695945050505050565b5f80610bb06201518061016d6112e7565b610bba84866112e7565b610bc4919061132b565b9050610bd7610bd282610bec565b610c19565b949350505050565b5f8082121561069d575f80fd5b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82111561069d575f80fd5b5f7ffffffffffffffffffffffffffffffffffffffffffffffffdc702bd3a30fc00008212158015610c53575068070c1cc73b00c800008213155b610cb9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f496e76616c6964206578706f6e656e74000000000000000000000000000000006044820152606401610694565b5f821215610cf057610ccc825f03610c19565b6ec097ce7bc90715b34b9f100000000081610ce957610ce96112fe565b0592915050565b5f6806f05b59d3b20000008312610d4557507ffffffffffffffffffffffffffffffffffffffffffffffff90fa4a62c4e00000090910190770195e54c5dd42177f53a27172fa9ec630262827000000000610d91565b6803782dace9d90000008312610d8d57507ffffffffffffffffffffffffffffffffffffffffffffffffc87d2531627000000909101906b1425982cf597cd205cef7380610d91565b5060015b6064929092029168056bc75e2d6310000068ad78ebc5ac620000008412610df7577fffffffffffffffffffffffffffffffffffffffffffffff5287143a539e0000009093019268056bc75e2d631000006e01855144814a7ff805980ff008400082020590505b6856bc75e2d6310000008412610e49577fffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf0000009093019268056bc75e2d631000006b02df0ab5a80a22c61ab5a70082020590505b682b5e3af16b188000008412610e99577fffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e78000009093019268056bc75e2d63100000693f1fce3da636ea5cf85082020590505b6815af1d78b58c4000008412610ee9577fffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c000009093019268056bc75e2d63100000690127fa27722cc06cc5e282020590505b680ad78ebc5ac62000008412610f38577ffffffffffffffffffffffffffffffffffffffffffffffff5287143a539e000009093019268056bc75e2d6310000068280e60114edb805d0382020590505b68056bc75e2d631000008412610f87577ffffffffffffffffffffffffffffffffffffffffffffffffa9438a1d29cf000009093019268056bc75e2d63100000680ebc5fb4174612111082020590505b6802b5e3af16b18800008412610fd6577ffffffffffffffffffffffffffffffffffffffffffffffffd4a1c50e94e7800009093019268056bc75e2d631000006808f00f760a4b2db55d82020590505b68015af1d78b58c400008412611025577ffffffffffffffffffffffffffffffffffffffffffffffffea50e2874a73c00009093019268056bc75e2d631000006806f5f177578893793782020590505b68056bc75e2d631000008481019085906002908280020505918201919050600368056bc75e2d631000008783020505918201919050600468056bc75e2d631000008783020505918201919050600568056bc75e2d631000008783020505918201919050600668056bc75e2d631000008783020505918201919050600768056bc75e2d631000008783020505918201919050600868056bc75e2d631000008783020505918201919050600968056bc75e2d631000008783020505918201919050600a68056bc75e2d631000008783020505918201919050600b68056bc75e2d631000008783020505918201919050600c68056bc75e2d631000008783020505918201919050606468056bc75e2d63100000848402058502059695505050505050565b5f8060408385031215611157575f80fd5b505080516020909101519092909150565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808201808211156105fb576105fb611168565b818103818111156105fb576105fb611168565b6001815b60018411156111f6578085048111156111da576111da611168565b60018416156111e857908102905b60019390931c9280026111bf565b935093915050565b5f8261120c575060016105fb565b8161121857505f6105fb565b816001811461122e576002811461123857611254565b60019150506105fb565b60ff84111561124957611249611168565b50506001821b6105fb565b5060208310610133831016604e8410600b8410161715611277575081810a6105fb565b6112a27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846111bb565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156112d4576112d4611168565b029392505050565b5f610a2183836111fe565b80820281158282048414176105fb576105fb611168565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f82611339576113396112fe565b500490565b73ffffffffffffffffffffffffffffffffffffffff8116811461135f575f80fd5b50565b5f805f60608486031215611374575f80fd5b835161137f8161133e565b60208501519093506113908161133e565b60408501519092506113a18161133e565b809150509250925092565b5f602082840312156113bc575f80fd5b5051919050565b5f602082840312156113d3575f80fd5b81518015158114610a21575f80fd5b5f602082840312156113f2575f80fd5b81516fffffffffffffffffffffffffffffffff81168114610a21575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b602080825282518282018190525f918401906040840190835b818110156114a857835163ffffffff16835260209384019390920191600101611484565b509095945050505050565b80517affffffffffffffffffffffffffffffffffffffffffffffffffffff811681146114dd575f80fd5b919050565b5f602082840312156114f2575f80fd5b815167ffffffffffffffff811115611508575f80fd5b8201601f81018413611518575f80fd5b805167ffffffffffffffff81111561153257611532611411565b8060051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811067ffffffffffffffff8211171561157d5761157d611411565b60405291825260208184018101929081018784111561159a575f80fd5b6020850194505b838510156115c0576115b2856114b3565b8152602094850194016115a1565b509695505050505050565b7affffffffffffffffffffffffffffffffffffffffffffffffffffff82811682821603908111156105fb576105fb611168565b5f7affffffffffffffffffffffffffffffffffffffffffffffffffffff83168061162a5761162a6112fe565b807affffffffffffffffffffffffffffffffffffffffffffffffffffff8416049150509291505056fea26469706673582212204d12936f446bc792f032a360f1d3419d627ce39ec90ca3ded73955bb55270fb064736f6c634300081a0033a264697066735822122037ad59ef9bf6b489342bb89c00ac31c75f51a84b68763f54433f9741bdc1c3ae64736f6c634300081a00330000000000000000000000000000000000000000000000000000000000000000