0 txs
2 calls
constructor
constructor()
functions
ADMIN_ROLE
viewfunction ADMIN_ROLE() view returns (bytes32)
canSave
viewfunction canSave(address vault, bytes32 marketId, uint256 min_amount) view returns (bool)
canSaveMulti
viewfunction canSaveMulti(tuple[] vaultMarketAmounts) view returns (bool)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
getPosition
viewfunction getPosition(address user, bytes32 id) view returns (uint256 suppliedAssets, uint256 borrowedAssets)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
isOperator
viewfunction isOperator(address operator) view returns (bool)
marketLiquidity
viewfunction marketLiquidity(bytes32 marketId) view returns (uint256)
maxWithdraw
viewfunction maxWithdraw(address vault, bytes32 marketId) view returns (uint256)
maxWithdrawMulti
viewfunction maxWithdrawMulti(tuple[] vaultMarkets) view returns (uint256[])
morpho
viewfunction morpho() view returns (address)
morphoHelper
viewfunction morphoHelper() view returns (address)
OPERATOR_ROLE
viewfunction OPERATOR_ROLE() view returns (bytes32)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
savable
viewfunction savable(tuple[] vaultMarketAmounts) view returns (tuple[])
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
vaultPosition
viewfunction vaultPosition(address vault, bytes32 marketId) view returns (uint256)
vaultPositionMulti
viewfunction vaultPositionMulti(tuple[] vaultMarkets) view returns (uint256[])
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
initialize
nonpayablefunction initialize(address initialAdmin, address _morphoHelper)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
save
nonpayablefunction save(address vault, bytes32 marketId, bytes32 idleMarketId) returns (uint256)
saveMulti
nonpayablefunction saveMulti(tuple[] vaultMarketIdles) returns (uint256[])
setMorphoHelper
nonpayablefunction setMorphoHelper(address _morphoHelper)
setOperator
nonpayablefunction setOperator(address operator, bool enabled)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
Initialized
event Initialized(uint64 version)
MarketRescued
event MarketRescued(address indexed vault, bytes32 indexed marketId, bytes32 indexed idleMarketId, uint256 liquidityMoved)
MorphoHelperSet
event MorphoHelperSet(address indexed morphoHelper)
OperatorSet
event OperatorSet(address indexed operator, bool enabled)
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)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedInnerCall
error FailedInnerCall()
InsufficientLiquidity
error InsufficientLiquidity()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
Unauthorized
error Unauthorized()
UnsupportedChain
error UnsupportedChain()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60c0604052346200008c57620000146200013a565b6200001e62000092565b61463b6200046e8239608051818181611744015281816117b001526117f2015260a051818181610fd9015281816123c70152818161242d015281816124570152818161358601528181613658015281816136bf01528181614146015281816141ce015261423e015261463b90f35b62000098565b60405190565b5f80fd5b90565b90565b90565b620000be620000b8620000c4926200009f565b620000a2565b6200009c565b90565b90565b620000e3620000dd620000e992620000c7565b620000a2565b6200009c565b90565b5f0190565b60018060a01b031690565b620001156200010f6200011b92620000f1565b620000a2565b620000f1565b90565b6200012990620000fc565b90565b62000137906200011e565b90565b6200014462000203565b466200015c620001556001620000a5565b916200009c565b145f1462000193576200018373bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb6200012c565b60a0525b6200019162000373565b565b46620001ac620001a5612105620000ca565b916200009c565b145f14620001dc57620001d373bbbbbbbbbb9cc5e90e3b3af64bdaf62c37eeffcb6200012c565b60a05262000187565b620001e662000092565b63d21eab3760e01b815280620001ff60048201620000ec565b0390fd5b6200020d6200020f565b565b620002196200021b565b565b6200022562000227565b565b6200023162000233565b565b6200023d6200025b565b565b6200024a90620000fc565b90565b62000258906200023f565b90565b62000266306200024d565b608052565b60401c90565b60ff1690565b620002866200028c916200026b565b62000271565b90565b6200029b905462000277565b90565b5f1c90565b60018060401b031690565b620002bd620002c3916200029e565b620002a3565b90565b620002d29054620002ae565b90565b60018060401b031690565b5f1b90565b90620002f860018060401b0391620002e0565b9181191691161790565b6200031b620003156200032192620002d5565b620000a2565b620002d5565b90565b90565b90620003416200033b620003499262000302565b62000324565b8254620002e5565b9055565b6200035890620002d5565b9052565b919062000371905f602085019401906200034d565b565b6200037d62000449565b6200038a5f82016200028f565b62000422576200039c5f8201620002c6565b620003b8620003b160018060401b03620002d5565b91620002d5565b03620003c2575b50565b620003d7905f60018060401b03910162000327565b60018060401b03620004187fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2916200040e62000092565b918291826200035c565b0390a15f620003bf565b6200042c62000092565b63f92ee8a960e01b8152806200044560048201620000ec565b0390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009056fe60806040526004361015610013575b611236565b61001d5f356101eb565b8062aac56d146101e6578063011d2eb3146101e157806301ffc9a7146101dc5780630fa8f516146101d757806321919d6a146101d2578063248a9ca3146101cd578063297f7d44146101c85780632f2ff15d146101c357806336568abe146101be578063485cc955146101b95780634f1ef286146101b457806351842db1146101af57806352d1902d146101aa578063558a7297146101a55780636315ccb1146101a05780636d70f7ae1461019b57806375b238fc1461019657806379b918c21461019157806383c51f4f1461018c57806391d1485414610187578063a217fddf14610182578063ad3cb1cc1461017d578063d074ee7a14610178578063d547741f14610173578063d8fbc8331461016e578063dd17458314610169578063ea26978a14610164578063ece81fb41461015f5763f5b541a60361000e57611201565b61119c565b6110f1565b61105e565b611029565b610fa3565b610f6d565b610ddb565b610c92565b610c51565b610c1b565b610be5565b610b83565b610b08565b610ad3565b610a81565b6109fc565b6109c6565b61091e565b6107be565b61075d565b610729565b6106c6565b610691565b6105f8565b6104a1565b6103e6565b61033d565b610260565b60e01c90565b60405190565b5f80fd5b5f80fd5b5f80fd5b60018060a01b031690565b61021790610203565b90565b6102238161020e565b0361022a57565b5f80fd5b9050359061023b8261021a565b565b9060208282031261025657610253915f0161022e565b90565b6101fb565b5f0190565b3461028e5761027861027336600461023d565b6121e9565b6102806101f1565b8061028a8161025b565b0390f35b6101f7565b5f91031261029d57565b6101fb565b1c90565b60018060a01b031690565b6102c19060086102c693026102a2565b6102a6565b90565b906102d491546102b1565b90565b6102e15f806102c9565b90565b90565b6102fb6102f661030092610203565b6102e4565b610203565b90565b61030c906102e7565b90565b61031890610303565b90565b6103249061030f565b9052565b919061033b905f6020850194019061031b565b565b3461036d5761034d366004610293565b6103696103586102d7565b6103606101f1565b91829182610328565b0390f35b6101f7565b63ffffffff60e01b1690565b61038781610372565b0361038e57565b5f80fd5b9050359061039f8261037e565b565b906020828203126103ba576103b7915f01610392565b90565b6101fb565b151590565b6103cd906103bf565b9052565b91906103e4905f602085019401906103c4565b565b34610416576104126104016103fc3660046103a1565b61123e565b6104096101f1565b918291826103d1565b0390f35b6101f7565b90565b6104278161041b565b0361042e57565b5f80fd5b9050359061043f8261041e565b565b9190604083820312610469578061045d610466925f860161022e565b93602001610432565b90565b6101fb565b90565b61047a9061046e565b9052565b91602061049f92949361049860408201965f830190610471565b0190610471565b565b346104d3576104ba6104b4366004610441565b906123a9565b906104cf6104c66101f1565b9283928361047e565b0390f35b6101f7565b5f80fd5b5f80fd5b5f80fd5b909182601f8301121561051e5781359167ffffffffffffffff831161051957602001926040830284011161051457565b6104e0565b6104dc565b6104d8565b90602082820312610554575f82013567ffffffffffffffff811161054f5761054b92016104e4565b9091565b6101ff565b6101fb565b5190565b60209181520190565b60200190565b6105759061046e565b9052565b906105868160209361056c565b0190565b60200190565b906105ad6105a76105a084610559565b809361055d565b92610566565b905f5b8181106105bd5750505090565b9091926105d66105d06001928651610579565b9461058a565b91019190916105b0565b6105f59160208201915f818403910152610590565b90565b346106295761062561061461060e366004610523565b90613847565b61061c6101f1565b918291826105e0565b0390f35b6101f7565b6106378161041b565b0361063e57565b5f80fd5b9050359061064f8261062e565b565b9060208282031261066a57610667915f01610642565b90565b6101fb565b6106789061041b565b9052565b919061068f905f6020850194019061066f565b565b346106c1576106bd6106ac6106a7366004610651565b611360565b6106b46101f1565b9182918261067c565b0390f35b6101f7565b346106f7576106f36106e26106dc366004610523565b906138f0565b6106ea6101f1565b918291826105e0565b0390f35b6101f7565b91906040838203126107245780610718610721925f8601610642565b9360200161022e565b90565b6101fb565b346107585761074261073c3660046106fc565b906113b4565b61074a6101f1565b806107548161025b565b0390f35b6101f7565b3461078c576107766107703660046106fc565b9061147c565b61077e6101f1565b806107888161025b565b0390f35b6101f7565b91906040838203126107b957806107ad6107b6925f860161022e565b9360200161022e565b90565b6101fb565b346107ed576107d76107d1366004610791565b906120ca565b6107df6101f1565b806107e98161025b565b0390f35b6101f7565b5f80fd5b601f801991011690565b634e487b7160e01b5f52604160045260245ffd5b9061081e906107f6565b810190811067ffffffffffffffff82111761083857604052565b610800565b906108506108496101f1565b9283610814565b565b67ffffffffffffffff81116108705761086c6020916107f6565b0190565b610800565b90825f939282370152565b9092919261089561089082610852565b61083d565b938185526020850190828401116108b1576108af92610875565b565b6107f2565b9080601f830112156108d4578160206108d193359101610880565b90565b6104d8565b919091604081840312610919576108f2835f830161022e565b92602082013567ffffffffffffffff81116109145761091192016108b6565b90565b6101ff565b6101fb565b61093261092c3660046108d9565b9061171b565b61093a6101f1565b806109448161025b565b0390f35b6109519061020e565b90565b61095d81610948565b0361096457565b5f80fd5b9050359061097582610954565b565b90916060828403126109ac576109a9610992845f8501610968565b936109a08160208601610432565b93604001610432565b90565b6101fb565b91906109c4905f60208501940190610471565b565b346109f7576109f36109e26109dc366004610977565b91613e47565b6109ea6101f1565b918291826109b1565b0390f35b6101f7565b34610a2c57610a0c366004610293565b610a28610a176116df565b610a1f6101f1565b9182918261067c565b0390f35b6101f7565b610a3a816103bf565b03610a4157565b5f80fd5b90503590610a5282610a31565b565b9190604083820312610a7c5780610a70610a79925f860161022e565b93602001610a45565b90565b6101fb565b34610ab057610a9a610a94366004610a54565b906122a5565b610aa26101f1565b80610aac8161025b565b0390f35b6101f7565b90602082820312610ace57610acb915f01610432565b90565b6101fb565b34610b0357610aff610aee610ae9366004610ab5565b613572565b610af66101f1565b918291826109b1565b0390f35b6101f7565b34610b3857610b34610b23610b1e36600461023d565b6122b1565b610b2b6101f1565b918291826103d1565b0390f35b6101f7565b90565b5f1b90565b610b59610b54610b5e92610b3d565b610b40565b61041b565b90565b610b6a5f610b45565b90565b610b75610b61565b90565b610b80610b6d565b90565b34610bb357610b93366004610293565b610baf610b9e610b78565b610ba66101f1565b9182918261067c565b0390f35b6101f7565b9190604083820312610be05780610bd4610bdd925f8601610968565b93602001610432565b90565b6101fb565b34610c1657610c12610c01610bfb366004610bb8565b90613644565b610c096101f1565b918291826109b1565b0390f35b6101f7565b34610c4c57610c48610c37610c31366004610bb8565b90613721565b610c3f6101f1565b918291826109b1565b0390f35b6101f7565b34610c8257610c7e610c6d610c673660046106fc565b906112e2565b610c756101f1565b918291826103d1565b0390f35b6101f7565b610c8f610b61565b90565b34610cc257610ca2366004610293565b610cbe610cad610c87565b610cb56101f1565b9182918261067c565b0390f35b6101f7565b67ffffffffffffffff8111610ce557610ce16020916107f6565b0190565b610800565b90610cfc610cf783610cc7565b61083d565b918252565b5f7f352e302e30000000000000000000000000000000000000000000000000000000910152565b610d326005610cea565b90610d3f60208301610d01565b565b610d49610d28565b90565b610d54610d41565b90565b610d5f610d4c565b90565b5190565b60209181520190565b5f5b838110610d81575050905f910152565b806020918301518185015201610d71565b610db1610dba602093610dbf93610da881610d62565b93848093610d66565b95869101610d6f565b6107f6565b0190565b610dd89160208201915f818403910152610d92565b90565b34610e0b57610deb366004610293565b610e07610df6610d57565b610dfe6101f1565b91829182610dc3565b0390f35b6101f7565b909182601f83011215610e4a5781359167ffffffffffffffff8311610e45576020019260608302840111610e4057565b6104e0565b6104dc565b6104d8565b90602082820312610e80575f82013567ffffffffffffffff8111610e7b57610e779201610e10565b9091565b6101ff565b6101fb565b5190565b60209181520190565b60200190565b610ea190610303565b90565b610ead90610e98565b9052565b610eba9061041b565b90565b610ec690610eb1565b9052565b90602080610eec93610ee25f8201515f860190610ea4565b0151910190610ebd565b565b90610efb81604093610eca565b0190565b60200190565b90610f22610f1c610f1584610e85565b8093610e89565b92610e92565b905f5b818110610f325750505090565b909192610f4b610f456001928651610eee565b94610eff565b9101919091610f25565b610f6a9160208201915f818403910152610f05565b90565b34610f9e57610f9a610f89610f83366004610e4f565b90613bf7565b610f916101f1565b91829182610f55565b0390f35b6101f7565b34610fd257610fbc610fb63660046106fc565b90611470565b610fc46101f1565b80610fce8161025b565b0390f35b6101f7565b7f000000000000000000000000000000000000000000000000000000000000000090565b61100490610303565b90565b61101090610ffb565b9052565b9190611027905f60208501940190611007565b565b3461105957611039366004610293565b611055611044610fd7565b61104c6101f1565b91829182611014565b0390f35b6101f7565b3461108f5761108b61107a611074366004610e4f565b90613a41565b6110826101f1565b918291826103d1565b0390f35b6101f7565b61109d8161046e565b036110a457565b5f80fd5b905035906110b582611094565b565b90916060828403126110ec576110e96110d2845f8501610968565b936110e08160208601610432565b936040016110a8565b90565b6101fb565b346111225761111e61110d6111073660046110b7565b91613999565b6111156101f1565b918291826103d1565b0390f35b6101f7565b909182601f830112156111615781359167ffffffffffffffff831161115c57602001926060830284011161115757565b6104e0565b6104dc565b6104d8565b90602082820312611197575f82013567ffffffffffffffff81116111925761118e9201611127565b9091565b6101ff565b6101fb565b346111cd576111c96111b86111b2366004611166565b906145f0565b6111c06101f1565b918291826105e0565b0390f35b6101f7565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92990565b6111fe6111d2565b90565b3461123157611211366004610293565b61122d61121c6111f6565b6112246101f1565b9182918261067c565b0390f35b6101f7565b5f80fd5b5f90565b61124661123a565b508061126161125b637965db0b60e01b610372565b91610372565b1490811561126e575b5090565b61127891506119e3565b5f61126a565b9061128890610eb1565b5f5260205260405f2090565b61129d90610303565b90565b906112aa90611294565b5f5260205260405f2090565b5f1c90565b60ff1690565b6112cd6112d2916112b6565b6112bb565b90565b6112df90546112c1565b90565b611311915f61130661130c936112f661123a565b5082611300611314565b0161127e565b016112a0565b6112d5565b90565b7f02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b62680090565b5f90565b90565b61134b611350916112b6565b61133c565b90565b61135d905461133f565b90565b600161138161138792611371611338565b505f61137b611314565b0161127e565b01611353565b90565b906113a5916113a061139b82611360565b6113c0565b6113a7565b565b906113b191611510565b50565b906113be9161138a565b565b6113d2906113cc6119d6565b90611404565b565b6113dd9061020e565b9052565b9160206114029294936113fb60408201965f8301906113d4565b019061066f565b565b906114196114138383906112e2565b156103bf565b611421575050565b61144261142c6101f1565b92839263e2517d3f60e01b8452600484016113e1565b0390fd5b906114619161145c61145782611360565b6113c0565b611463565b565b9061146d916115c7565b50565b9061147a91611446565b565b908061149761149161148c6119d6565b61020e565b9161020e565b036114a8576114a5916115c7565b50565b6114b06101f1565b63334bd91960e11b8152806114c76004820161025b565b0390fd5b906114d760ff91610b40565b9181191691161790565b6114ea906103bf565b90565b90565b9061150561150061150c926114e1565b6114ed565b82546114cb565b9055565b61151861123a565b50611521611314565b61153561152f8385906112e2565b156103bf565b5f146115c05761155f9061155a5f6115528160019401869061127e565b0185906112a0565b6114f0565b906115686119d6565b906115a561159f6115997f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d95610eb1565b92611294565b92611294565b926115ae6101f1565b806115b88161025b565b0390a4600190565b5050505f90565b6115cf61123a565b506115d8611314565b6115e38284906112e2565b5f1461166d5761160c906116075f6115ff81809401869061127e565b0185906112a0565b6114f0565b906116156119d6565b9061165261164c6116467ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b95610eb1565b92611294565b92611294565b9261165b6101f1565b806116658161025b565b0390a4600190565b5050505f90565b611685906116806117e1565b6116d3565b90565b90565b61169f61169a6116a492611688565b610b40565b61041b565b90565b6116d07f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61168b565b90565b506116dc6116a7565b90565b6116ef6116ea611338565b611674565b90565b90611704916116ff611733565b611706565b565b906117199161171481612207565b6118c6565b565b90611725916116f2565b565b61173090610303565b90565b61173c30611727565b61176e6117687f000000000000000000000000000000000000000000000000000000000000000061020e565b9161020e565b14801561179f575b61177c57565b6117846101f1565b63703e46dd60e11b81528061179b6004820161025b565b0390fd5b506117a8611a35565b6117da6117d47f000000000000000000000000000000000000000000000000000000000000000061020e565b9161020e565b1415611776565b6117ea30611727565b61181c6118167f000000000000000000000000000000000000000000000000000000000000000061020e565b9161020e565b0361182357565b61182b6101f1565b63703e46dd60e11b8152806118426004820161025b565b0390fd5b61184f906102e7565b90565b61185b90611846565b90565b61186790610303565b90565b5f80fd5b60e01b90565b905051906118818261062e565b565b9060208282031261189c57611899915f01611874565b90565b6101fb565b6118a96101f1565b3d5f823e3d90fd5b91906118c4905f602085019401906113d4565b565b91906118f460206118de6118d986611852565b61185e565b6352d1902d906118ec6101f1565b93849261186e565b825281806119046004820161025b565b03915afa80915f926119a2575b50155f1461194c57505090600161192657505b565b611948906119326101f1565b918291634c9c8ce360e01b8352600483016118b1565b0390fd5b928361196761196161195c6116a7565b61041b565b9161041b565b0361197c57611977929350611a7b565b611924565b61199e846119886101f1565b918291632a87526960e21b83526004830161067c565b0390fd5b6119c491925060203d81116119cb575b6119bc8183610814565b810190611883565b905f611911565b503d6119b2565b5f90565b6119de6119d2565b503390565b6119eb61123a565b50611a056119ff6301ffc9a760e01b610372565b91610372565b1490565b60018060a01b031690565b611a20611a25916112b6565b611a09565b90565b611a329054611a14565b90565b611a3d6119d2565b50611a585f611a52611a4d6116a7565b611d27565b01611a28565b90565b5190565b611a73611a6e611a7892610b3d565b6102e4565b61046e565b90565b90611a8582611b42565b81611ab07fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b91611294565b90611ab96101f1565b80611ac38161025b565b0390a2611acf81611a5b565b611ae1611adb5f611a5f565b9161046e565b115f14611af557611af191611c20565b505b565b5050611aff611b9e565b611af3565b90611b1560018060a01b0391610b40565b9181191691161790565b90565b90611b37611b32611b3e92611294565b611b1f565b8254611b04565b9055565b803b611b56611b505f611a5f565b9161046e565b14611b7857611b76905f611b70611b6b6116a7565b611d27565b01611b22565b565b611b9a90611b846101f1565b918291634c9c8ce360e01b8352600483016118b1565b0390fd5b34611bb1611bab5f611a5f565b9161046e565b11611bb857565b611bc06101f1565b63b398979f60e01b815280611bd76004820161025b565b0390fd5b606090565b90611bf2611bed83610852565b61083d565b918252565b3d5f14611c1257611c073d611be0565b903d5f602084013e5b565b611c1a611bdb565b90611c10565b5f80611c4c93611c2e611bdb565b508390602081019051915af490611c43611bf7565b90919091611c4f565b90565b90611c6390611c5c611bdb565b50156103bf565b5f14611c6f5750611cda565b611c7882611a5b565b611c8a611c845f611a5f565b9161046e565b1480611cbf575b611c99575090565b611cbb90611ca56101f1565b918291639996b31560e01b8352600483016118b1565b0390fd5b50803b611cd4611cce5f611a5f565b9161046e565b14611c91565b611ce381611a5b565b611cf5611cef5f611a5f565b9161046e565b115f14611d0457805190602001fd5b611d0c6101f1565b630a12f52160e11b815280611d236004820161025b565b0390fd5b90565b60401c90565b611d3c611d4191611d2a565b6112bb565b90565b611d4e9054611d30565b90565b67ffffffffffffffff1690565b611d6a611d6f916112b6565b611d51565b90565b611d7c9054611d5e565b90565b67ffffffffffffffff1690565b611da0611d9b611da592610b3d565b6102e4565b611d7f565b90565b90565b611dbf611dba611dc492611da8565b6102e4565b611d7f565b90565b611dd090610303565b90565b90611de667ffffffffffffffff91610b40565b9181191691161790565b611e04611dff611e0992611d7f565b6102e4565b611d7f565b90565b90565b90611e24611e1f611e2b92611df0565b611e0c565b8254611dd3565b9055565b60401b90565b90611e4968ff000000000000000091611e2f565b9181191691161790565b90611e68611e63611e6f926114e1565b6114ed565b8254611e35565b9055565b611e7c90611dab565b9052565b9190611e93905f60208501940190611e73565b565b90611e9e612142565b91611eb3611ead5f8501611d44565b156103bf565b91611ebf5f8501611d72565b80611ed2611ecc5f611d8c565b91611d7f565b1480611ff3575b90611eed611ee76001611dab565b91611d7f565b1480611fcb575b611eff9091156103bf565b9081611fba575b50611f9757611f2f91611f24611f1c6001611dab565b5f8701611e0f565b83611f85575b612041565b611f37575b50565b611f44905f809101611e53565b6001611f7c7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d291611f736101f1565b91829182611e80565b0390a15f611f34565b611f9260015f8701611e53565b611f2a565b611f9f6101f1565b63f92ee8a960e01b815280611fb66004820161025b565b0390fd5b611fc59150156103bf565b5f611f06565b50611eff611fd830611dc7565b3b611feb611fe55f611a5f565b9161046e565b149050611ef4565b5083611ed9565b612003906102e7565b90565b61200f90611ffa565b90565b61201b90611ffa565b90565b90565b9061203661203161203d92612012565b61201e565b8254611b04565b9055565b6120759061204d612170565b6120556120e0565b612067612060610b6d565b8290611510565b506120706111d2565b611510565b5061208861208282612006565b5f612021565b6120b27f07edde63e93059d0ed30f33cab9d0b71ff078871ce738072d6580aa818c1112b91611294565b906120bb6101f1565b806120c58161025b565b0390a2565b906120d491611e95565b565b6120de6120ea565b565b6120e86120d6565b565b6120fb6120f5612124565b156103bf565b61210157565b6121096101f1565b631afcd79f60e31b8152806121206004820161025b565b0390fd5b61212c61123a565b5061213f5f612139612142565b01611d44565b90565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0090565b61216e6120ea565b565b612178612166565b565b6121939061218e612189610b6d565b6113c0565b612195565b565b6121a76121a182612006565b5f612021565b6121d17f07edde63e93059d0ed30f33cab9d0b71ff078871ce738072d6580aa818c1112b91611294565b906121da6101f1565b806121e48161025b565b0390a2565b6121f29061217a565b565b50612205612200610b6d565b6113c0565b565b612210906121f4565b565b9061222c91612227612222610b6d565b6113c0565b61222e565b565b815f1461228d576122476122406111d2565b8290611510565b505b6122886122767f1a594081ae893ab78e67d9b9e843547318164322d32c65369d78a96172d9dc8f92611294565b9261227f6101f1565b918291826103d1565b0390a2565b61229f6122986111d2565b82906115c7565b50612249565b906122af91612212565b565b6122cb906122bd61123a565b506122c66111d2565b6112e2565b90565b5f90565b5f80fd5b905051906122e38261021a565b565b905051906122f282611094565b565b919060a0838203126123645761235d9061230e60a061083d565b9361231b825f83016122d6565b5f86015261232c82602083016122d6565b602086015261233e82604083016122d6565b604086015261235082606083016122d6565b60608601526080016122e5565b6080830152565b6122d2565b9060a0828203126123825761237f915f016122f4565b90565b6101fb565b61239090610eb1565b9052565b91906123a7905f60208501940190612387565b565b9060a0612412916123b86122ce565b506123c16122ce565b506123eb7f0000000000000000000000000000000000000000000000000000000000000000610ffb565b612407632c3c91576123fb6101f1565b9586948593849361186e565b835260048301612394565b03915afa80156124af5761247e915f91612481575b506124547f0000000000000000000000000000000000000000000000000000000000000000828591612edf565b927f00000000000000000000000000000000000000000000000000000000000000009190916124b4565b91565b6124a2915060a03d81116124a8575b61249a8183610814565b810190612369565b5f612427565b503d612490565b6118a1565b906124e2906124dc6124f0946124c86122ce565b506124d2836124f7565b9085919091613172565b9261295e565b505091909190919091612597565b90565b5f90565b60a0906125026124f3565b502090565b61251b61251661252092611da8565b6102e4565b61046e565b90565b61252d6001612507565b90565b634e487b7160e01b5f52601160045260245ffd5b6125536125599193929361046e565b9261046e565b820180921161256457565b612530565b90565b61258061257b61258592612569565b6102e4565b61046e565b90565b612594620f424061256c565b90565b916125c96125ba6125cf946125aa6122ce565b50936125b4612523565b90612544565b916125c3612588565b90612544565b9161263d565b90565b6125e16125e79193929361046e565b9261046e565b916125f383820261046e565b92818404149015171561260257565b612530565b634e487b7160e01b5f52601260045260245ffd5b61262761262d9161046e565b9161046e565b908115612638570490565b612607565b61265992916126549161264e6122ce565b506125d2565b61261b565b90565b6fffffffffffffffffffffffffffffffff1690565b61267a8161265c565b0361268157565b5f80fd5b9050519061269282612671565b565b919060c0838203126127165761270f906126ae60c061083d565b936126bb825f8301612685565b5f8601526126cc8260208301612685565b60208601526126de8260408301612685565b60408601526126f08260608301612685565b60608601526127028260808301612685565b608086015260a001612685565b60a0830152565b6122d2565b9060c08282031261273457612731915f01612694565b90565b6101fb565b612743905161265c565b90565b61275a61275561275f9261265c565b6102e4565b61046e565b90565b6127716127779193929361046e565b9261046e565b820391821161278257565b612530565b61279b6127966127a092610b3d565b6102e4565b61265c565b90565b6127ad905161020e565b90565b6127c46127bf6127c992610b3d565b6102e4565b610203565b90565b6127d5906127b0565b90565b6127e1906102e7565b90565b6127ed906127d8565b90565b6127f990610303565b90565b9060208282031261281557612812915f016122e5565b90565b6101fb565b6128239061020e565b9052565b9060808061287f9361283f5f8201515f86019061281a565b6128516020820151602086019061281a565b6128636040820151604086019061281a565b6128756060820151606086019061281a565b015191019061056c565b565b61288a9061265c565b9052565b9060a0806128f8936128a65f8201515f860190612881565b6128b860208201516020860190612881565b6128ca60408201516040860190612881565b6128dc60608201516060860190612881565b6128ee60808201516080860190612881565b0151910190612881565b565b9160a061291c9294936129156101608201965f830190612827565b019061288e565b565b61292a6129309161265c565b9161265c565b01906fffffffffffffffffffffffffffffffff821161294b57565b612530565b9061295a9061265c565b9052565b60c06129c19161296c6122ce565b506129756122ce565b5061297e6122ce565b506129876122ce565b5061299a612994856124f7565b91610ffb565b6129b6635c60e39a6129aa6101f1565b9586948593849361186e565b835260048301612394565b03915afa908115612cac575f91612c7e575b50906129f3426129ed6129e860808601612739565b612746565b90612762565b80612a06612a005f611a5f565b9161046e565b141580612c58575b80612c2a575b612a72575b5050612a265f8201612739565b612a3260208301612739565b92612a6f612a69612a63612a5d612a576060612a5060408a01612739565b9801612739565b95612746565b96612746565b94612746565b92612746565b90565b6020612a90612a8b612a86606086016127a3565b6127e4565b6127f0565b638c00bf6b9390612ab38695612abe612aa76101f1565b9788958694859461186e565b8452600484016128fa565b03915afa918215612c2557612afa92612af4915f91612bf7575b5091612aee612ae960408701612739565b612746565b92612d42565b90612ce4565b612b22612b0682612e94565b612b1c6040850191612b1783612739565b61291e565b90612950565b612b49612b2e82612e94565b612b435f850191612b3e83612739565b61291e565b90612950565b612b5560a08301612739565b612b67612b615f612787565b9161265c565b03612b73575b80612a19565b612bd5612bd0612b9a612bf193612b94612b8f60a08801612739565b612746565b90612ce4565b612bb681612bb1612bac5f8901612739565b612746565b612762565b612bca612bc560208801612739565b612746565b91612db5565b612e94565b612beb6020840191612be683612739565b61291e565b90612950565b5f612b6d565b612c18915060203d8111612c1e575b612c108183610814565b8101906127fc565b5f612ad8565b503d612c06565b6118a1565b50612c37606083016127a3565b612c51612c4b612c465f6127cc565b61020e565b9161020e565b1415612a14565b50612c6560408401612739565b612c77612c715f612787565b9161265c565b1415612a0e565b612c9f915060c03d8111612ca5575b612c978183610814565b81019061271b565b5f6129d3565b503d612c8d565b6118a1565b90565b612cc8612cc3612ccd92612cb1565b6102e4565b61046e565b90565b612ce1670de0b6b3a7640000612cb4565b90565b90612d0191612cf16122ce565b5090612cfb612cd0565b9161263d565b90565b90565b612d1b612d16612d2092612d04565b6102e4565b61046e565b90565b90565b612d3a612d35612d3f92612d23565b6102e4565b61046e565b90565b612db291612d5891612d526122ce565b506125d2565b612dad612d818283612d7b6002612d76612d70612cd0565b91612d07565b6125d2565b9161263d565b612da78184612da16003612d9c612d96612cd0565b91612d26565b6125d2565b9161263d565b92612544565b612544565b90565b90612de8612dd9612dee9493612dc96122ce565b5093612dd3612588565b90612544565b91612de2612523565b90612544565b9161263d565b90565b5f90565b5f7f6d61782075696e74313238206578636565646564000000000000000000000000910152565b612e266014610cea565b90612e3360208301612df5565b565b612e3d612e1c565b90565b612e48612e35565b90565b15612e535750565b612e7490612e5f6101f1565b91829162461bcd60e51b835260048301610dc3565b0390fd5b612e8c612e87612e919261046e565b6102e4565b61265c565b90565b612edc90612ea0612df1565b50612ed781612ec7612ec16fffffffffffffffffffffffffffffffff612746565b9161046e565b1115612ed1612e40565b90612e4b565b612e78565b90565b90612f0d90612f07612f1c94612ef36122ce565b50612efd836124f7565b9085919091613221565b9261295e565b93925090509190919091612f1f565b90565b91612f51612f42612f5794612f326122ce565b5093612f3c612523565b90612544565b91612f4b612588565b90612544565b91612f5a565b90565b612f74612f939392612f8e92612f6e6122ce565b506125d2565b612f8883612f826001612507565b90612762565b90612544565b61261b565b90565b67ffffffffffffffff8111612fae5760208091020190565b610800565b90929192612fc8612fc382612f96565b61083d565b938185526020808601920283019281841161300557915b838310612fec5750505050565b60208091612ffa8486611874565b815201920191612fdf565b6104e0565b9080601f830112156130285781602061302593519101612fb3565b90565b6104d8565b9060208282031261305d575f82015167ffffffffffffffff811161305857613055920161300a565b90565b6101ff565b6101fb565b5190565b60209181520190565b60200190565b61307e9061041b565b9052565b9061308f81602093613075565b0190565b60200190565b906130b66130b06130a984613062565b8093613066565b9261306f565b905f5b8181106130c65750505090565b9091926130df6130d96001928651613082565b94613093565b91019190916130b9565b6130fe9160208201915f818403910152613099565b90565b634e487b7160e01b5f52603260045260245ffd5b9061311f82613062565b811015613130576020809102010190565b613101565b61313f905161041b565b90565b61315661315161315b9261046e565b6102e4565b61046e565b90565b61316a61316f916112b6565b613142565b90565b61319a61319461318f6131c1955f956131896122ce565b506133ce565b613336565b91610ffb565b6131b6637784c6856131aa6101f1565b9586948593849361186e565b8352600483016130e9565b03915afa801561321c576131ed6131f2916131f7935f916131fa575b506131e75f611a5f565b90613115565b613135565b61315e565b90565b61321691503d805f833e61320e8183610814565b81019061302d565b5f6131dd565b6118a1565b61324961324361323e613270955f956132386122ce565b5061348d565b613336565b91610ffb565b613265637784c6856132596101f1565b9586948593849361186e565b8352600483016130e9565b03915afa80156132db576132ac6132a76132a26132b1936132b6955f916132b9575b5061329c5f611a5f565b90613115565b613135565b61315e565b612e78565b612746565b90565b6132d591503d805f833e6132cd8183610814565b81019061302d565b5f613292565b6118a1565b606090565b906132f76132f283612f96565b61083d565b918252565b369037565b9061332661330e836132e5565b9260208061331c8693612f96565b92019103906132fc565b565b906133329061041b565b9052565b61333e6132e0565b5061336d61335461334f6001612507565b613301565b91613368836133625f611a5f565b90613115565b613328565b90565b61337a6002612d07565b90565b91602061339e92949361339760408201965f830190612387565b0190610471565b565b60200190565b6133af5f611a5f565b90565b6133c66133c16133cb9261046e565b610b40565b61041b565b90565b61346a6134789161345261347d946133e4611338565b50916134186133f1613370565b916134096133fd6101f1565b9384926020840161337d565b60208201810382520382610814565b61342a61342482611a5b565b916133a0565b20916134436134376101f1565b938492602084016113e1565b60208201810382520382610814565b61346461345e82611a5b565b916133a0565b2061315e565b6134726133a6565b90612544565b6133b2565b90565b61348a6001612507565b90565b6135296135379161351161353c946134a3611338565b50916134d76134b0613370565b916134c86134bc6101f1565b9384926020840161337d565b60208201810382520382610814565b6134e96134e382611a5b565b916133a0565b20916135026134f66101f1565b938492602084016113e1565b60208201810382520382610814565b61352361351d82611a5b565b916133a0565b2061315e565b613531613480565b90612544565b6133b2565b90565b61354b6135519161265c565b9161265c565b9003906fffffffffffffffffffffffffffffffff821161356d57565b612530565b60c06135d1916135806122ce565b506135aa7f0000000000000000000000000000000000000000000000000000000000000000610ffb565b6135c6635c60e39a6135ba6101f1565b9586948593849361186e565b835260048301612394565b03915afa90811561363f5761360e91613609915f91613611575b5061360360406135fc5f8401612739565b9201612739565b9061353f565b612746565b90565b613632915060c03d8111613638575b61362a8183610814565b81019061271b565b5f6135eb565b503d613620565b6118a1565b60a06136a3926136526122ce565b5061367c7f0000000000000000000000000000000000000000000000000000000000000000610ffb565b613698632c3c915761368c6101f1565b9687948593849361186e565b835260048301612394565b03915afa801561371c576136eb925f916136ee575b50906136e57f00000000000000000000000000000000000000000000000000000000000000009291610e98565b916124b4565b90565b61370f915060a03d8111613715575b6137078183610814565b810190612369565b5f6136b8565b503d6136fd565b6118a1565b9061373e9061372e6122ce565b5061373881613572565b92613644565b8161375161374b8361046e565b9161046e565b11155f1461375e57505b90565b905061375b565b606090565b5090565b67ffffffffffffffff81116137865760208091020190565b610800565b9061379d6137988361376e565b61083d565b918252565b369037565b906137cc6137b48361378b565b926020806137c2869361376e565b92019103906137a2565b565b6137d79061046e565b5f1981146137e55760010190565b612530565b91908110156137fa576040020190565b613101565b3561380981610954565b90565b356138168161041e565b90565b9061382382610559565b811015613834576020809102010190565b613101565b906138439061046e565b9052565b61384f613765565b5061386361385e82849061376a565b6137a7565b9161386d5f611a5f565b5b8061388b61388561388086869061376a565b61046e565b9161046e565b10156138ea576138e5906138e06138ce6138b15f6138ab888887916137ea565b016137ff565b6138c860206138c2898988916137ea565b0161380c565b90613644565b6138db8791849092613819565b613839565b6137ce565b61386e565b50505090565b6138f8613765565b5061390c61390782849061376a565b6137a7565b916139165f611a5f565b5b8061393461392e61392986869061376a565b61046e565b9161046e565b10156139935761398e9061398961397761395a5f613954888887916137ea565b016137ff565b613971602061396b898988916137ea565b0161380c565b90613721565b6139848791849092613819565b613839565b6137ce565b613917565b50505090565b6139ad906139a561123a565b508290613644565b806139c06139ba5f611a5f565b9161046e565b14613a1457806139d86139d28561046e565b9161046e565b106139fe575b506139f46139ee6139fa92613572565b9261046e565b9161046e565b1190565b6139fa9192506139ee6139f491939250506139de565b5050505f90565b5090565b9190811015613a2f576060020190565b613101565b35613a3e81611094565b90565b613a4961123a565b50613a535f611a5f565b5b80613a71613a6b613a66858790613a1b565b61046e565b9161046e565b1015613ade57613ac4613a905f613a8a85878691613a1f565b016137ff565b613aa76020613aa186888791613a1f565b0161380c565b613abe6040613ab887898891613a1f565b01613a34565b91613999565b613ad657613ad1906137ce565b613a54565b505050600190565b5050505f90565b606090565b67ffffffffffffffff8111613b025760208091020190565b610800565b90613b19613b1483613aea565b61083d565b918252565b613b28604061083d565b90565b5f90565b5f90565b613b3b613b1e565b9060208083613b48613b2b565b815201613b53613b2f565b81525050565b613b61613b33565b90565b5f5b828110613b7257505050565b602090613b7d613b59565b8184015201613b66565b90613bac613b9483613b07565b92602080613ba28693613aea565b9201910390613b64565b565b613bb8604061083d565b90565b90613bc590610948565b9052565b90613bd39061041b565b9052565b90613be182610e85565b811015613bf2576020809102010190565b613101565b9190613c01613ae5565b50613c15613c10848390613a1b565b613b87565b92613c1f5f611a5f565b93613c295f611a5f565b5b80613c47613c41613c3c868890613a1b565b61046e565b9161046e565b1015613d2057613ca890613c9e613c6a5f613c6487898691613a1f565b016137ff565b613c816020613c7b888a8791613a1f565b0161380c565b613c986040613c92898b8891613a1f565b01613a34565b91613999565b613cad575b6137ce565b613c2a565b613d19613cc65f613cc087898691613a1f565b016137ff565b613cfd613ce06020613cda898b8891613a1f565b0161380c565b613cf4613ceb613bae565b935f8501613bbb565b60208301613bc9565b84613d078a6137ce565b9991613d138383613bd7565b52613bd7565b5150613ca3565b50915050613d2d83613b87565b91613d375f611a5f565b5b80613d4b613d458761046e565b9161046e565b1015613d8357613d7e90613d77613d63858390613bd7565b51868391613d718383613bd7565b52613bd7565b51506137ce565b613d38565b5092505090565b5f7f4e6f7420616e206f70657261746f720000000000000000000000000000000000910152565b613dbe600f602092610d66565b613dc781613d8a565b0190565b613de09060208101905f818303910152613db1565b90565b15613dea57565b613df26101f1565b62461bcd60e51b815280613e0860048201613dcb565b0390fd5b90613e32939291613e2d613e28613e216111d2565b33906112e2565b613de3565b613e35565b90565b90613e449391509190916144de565b90565b90613e5a9291613e556122ce565b613e0c565b90565b90613e83939291613e7e613e79613e726111d2565b33906112e2565b613de3565b614138565b90565b67ffffffffffffffff8111613e9e5760208091020190565b610800565b90613eb5613eb083613e86565b61083d565b918252565b613ec4604061083d565b90565b613ed160a061083d565b90565b5f90565b5f90565b613ee4613ec7565b9060208080808086613ef4613ed4565b815201613eff613ed4565b815201613f0a613ed4565b815201613f15613ed4565b815201613f20613ed8565b81525050565b613f2e613edc565b90565b613f39613eba565b9060208083613f46613f26565b815201613f51613ed8565b81525050565b613f5f613f31565b90565b5f5b828110613f7057505050565b602090613f7b613f57565b8184015201613f64565b90613faa613f9283613ea3565b92602080613fa08693613e86565b9201910390613f62565b565b613fb6604061083d565b90565b52565b5190565b90613fca82613fbc565b811015613fdb576020809102010190565b613101565b613fec613ff1916112b6565b6102a6565b90565b613ffe9054613fe0565b90565b5f91031261400b57565b6101fb565b61401990610e98565b9052565b60209181520190565b60200190565b90608080614084936140445f8201515f86019061281a565b6140566020820151602086019061281a565b6140686040820151604086019061281a565b61407a6060820151606086019061281a565b015191019061056c565b565b9060a060206140a99361409f5f8201515f86019061402c565b015191019061056c565b565b906140b88160c093614086565b0190565b60200190565b906140df6140d96140d284613fbc565b809361401d565b92614026565b905f5b8181106140ef5750505090565b90919261410861410260019286516140ab565b946140bc565b91019190916140e2565b916141359261412860408201935f830190614010565b60208184039101526140c2565b90565b9290925061419460a061416a7f0000000000000000000000000000000000000000000000000000000000000000610ffb565b632c3c915790614189869261417d6101f1565b9586948593849361186e565b835260048301612394565b03915afa9081156144d9575f916144ab575b506141b083613572565b93846141c46141be5f611a5f565b9161046e565b1461449a576141fd7f0000000000000000000000000000000000000000000000000000000000000000836141f784610e98565b916124b4565b948561421161420b5f611a5f565b9161046e565b1461448857806142296142238861046e565b9161046e565b11155f1461447e5761428c905b9560a06142627f0000000000000000000000000000000000000000000000000000000000000000610ffb565b632c3c91579061428188926142756101f1565b9687948593849361186e565b835260048301612394565b03915afa918215614479576143559261430b915f9161444b575b50916142e66142c96142c06142bb6002612d07565b613f85565b97928b90612762565b6142dd6142d4613fac565b935f8501613fb9565b60208301613839565b61430586915f906142ff6142f983611a5f565b85613fc0565b52611a5f565b90613fc0565b515061432f5f1961432661431d613fac565b935f8501613fb9565b60208301613839565b61434f849160019061434961434383612507565b85613fc0565b52612507565b90613fc0565b51506143686143635f613ff4565b61030f565b9163eb7499cf90829093803b15614446576143965f80946143a161438a6101f1565b9889968795869461186e565b845260048401614112565b03925af1918215614441576143bb92614415575b50610e98565b91839261440f6143fd6143f76143f17f7d87935060b9054d91333b06a87bf5fcddabd659fce43e354a4323a55477067794611294565b94610eb1565b94610eb1565b946144066101f1565b918291826109b1565b0390a490565b614434905f3d811161443a575b61442c8183610814565b810190614001565b5f6143b5565b503d614422565b6118a1565b61186a565b61446c915060a03d8111614472575b6144648183610814565b810190612369565b5f6142a6565b503d61445a565b6118a1565b5061428c85614236565b5050505050506144975f611a5f565b90565b50505050506144a85f611a5f565b90565b6144cc915060a03d81116144d2575b6144c48183610814565b810190612369565b5f6141a6565b503d6144ba565b6118a1565b906144f192916144ec6122ce565b613e5d565b90565b90614519929161451461450f6145086111d2565b33906112e2565b613de3565b614535565b90565b5090565b9190811015614530576060020190565b613101565b9190915061454c61454783839061451c565b6137a7565b916145565f611a5f565b5b8061457461456e61456985879061451c565b61046e565b9161046e565b10156145ea576145e5906145e06145ce61459a5f61459487898791614520565b016137ff565b6145b160206145ab888a8891614520565b0161380c565b6145c860406145c2898b8991614520565b0161380c565b916144de565b6145db8791849092613819565b613839565b6137ce565b614557565b50505090565b90614602916145fd613765565b6144f4565b9056fea264697066735822122097405ca7ca614d9c31d1bcce0d08d1d5475c7c47912f79c9624811186ba52a5464736f6c63430008150033