0 txs
4 calls
constructor
constructor()
functions
BRIDGE_SLIPPAGE_BASE
viewfunction BRIDGE_SLIPPAGE_BASE() view returns (uint256)
bridgeSlippage
viewfunction bridgeSlippage() view returns (uint256)
dstExternalFeeRate
viewfunction dstExternalFeeRate() view returns (uint16)
ETH_PLACEHOLDER
viewfunction ETH_PLACEHOLDER() view returns (address)
FEE_BASE
viewfunction FEE_BASE() view returns (uint256)
feeRecipient
viewfunction feeRecipient() view returns (address)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
quoteLayerZeroFee
viewfunction quoteLayerZeroFee(address to, tuple srcInfo, tuple dstInfo, tuple dstExtSwapInfo) view returns (uint256, uint256)
sgInfo
viewfunction sgInfo() view returns (address)
srcExternalFeeRate
viewfunction srcExternalFeeRate() view returns (uint16)
weth
viewfunction weth() view returns (address)
woofiCrossRouters
viewfunction woofiCrossRouters(uint32) view returns (address)
woofiRouter
viewfunction woofiRouter() view returns (address)
claimFee
nonpayablefunction claimFee(address token)
crossSwap
payablefunction crossSwap(address to, tuple srcInfo, tuple dstInfo, tuple srcExtSwapInfo, tuple dstExtSwapInfo) payable
inCaseTokenGotStuck
nonpayablefunction inCaseTokenGotStuck(address _stuckToken)
initialize
nonpayablefunction initialize(address _owner, address _weth, address _woofiRouter, address _sgInfo)
lzCompose
payablefunction lzCompose(address _from, bytes32 _guid, bytes _message, address, bytes) payable
pause
nonpayablefunction pause()
renounceOwnership
nonpayablefunction renounceOwnership()
setBridgeSlippage
nonpayablefunction setBridgeSlippage(uint256 _bridgeSlippage)
setFeeRecipient
nonpayablefunction setFeeRecipient(address _feeRecipient)
setWOOFiCrossRouter
nonpayablefunction setWOOFiCrossRouter(uint32 _eid, address _crossRouter)
setWOOFiRouter
nonpayablefunction setWOOFiRouter(address _woofiRouter)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
events
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
Unpaused
event Unpaused(address account)
WOOFiCrossSwapOnDstChain
event WOOFiCrossSwapOnDstChain(uint32 srcEid, bytes32 indexed guid, address indexed sender, address indexed to, address bridgedToken, uint256 bridgedAmount, address toToken, address realToToken, uint256 minToAmount, uint256 realToAmount, uint8 swapType, uint256 fee)
WOOFiCrossSwapOnSrcChain
event WOOFiCrossSwapOnSrcChain(uint32 dstEid, bytes32 indexed guid, address indexed sender, address indexed to, address fromToken, uint256 fromAmount, address bridgeToken, uint256 minBridgeAmount, uint256 realBridgeAmount, uint8 swapType, uint256 fee)
errors
EnforcedPause
error EnforcedPause()
ExpectedPause
error ExpectedPause()
InvalidInitialization
error InvalidInitialization()
InvalidOptionType
error InvalidOptionType(uint16 optionType)
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
creation bytecode
0x60808060405234620000bd577ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009081549060ff8260401c16620000ae57506001600160401b036002600160401b03198282160162000068575b604051614b6a9081620000c38239f35b6001600160401b031990911681179091556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a138808062000058565b63f92ee8a960e01b8152600490fd5b600080fdfe6080604052600436101561001b575b361561001957600080fd5b005b60003560e01c8063027b4b6f146101cb5780633f4ba83a146101c65780633fc8cef3146101c1578063403a01e5146101bc57806346904840146101b757806348cdc47a146101b257806358800adf146101ad578063590bae89146101a85780635c975abb146101a35780636d21957e1461019e5780636d6e9f41146101995780636ebc51e114610194578063715018a61461018f57806381083bc61461018a57806383af5550146101855780638456cb59146101805780638da5cb5b1461017b578063b5daaf5814610176578063b929214114610171578063c45e15a01461016c578063d0a1026014610167578063e1a4e72a14610162578063e74b981b1461015d578063ecb911de14610158578063ecefc70514610153578063f2fde38b1461014e5763f8c8765e0361000e57611835565b6117ea565b6117ae565b61176e565b6116e7565b6115e0565b611326565b6112ab565b611268565b6111f9565b611188565b6110d3565b611097565b61105c565b610f9a565b610e22565b610a12565b610925565b610753565b610642565b6105f0565b6104aa565b61042c565b610361565b61030f565b610232565b6101e0565b60009103126101db57565b600080fd5b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57602073ffffffffffffffffffffffffffffffffffffffff60005416604051908152f35b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57610269612d67565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f03300805460ff8116156102e5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a1005b60046040517f8dfc202b000000000000000000000000000000000000000000000000000000008152fd5b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57602073ffffffffffffffffffffffffffffffffffffffff60025416604051908152f35b346101db5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db5760043561039b612d67565b61271081116103a957600455005b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f574f4f466943726f7373526f7574657256353a20215f627269646765536c697060448201527f70616765000000000000000000000000000000000000000000000000000000006064820152fd5b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57602073ffffffffffffffffffffffffffffffffffffffff60035416604051908152f35b63ffffffff8116036101db57565b73ffffffffffffffffffffffffffffffffffffffff8116036101db57565b346101db5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db576004356104e58161047e565b6024356104f18161048c565b6104f9612d67565b73ffffffffffffffffffffffffffffffffffffffff81161561056c5763ffffffff6100199216600052600660205260406000209073ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f574f4f466943726f7373526f7574657256353a20215f63726f7373526f75746560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152fd5b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b346101db5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db5773ffffffffffffffffffffffffffffffffffffffff6004356106928161048c565b61069a612d67565b1680156106cf577fffffffffffffffffffffffff00000000000000000000000000000000000000006000541617600055600080f35b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f574f4f466943726f7373526f7574657256353a20215f776f6f6669526f75746560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152fd5b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57602060ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330054166040519015158152f35b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6080810190811067ffffffffffffffff8211176107fe57604052565b6107b3565b67ffffffffffffffff81116107fe57604052565b6040810190811067ffffffffffffffff8211176107fe57604052565b6020810190811067ffffffffffffffff8211176107fe57604052565b60a0810190811067ffffffffffffffff8211176107fe57604052565b6060810190811067ffffffffffffffff8211176107fe57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff8211176107fe57604052565b6040519060e0820182811067ffffffffffffffff8211176107fe57604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c60c09101126101db5760a490565b908160409103126101db5790565b6101a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db5760043561095c8161048c565b60807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126101db5760405190610993826107e2565b60243561099f8161048c565b82526044356109ad8161048c565b6020830152606435604083015260843560608301526109cb366108e8565b67ffffffffffffffff9290610164358481116101db576109ef903690600401610917565b91610184359485116101db57610a0c610019953690600401610917565b93611a6b565b346101db576101807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57600435610a4e8161048c565b60807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc3601126101db57610a81366108e8565b6101643567ffffffffffffffff81116101db57610aa2903690600401610917565b91602090610ab1828401612300565b90610b07604095610adb610ac6888801612300565b91885195869360608a013591878a8701612750565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101845283610887565b610b24610b12613695565b610b1e60a087016127ff565b906136ca565b6080850191610b4a610b35846127ff565b6fffffffffffffffffffffffffffffffff1690565b610df2575b509050610bb6610b9d610b83610b6d610b6788612746565b97612746565b63ffffffff166000526006602052604060002090565b5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b608435610bc281613872565b91610bda610bce6108c8565b63ffffffff9098168852565b85870152868601526060850152608084015260a0830152610bf9612856565b60c0830152610c20610b9d60015473ffffffffffffffffffffffffffffffffffffffff1690565b9183517f42407dc40000000000000000000000000000000000000000000000000000000081528281600481875afa8015610d8f57610cc8948492600092610dc3575b50610c6b6122f1565b87517fbb0d15fe00000000000000000000000000000000000000000000000000000000815263ffffffff909316600484015273ffffffffffffffffffffffffffffffffffffffff1660248301529094859190829081906044820190565b03915afa928315610d8f5773ffffffffffffffffffffffffffffffffffffffff938592610d2c92600092610d94575b5083519586809481937f3b6f743b00000000000000000000000000000000000000000000000000000000835260048301612978565b0392165afa918215610d8f57600092610d5c575b50815191015191519081526020810191909152604090f35b0390f35b610d58919250610d8190843d8611610d88575b610d798183610887565b810190612891565b9190610d40565b503d610d6f565b6123a9565b610db5919250853d8711610dbc575b610dad8183610887565b8101906123b5565b9038610cf7565b503d610da3565b610de4919250833d8511610deb575b610ddc8183610887565b810190612394565b9038610c62565b503d610dd2565b73ffffffffffffffffffffffffffffffffffffffff610e13610e1b946127ff565b9116916137d3565b8038610b4f565b346101db5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57600435610e5d8161048c565b610e65612e2c565b73ffffffffffffffffffffffffffffffffffffffff80600354168015610f1657610e8f3084613177565b9182610ebf575b61001960017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee03610f085750600354610eff925073ffffffffffffffffffffffffffffffffffffffff1661399c565b38808080610e96565b610f1192613890565b610eff565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f574f4f466943726f7373526f7574657256353a2021666565526563697069656e60448201527f74000000000000000000000000000000000000000000000000000000000000006064820152fd5b346101db576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261105957610fd2612d67565b8073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993008054907fffffffffffffffffffffffff000000000000000000000000000000000000000082169055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b80fd5b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db5760206040516127108152f35b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db576020600454604051908152f35b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db5761110a612d67565b611112612dd7565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f0330060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a1005b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57602073ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c1993005416604051908152f35b346101db5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db5763ffffffff6004356112398161047e565b166000526006602052602073ffffffffffffffffffffffffffffffffffffffff60406000205416604051908152f35b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57602061ffff60055460101c16604051908152f35b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57602060405173eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8152f35b9181601f840112156101db5782359167ffffffffffffffff83116101db57602083818601950101116101db57565b60a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db576004803561135d8161048c565b6024356044359267ffffffffffffffff938481116101db5761138290369083016112f8565b91909461139060643561048c565b6084359081116101db576113a790369083016112f8565b50506113cb610b9d60015473ffffffffffffffffffffffffffffffffffffffff1690565b93604051937f42407dc4000000000000000000000000000000000000000000000000000000008552602094858185818a5afa908115610d8f576000916115c3575b50604051907f73f0c8f50000000000000000000000000000000000000000000000000000000082528682806114508489830191909163ffffffff6020820193169052565b03818b5afa938415610d8f57899487936000916115a6575b508873ffffffffffffffffffffffffffffffffffffffff998a97889687809516331461149390612995565b61149c91613a21565b9c6114a78b82613a33565b9a6114b191613a42565b818082518301019101906114c491612a20565b9f929b91939e909e169a16978892169a6040518098819482937fbb0d15fe0000000000000000000000000000000000000000000000000000000084528301916115359290929173ffffffffffffffffffffffffffffffffffffffff60209163ffffffff604085019616845216910152565b03915afa8015610d8f57611558948392600092611589575b505016911614612aeb565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee810361157d575061001996614206565b92919061001997613b90565b61159f9250803d10610dbc57610dad8183610887565b388061154d565b6115bd9150893d8b11610dbc57610dad8183610887565b38611468565b6115da9150863d8811610deb57610ddc8183610887565b3861140c565b346101db5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db5760043561161b8161048c565b611623612d67565b73ffffffffffffffffffffffffffffffffffffffff81169073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8203611662575050610019473361399c565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015291602090839060249082905afa908115610d8f57610019926000926116b6575b503390613890565b6116d991925060203d6020116116e0575b6116d18183610887565b8101906124e0565b90386116ae565b503d6116c7565b346101db5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db5773ffffffffffffffffffffffffffffffffffffffff6004356117378161048c565b61173f612d67565b167fffffffffffffffffffffffff00000000000000000000000000000000000000006003541617600355600080f35b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db57602061ffff60055416604051908152f35b346101db5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db576020604051620186a08152f35b346101db5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db576100196004356118288161048c565b611830612d67565b612b76565b346101db5760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101db576004356118708161048c565b6024359061187d8261048c565b6044356118898161048c565b606435906118968261048c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549367ffffffffffffffff60ff8660401c1615951680159081611a63575b6001149081611a59575b159081611a50575b50611a265761194993856119407ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0060017fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055565b6119ca57612c39565b61194f57005b61199b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff8154169055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1005b611a217ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff825416179055565b612c39565b60046040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b905015386118e7565b303b1591506118df565b8691506118d5565b9290611a75612dd7565b611a7d612e2c565b73ffffffffffffffffffffffffffffffffffffffff9081851695611aa2871515612201565b611acd611ac6610b9d845173ffffffffffffffffffffffffffffffffffffffff1690565b1515612266565b604092611ae8611ae1610b9d868901612300565b151561230a565b611b0a610b9d60015473ffffffffffffffffffffffffffffffffffffffff1690565b9380517f42407dc400000000000000000000000000000000000000000000000000000000815260209081816004818a5afa908115610d8f57611bd09183916000916121e4575b5081880198611b738a5173ffffffffffffffffffffffffffffffffffffffff1690565b86517fbb0d15fe00000000000000000000000000000000000000000000000000000000815263ffffffff909316600484015273ffffffffffffffffffffffffffffffffffffffff1660248301529092839190829081906044820190565b03915afa908115610d8f57611bf29185916000916121c7575b501615156123ca565b846000938885611c16845173ffffffffffffffffffffffffffffffffffffffff1690565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee939081811685036121b15750611c4687860151341015612455565b845173ffffffffffffffffffffffffffffffffffffffff1693611c80610b9d8d5173ffffffffffffffffffffffffffffffffffffffff1690565b858316818103611e26575050505050505082915001515b82818751611cb89073ffffffffffffffffffffffffffffffffffffffff1690565b30611cc291613177565b1015611ccd90612623565b611cd6916126ae565b97606085019388868b8751811015611ced906126bb565b611cf6946132cf565b96611d0090612746565b97818551611d219073ffffffffffffffffffffffffffffffffffffffff1690565b950151955173ffffffffffffffffffffffffffffffffffffffff16935196611d4890612300565b73ffffffffffffffffffffffffffffffffffffffff161560001496611df0947f8dbf61e74c14d5d835816a6bdaf0874bd5f7bff3ee4d8c4c83d0e6bf8da4cf7298611e1e576000935b51978897339c899490989796929160ff9460e0979363ffffffff61010089019c16885273ffffffffffffffffffffffffffffffffffffffff80931660208901526040880152166060860152608085015260a08401521660c08201520152565b0390a4611e1c60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055565b565b600193611d91565b8290611e4a610b9d60025473ffffffffffffffffffffffffffffffffffffffff1690565b1491826121a7575b505015611ef95750505050505050611e85610b9d610b9d60025473ffffffffffffffffffffffffffffffffffffffff1690565b81850190815190803b156101db5783517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815260048101929092526000908290602490829084905af18015610d8f57611ee0575b5051611c97565b80611eed611ef392610803565b806101d0565b38611ed9565b611f30611f23610b9d859b969798999b5473ffffffffffffffffffffffffffffffffffffffff1690565b9689890197885191613112565b865173ffffffffffffffffffffffffffffffffffffffff1691821603612198578d8b611f60610b9d885197612300565b1561209957925050508693929150611f90610b9d60005473ffffffffffffffffffffffffffffffffffffffff1690565b918b612032611f9e82612300565b611fa783612300565b92611ff86060611fe9611fce8d5173ffffffffffffffffffffffffffffffffffffffff1690565b985173ffffffffffffffffffffffffffffffffffffffff1690565b99519b0151918a8101906124ef565b9290918c519b8c9a8b998a987f199b83fa000000000000000000000000000000000000000000000000000000008a52309560048b0161257f565b03925af1928315610d8f5760009361207a575b505061207461206b8361206561205e60055461ffff1690565b61ffff1690565b9061260b565b620186a0900490565b91611c97565b612091929350803d106116e0576116d18183610887565b903880612045565b919594899561216360606120e86120cd610b9d999e99899d97995473ffffffffffffffffffffffffffffffffffffffff1690565b965173ffffffffffffffffffffffffffffffffffffffff1690565b92519401518b517f7dc2038200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9a8b166004820152928a166024840152604483019490945260648201939093523060848201529690931660a487015285928391829060c4820190565b03925af1928315610d8f579261217b575b5050611c97565b6121919250803d106116e0576116d18183610887565b3880612174565b8d8b611f60610b9d8597612300565b1490508138611e52565b858801516121c29130903390612ece565b611c46565b6121de9150843d8611610dbc57610dad8183610887565b38611be9565b6121fb9150823d8411610deb57610ddc8183610887565b38611b50565b1561220857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f574f4f466943726f7373526f7574657256353a2021746f0000000000000000006044820152fd5b1561226d57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f574f4f466943726f7373526f7574657256353a2021737263496e666f2e66726f60448201527f6d546f6b656e00000000000000000000000000000000000000000000000000006064820152fd5b6044356122fd8161048c565b90565b356122fd8161048c565b1561231157565b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f574f4f466943726f7373526f7574657256353a2021647374496e666f2e746f5460448201527f6f6b656e000000000000000000000000000000000000000000000000000000006064820152fd5b908160209103126101db57516122fd8161047e565b6040513d6000823e3d90fd5b908160209103126101db57516122fd8161048c565b156123d157565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f574f4f466943726f7373526f7574657256353a2021737263496e666f2e62726960448201527f646765546f6b656e0000000000000000000000000000000000000000000000006064820152fd5b1561245c57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f574f4f466943726f7373526f7574657256353a2021737263496e666f2e66726f60448201527f6d416d6f756e74000000000000000000000000000000000000000000000000006064820152fd5b908160209103126101db575190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156101db570180359067ffffffffffffffff82116101db576020019181360383136101db57565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b949095916122fd999793946101009773ffffffffffffffffffffffffffffffffffffffff96878094818094168b521660208a0152166040880152166060860152608085015260a08401521660c08201528160e08201520191612540565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181029291811591840414171561261e57565b6125dc565b1561262a57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f574f4f466943726f7373526f7574657256353a2042414c414e43455f4e4f545f60448201527f454e4f55474800000000000000000000000000000000000000000000000000006064820152fd5b9190820391821161261e57565b156126c257565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f574f4f466943726f7373526f7574657256353a2021737263496e666f2e6d696e60448201527f427269646765416d6f756e7400000000000000000000000000000000000000006064820152fd5b356122fd8161047e565b9493919273ffffffffffffffffffffffffffffffffffffffff8094818094168852166020870152166040850152606084015260a0608084015281356127948161048c565b1660a083015260208101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1823603018112156101db57016020813591019067ffffffffffffffff81116101db5780360382136101db5760e083604060c06122fd9601520191612540565b356fffffffffffffffffffffffffffffffff811681036101db5790565b67ffffffffffffffff81116107fe57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b6040519061286382610833565b60008252565b91908260409103126101db5760405161288181610817565b6020808294805184520151910152565b906040828203126101db576122fd91612869565b60005b8381106128b85750506000910152565b81810151838201526020016128a8565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612904815180928187528780880191016128a5565b0116010190565b6122fd9163ffffffff825116815260208201516020820152604082015160408201526060820151606082015260c0612967612955608085015160e0608086015260e08501906128c8565b60a085015184820360a08601526128c8565b9201519060c08184039101526128c8565b9190602061299060009260408652604086019061290b565b930152565b1561299c57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f574f4f466943726f7373526f7574657256353a20494e56414c49445f43414c4c60448201527f45520000000000000000000000000000000000000000000000000000000000006064820152fd5b9060a0828203126101db578151612a368161048c565b9260209081840151612a478161048c565b936040810151612a568161048c565b93606082015193608083015167ffffffffffffffff938482116101db5701926040848403126101db5760405193612a8c85610817565b8051612a978161048c565b8552828101519182116101db570182601f820112156101db578051612abb8161281c565b93612ac96040519586610887565b8185528382840101116101db57612ae5918380860191016128a5565b82015290565b15612af257565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f574f4f466943726f7373526f7574657256353a20215f66726f6d5f4e4f545f5060448201527f41495200000000000000000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff809116908115612c08577f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300805490837fffffffffffffffffffffffff00000000000000000000000000000000000000008316179055167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a3565b60246040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260006004820152fd5b612c5090939193612c48614adb565b611830614adb565b612c58614adb565b612c60614adb565b7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008154169055612caf614adb565b612cb7614adb565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005573ffffffffffffffffffffffffffffffffffffffff8092817fffffffffffffffffffffffff0000000000000000000000000000000000000000951685600254161760025516836000541617600055169060015416176001556064600455621900197fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000006005541617600555565b73ffffffffffffffffffffffffffffffffffffffff7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930054163303612da757565b60246040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152fd5b60ff7fcd5ed15c6e187e77e9aee88184c21f4f2182ab5827cb3b7e07fbedcd63f033005416612e0257565b60046040517fd93c0665000000000000000000000000000000000000000000000000000000008152fd5b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f006002815414612e5c5760029055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b3d15612eb1573d90612e978261281c565b91612ea56040519384610887565b82523d6000602084013e565b606090565b908160209103126101db575180151581036101db5790565b9091600080949381946040519160208301947f23b872dd00000000000000000000000000000000000000000000000000000000865273ffffffffffffffffffffffffffffffffffffffff8092166024850152166044830152606482015260648152612f388161084f565b51925af1612f44612e86565b81612fb0575b5015612f5257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f53544600000000000000000000000000000000000000000000000000000000006044820152fd5b8051801592508215612fc5575b505038612f4a565b612fd89250602080918301019101612eb6565b3880612fbd565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff909316602482015260006044820181905292839291839061306b81606481015b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610887565b51925af1613077612e86565b816130e3575b501561308557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f53410000000000000000000000000000000000000000000000000000000000006044820152fd5b80518015925082156130f8575b50503861307d565b61310b9250602080918301019101612eb6565b38806130f0565b6040517f095ea7b3000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff90931660248201526044810193909352600092839290839061306b816064810161303f565b73ffffffffffffffffffffffffffffffffffffffff9081169073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee82036131b15750503190565b60246020929360405194859384927f70a082310000000000000000000000000000000000000000000000000000000084521660048301525afa908115610d8f576000916131fc575090565b6122fd915060203d6020116116e0576116d18183610887565b9190820180921161261e57565b919082810360c081126101db576080136101db576040519067ffffffffffffffff60608301818111848210176107fe5760405284518352602085015190811681036101db578260809160206122fd9501526132808360408801612869565b60408201529401612869565b91939273ffffffffffffffffffffffffffffffffffffffff9060206132bb60609460808752608087019061290b565b968051828701520151604085015216910152565b939092916020916132e1838501612300565b61330a60409261303f6132f5858901612300565b91855194859360608b0135918d8b8701612750565b613321613315613695565b610b1e60a088016127ff565b9660808601613332610b35826127ff565b613669575b505061335b610b9d60015473ffffffffffffffffffffffffffffffffffffffff1690565b968251937f42407dc400000000000000000000000000000000000000000000000000000000855285856004818c5afa8015610d8f5786809261341d9760009361364a575b5001996133c08b5173ffffffffffffffffffffffffffffffffffffffff1690565b86517fbb0d15fe00000000000000000000000000000000000000000000000000000000815263ffffffff909316600484015273ffffffffffffffffffffffffffffffffffffffff1660248301529095869190829081906044820190565b03915afa938415610d8f5760009461362b575b5073ffffffffffffffffffffffffffffffffffffffff80941694613468895173ffffffffffffffffffffffffffffffffffffffff1690565b888773eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee809884160361361a575b5050506134a7610b9d610b83610b6d6134a18b612746565b9a612746565b6134b089613872565b916134c86134bc6108c8565b63ffffffff909a168a52565b88015287848801526060870152608086015260a08501526134e7612856565b60c08501528051947f3b6f743b0000000000000000000000000000000000000000000000000000000086528186806135228860048301612978565b0381875afa928315610d8f576135a59760c0976000956135f3575b505161355e9073ffffffffffffffffffffffffffffffffffffffff16610b9d565b036135ea5761356e908351613215565b905b518096819582947fc7c7f5b300000000000000000000000000000000000000000000000000000000845232916004850161328c565b03925af1908115610d8f576000916135bc57505190565b6135de915060c03d60c0116135e3575b6135d68183610887565b810190613222565b505190565b503d6135cc565b50815190613570565b61355e919550613612610b9d91863d8811610d8857610d798183610887565b95915061353d565b61362392613112565b388887613489565b613643919450853d8711610dbc57610dad8183610887565b9238613430565b613662919350823d8411610deb57610ddc8183610887565b913861339f565b9073ffffffffffffffffffffffffffffffffffffffff610e1361368d949a936127ff565b953880613337565b6040517e030000000000000000000000000000000000000000000000000000000000006020820152600281526122fd81610817565b9061ffff916003836136db8361492a565b1603613798577fffffffffffffffffffffffffffffffff00000000000000000000000000000000604051926000602085015260801b1660228301526012825261372382610817565b60038361372f8361492a565b160361379857815183811161376057831660010192831161261e5761303f6122fd9260405194859360208501614a3c565b604490604051907f6dfcc650000000000000000000000000000000000000000000000000000000008252601060048301526024820152fd5b826137a460249261492a565b6040517f3a51740d00000000000000000000000000000000000000000000000000000000815291166004820152fd5b61ffff926003846137e38461492a565b1603613866577fffffffffffffffffffffffffffffffff000000000000000000000000000000006040519360801b1660208401526030830152603082526138298261086b565b6003836138358361492a565b160361379857815183811161376057831660010192831161261e5761303f6122fd9260405194859360208501614998565b6024846137a48461492a565b6004549061271091820382811161261e5761388c9161260b565b0490565b6040517fa9059cbb000000000000000000000000000000000000000000000000000000006020820190815273ffffffffffffffffffffffffffffffffffffffff9093166024820152604481019390935260009283929083906138f5816064810161303f565b51925af1613901612e86565b8161396d575b501561390f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600260248201527f53540000000000000000000000000000000000000000000000000000000000006044820152fd5b8051801592508215613982575b505038613907565b6139959250602080918301019101612eb6565b388061397a565b60008080938193826040516139b081610833565b525af16139bb612e86565b50156139c357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600360248201527f53544500000000000000000000000000000000000000000000000000000000006044820152fd5b90600c116101db576008013560e01c90565b90602c116101db57600c013590565b81604c116101db577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb4820190613a778261281c565b92613a856040519485610887565b82845236818301116101db57600092604c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4930160208601378301015290565b936122fd9796929395916101009673ffffffffffffffffffffffffffffffffffffffff809681809416895216602088015273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6040880152166060860152608085015260a08401521660c08201528160e082015201906128c8565b949095916122fd989793946101009773ffffffffffffffffffffffffffffffffffffffff96878094818094168b521660208a0152166040880152166060860152608085015260a08401521660c08201528160e082015201906128c8565b94959290939573ffffffffffffffffffffffffffffffffffffffff9384881685841614600014613c945790613c87929185613c0e8a9b613bf485897fbf2345d8521429336e093726703b50e717e8e36e30d2de2fb68537a6b903af189c9d9e613890565b5173ffffffffffffffffffffffffffffffffffffffff1690565b16613c8c576000925b8083604051988998169c339c89949261010096919998936000989360ff9663ffffffff6101208a019d16895273ffffffffffffffffffffffffffffffffffffffff938480931660208b015260408a015216606088015216608086015260a085015260c08401521660e08201520152565b0390a4565b600192613c17565b84613cb68a9994995173ffffffffffffffffffffffffffffffffffffffff1690565b1615613f8757613cdc61206b613cd661205e60055461ffff9060101c1690565b8461260b565b613ce681846126ae565b613d1281613d0c610b9d60005473ffffffffffffffffffffffffffffffffffffffff1690565b87613112565b896020868d8a60008b613d9e613d3f610b9d845473ffffffffffffffffffffffffffffffffffffffff1690565b9487613d5f825173ffffffffffffffffffffffffffffffffffffffff1690565b910151908c8b6040519b8c9a8b998a987f199b83fa000000000000000000000000000000000000000000000000000000008a5216948060048a01613b33565b03925af160009181613f66575b50613e9a5750505090613c879291613e1a610b9d7fbf2345d8521429336e093726703b50e717e8e36e30d2de2fb68537a6b903af1898999a9b613e0f613e09610b9d60005473ffffffffffffffffffffffffffffffffffffffff1690565b87612fdf565b613bf4858988613890565b613e92576000925b604051968796169a8382339c89949261010096919998936000989360ff9663ffffffff6101208a019d16895273ffffffffffffffffffffffffffffffffffffffff938480931660208b015260408a015216606088015216608086015260a085015260c08401521660e08201520152565b600192613e22565b919350917fbf2345d8521429336e093726703b50e717e8e36e30d2de2fb68537a6b903af18979899613ee7610b9d613c87979d5173ffffffffffffffffffffffffffffffffffffffff1690565b613f5d57806000945b604051998a99169d339d8a95919460ff956101009894929b9a999563ffffffff6101208a019d16895273ffffffffffffffffffffffffffffffffffffffff938480931660208b015260408a015216606088015216608086015260a085015260c08401521660e08201520152565b80600194613ef0565b613f8091925060203d6020116116e0576116d18183610887565b9038613dab565b908295969792939498600090828254613fb39073ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690613fd49188613112565b81546040517f7dc2038200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff998a166004820152868a16602482015260448101859052606481018690529b8816808a1660848e0152888a1660a48e01529b98168860c481855a94602095f1978883917fbf2345d8521429336e093726703b50e717e8e36e30d2de2fb68537a6b903af189a6141e5575b5061413f5750610b9d6140c291613bf485613c8798999a6140bc6140b6610b9d895473ffffffffffffffffffffffffffffffffffffffff1690565b8d612fdf565b8b613890565b61413657915b6040519586958382339c89949261010096919998936000989360ff9663ffffffff6101208a019d16895273ffffffffffffffffffffffffffffffffffffffff938480931660208b015260408a015216606088015216608086015260a085015260c08401521660e08201520152565b506001916140c8565b92965090614169610b9d613c879695935173ffffffffffffffffffffffffffffffffffffffff1690565b6141dc57925b80604051978897339c89949261010096919998936000989360ff9663ffffffff6101208a019d16895273ffffffffffffffffffffffffffffffffffffffff938480931660208b015260408a015216606088015216608086015260a085015260c08401521660e08201520152565b5060019261416f565b6141ff91925060203d6020116116e0576116d18183610887565b903861407b565b9490939295919573ffffffffffffffffffffffffffffffffffffffff9384821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8114614861578561426160025473ffffffffffffffffffffffffffffffffffffffff1690565b168091146146e2575084614289855173ffffffffffffffffffffffffffffffffffffffff1690565b161561450d5760055460101c61ffff1661ffff166142a7908261260b565b620186a09004976142b889836126ae565b9060009182546142db9073ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff169a87516143119073ffffffffffffffffffffffffffffffffffffffff1690565b9883169b60208901518d6040519b8c9283927f199b83fa0000000000000000000000000000000000000000000000000000000084528c888d85600488019661435897613ac5565b0381855a94602095f1988985917fbf2345d8521429336e093726703b50e717e8e36e30d2de2fb68537a6b903af189b6144ec575b5061443657505050610b9d613c87949596613bf4856143aa9461399c565b61442d57905b60405194859482339a8792946101009460ff9373ffffffffffffffffffffffffffffffffffffffff6000989a99949a63ffffffff61012089019c16885273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee928360208a01526040890152166060870152608086015260a085015260c08401521660e08201520152565b506001906143b0565b925093509491614461610b9d613c8796985173ffffffffffffffffffffffffffffffffffffffff1690565b6144e357915b86604051978897339c8994909897969260ff94610100979363ffffffff61012089019c16885273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6020890152604088015273ffffffffffffffffffffffffffffffffffffffff809216606088015216608086015260a085015260c08401521660e08201520152565b50600191614467565b61450691925060203d6020116116e0576116d18183610887565b903861438c565b9091969387937fbf2345d8521429336e093726703b50e717e8e36e30d2de2fb68537a6b903af1895600092602061455b610b9d865473ffffffffffffffffffffffffffffffffffffffff1690565b6040517f7dc2038200000000000000000000000000000000000000000000000000000000815273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee600482015273ffffffffffffffffffffffffffffffffffffffff898116602483015260448201899052606482019e909e52928416808e1660848501529c841660a4840152829060c490829089905af18491816146c1575b506146095750610b9d849392613bf4613c87966143aa9461399c565b91613c87949596939150610b9d614634915173ffffffffffffffffffffffffffffffffffffffff1690565b6146b857915b85604051968796339b88939460ff9361010096600098939a999463ffffffff61012089019c16885273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6020890152604088015273ffffffffffffffffffffffffffffffffffffffff809216606088015216608086015260a085015260c08401521660e08201520152565b5060019161463a565b6146db91925060203d6020116116e0576116d18183610887565b90386145ed565b8098939298959491953b156101db57600086916004604051809981937fd0e30db00000000000000000000000000000000000000000000000000000000083525af1928315610d8f577fbf2345d8521429336e093726703b50e717e8e36e30d2de2fb68537a6b903af1896613c879461484e575b5061477f828661477a60025473ffffffffffffffffffffffffffffffffffffffff1690565b613890565b856147bd6147a260025473ffffffffffffffffffffffffffffffffffffffff1690565b945173ffffffffffffffffffffffffffffffffffffffff1690565b16614846576000925b604051968796169a83339b88939460ff9361010096600098939a999463ffffffff61012089019c16885273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6020890152604088015273ffffffffffffffffffffffffffffffffffffffff809216606088015216608086015260a085015260c08401521660e08201520152565b6001926147c6565b80611eed61485b92610803565b38614755565b5091828561489a7fbf2345d8521429336e093726703b50e717e8e36e30d2de2fb68537a6b903af189796613bf48c97613c87979d61399c565b16614922576000915b604051958695169982339a8792946101009460ff9373ffffffffffffffffffffffffffffffffffffffff6000989a99949a63ffffffff61012089019c16885273eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee928360208a01526040890152166060870152608086015260a085015260c08401521660e08201520152565b6001916148a3565b600281511061493a576002015190565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f746f55696e7431365f6f75744f66426f756e64730000000000000000000000006044820152fd5b60207fffff000000000000000000000000000000000000000000000000000000000000916149d06004969594828151948592016128a5565b01917f0100000000000000000000000000000000000000000000000000000000000000835260f01b1660018201527f02000000000000000000000000000000000000000000000000000000000000006003820152614a3782518093602086850191016128a5565b010190565b60207fffff00000000000000000000000000000000000000000000000000000000000091614a746004969594828151948592016128a5565b01917f0100000000000000000000000000000000000000000000000000000000000000835260f01b1660018201527f03000000000000000000000000000000000000000000000000000000000000006003820152614a3782518093602086850191016128a5565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c1615614b0a57565b60046040517fd7e6bcf8000000000000000000000000000000000000000000000000000000008152fdfea264697066735822122071ceee4651dfeca955c5ce3d78cc253b0b985e984e043c75fe91c7fa09b11db064736f6c63430008160033