0 txs
1 call
constructor
constructor((address router, address roleStore, address dataStore, address eventEmitter, address oracle, address orderVault, address orderHandler, address swapHandler, address externalHandler, address multichainVault) params, address _depositVault, address _depositHandler, address _withdrawalVault, address _withdrawalHandler, address _shiftVault, address _shiftHandler)
functions
dataStore
viewfunction dataStore() view returns (address)
depositHandler
viewfunction depositHandler() view returns (address)
depositVault
viewfunction depositVault() view returns (address)
digests
viewfunction digests(bytes32) view returns (bool)
eventEmitter
viewfunction eventEmitter() view returns (address)
externalHandler
viewfunction externalHandler() view returns (address)
multichainVault
viewfunction multichainVault() view returns (address)
oracle
viewfunction oracle() view returns (address)
orderHandler
viewfunction orderHandler() view returns (address)
orderVault
viewfunction orderVault() view returns (address)
roleStore
viewfunction roleStore() view returns (address)
router
viewfunction router() view returns (address)
shiftHandler
viewfunction shiftHandler() view returns (address)
shiftVault
viewfunction shiftVault() view returns (address)
swapHandler
viewfunction swapHandler() view returns (address)
withdrawalHandler
viewfunction withdrawalHandler() view returns (address)
withdrawalVault
viewfunction withdrawalVault() view returns (address)
createDeposit
nonpayablefunction createDeposit(tuple relayParams, address account, uint256 srcChainId, tuple transferRequests, tuple params) returns (bytes32)
createShift
nonpayablefunction createShift(tuple relayParams, address account, uint256 srcChainId, tuple transferRequests, tuple params) returns (bytes32)
createWithdrawal
nonpayablefunction createWithdrawal(tuple relayParams, address account, uint256 srcChainId, tuple transferRequests, tuple params) returns (bytes32)
multicall
payablefunction multicall(bytes[] data) payable returns (bytes[] results)
sendNativeToken
payablefunction sendNativeToken(address receiver, uint256 amount) payable
sendTokens
payablefunction sendTokens(address token, address receiver, uint256 amount) payable
sendWnt
payablefunction sendWnt(address receiver, uint256 amount) payable
events
TokenTransferReverted
event TokenTransferReverted(string reason, bytes returndata)
errors
DeadlinePassed
error DeadlinePassed(uint256 currentTimestamp, uint256 deadline)
DisabledFeature
error DisabledFeature(bytes32 key)
EmptyHoldingAddress
error EmptyHoldingAddress()
EmptyReceiver
error EmptyReceiver()
EmptyTokenTranferGasLimit
error EmptyTokenTranferGasLimit(address token)
InsufficientRelayFee
error InsufficientRelayFee(uint256 requiredRelayFee, uint256 availableFeeAmount)
InvalidDestinationChainId
error InvalidDestinationChainId(uint256 desChainId)
InvalidExternalCalls
error InvalidExternalCalls(uint256 sendTokensLength, uint256 sendAmountsLength)
InvalidPermitSpender
error InvalidPermitSpender(address spender, address expectedSpender)
InvalidSrcChainId
error InvalidSrcChainId(uint256 srcChainId)
InvalidTransferRequestsLength
error InvalidTransferRequestsLength()
InvalidUserDigest
error InvalidUserDigest(bytes32 digest)
MaxRelayFeeSwapForSubaccountExceeded
error MaxRelayFeeSwapForSubaccountExceeded(uint256 feeUsd, uint256 maxFeeUsd)
NonEmptyExternalCallsForSubaccountOrder
error NonEmptyExternalCallsForSubaccountOrder()
TokenPermitsNotAllowedForMultichain
error TokenPermitsNotAllowedForMultichain()
TokenTransferError
error TokenTransferError(address token, address receiver, uint256 amount)
UnexpectedRelayFeeToken
error UnexpectedRelayFeeToken(address feeToken, address expectedFeeToken)
UnsupportedRelayFeeToken
error UnsupportedRelayFeeToken(address feeToken, address expectedFeeToken)
creation bytecode
0x6102e060405234801561001157600080fd5b506040516152003803806152008339810160408190526100309161064b565b8680608001518160c001518260a001518360e001518461010001518c600001518d602001518e604001518f60600151828961006f61010360201b60201c565b6001600160a01b0390811660c05290811660a052908116608052600160005590811660e052908116610100529384166101209081529184166101405283166101605295821661018052509283166101a0529082166101c05281166101e0529201518216610200525095861661022052938516610240529184166102605283166102805282166102a052166102c05250610790565b60008080610110466102a2565b1561015c57507361ace8fba7b80aef8ed67f37cb60be00180872ad9273368165b2afb95fae8cec409efa59d5091f9875a5925073038479687b7bc7943313bffd524a4acc96b3f9be9150565b610165466102ca565b156101b1575073b16a1dbe755f992636705fdbb3a8678a657eb3ea927322dcc39b2ac376862183dd35a1664798dafc7da6925073ba4082f4961c8fb76231995c967cd9aa40f321b59150565b6101ba466102e8565b1561020657507342120a1417a091a52a8d4590e28fc6c0f61e56329273aced988c5b5fe3f11848c728d9a5f66cf34c9e73925073bbce89acdd86d0130bdc3f1fe37c3aedd79fc1f49150565b61020f46610306565b1561025b575073abcc9b596420a9e9172fd5938620e265a0f9df929273b539068872230f20456cf38ec52ef2f91af4ae499250738598806401a63ddf52473f1b3c55bc9e33e2d73b9150565b5073cd565435e0d2109fefde337a66491541df0d142092738ace64cea52b409f930f60b516f65197fad4b056925073c7739c195618d314c08e8626c98f8573e4e436349150565b600081610e3514806102b5575081610e34145b156102c257506001919050565b506000919050565b60008161014414806102b5575081610118036102c257506001919050565b600081612b7414806102b5575081610ab5036102c257506001919050565b60008160011480610317575081600a145b806103225750816019145b8061032d575081601e145b806103385750816038145b806103435750816064145b8061034e575081606d145b806103595750816089145b8061036457508160b7145b8061036f57508160e9145b8061037a57508160fa145b8061038657508161013a145b80610392575081610440145b8061039e57508161044d145b806103aa57508161046f145b806103b6575081610504145b806103c2575081610505145b806103ce5750816106c1145b806103da575081610725145b806103e6575081610729145b806103f25750816107f7145b806103fe575081610ec0145b8061040a57508161106a145b806104165750816118fe145b80610422575081612105145b8061042e5750816127d8145b8061043a575081614737145b80610446575081614739145b806104525750816162ef145b8061045e57508161868b145b8061046a57508161a1ef145b8061047657508161a455145b8061048257508161a4b1145b8061048e57508161a86a145b8061049a57508161e708145b806104a757508162013882145b806104b4575081620138d4145b806104c157508162013e31145b806104ce57508162014a34145b806104db5750816201b254145b806104e85750816203ade0145b806104f557508162066eee145b80610502575081620a045c145b8061050f57508162133e40145b8061051c575081625c2359145b806105295750816276adf1145b8061053657508162aa36a7145b8061054357508162aa37dc145b806105515750816301bf4933145b8061055f575081630426e649145b8061056d5750816305535072145b8061057b57508163059d7131145b8061058957508163075b3dcf145b80610597575081630a0c71fd145b806105a5575081630d3b745e145b806105b3575081633b4c8eb9145b806105c15750816352415249145b806105cf57508163bc1392a6145b806105de5750816412dbe91402145b806102b55750816414865d0f05036102c257506001919050565b919050565b60405161014081016001600160401b038111828210171561062e57634e487b7160e01b600052604160045260246000fd5b60405290565b80516001600160a01b03811681146105f857600080fd5b600080600080600080600087890361020081121561066857600080fd5b61014081121561067757600080fd5b506106806105fd565b61068989610634565b815261069760208a01610634565b60208201526106a860408a01610634565b60408201526106b960608a01610634565b60608201526106ca60808a01610634565b60808201526106db60a08a01610634565b60a08201526106ec60c08a01610634565b60c08201526106fd60e08a01610634565b60e082015261070f6101008a01610634565b6101008201526107226101208a01610634565b61012082015296506107376101408901610634565b95506107466101608901610634565b94506107556101808901610634565b93506107646101a08901610634565b92506107736101c08901610634565b91506107826101e08901610634565b905092959891949750929550565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e05161020051610220516102405161026051610280516102a0516102c05161488e610972600039600081816104de01526106ad01526000818161052501526106820152600081816101a501526108e30152600081816102eb01526108b80152600081816103ce01526116b101526000818161048a015261167101526000818161024e015281816121210152818161237a01528181612412015281816127e4015261289f0152600081816101e601528181611a260152611a820152600081816103660152610d3501526000818161039a0152610d0d0152600061045601526000818161040201528181611e02015281816120f9015281816123f0015261287e0152600081816102970152818161064d0152818161077d015281816108830152818161094701528181610c7501528181610cca015281816112800152818161163c01528181611fa2015281816120d101528181612358015281816123ce015261285d01526000818161055901528181610ba401526117fc0152600061021a01526000818161033201528181610d9401528181610e3901528181611cc50152611e230152600050506000505060006122d7015261488e6000f3fe60806040526004361061011b5760003560e01c806301ac429314610120578063054f490a146101655780632c2f3c07146101935780632e944bd6146101d45780634a4a7b0414610208578063528a65f41461023c57806353ead2d314610270578063660d0d671461028557806368b03b1d146102b957806369d42148146102d95780637d39aaf11461030d5780637dc0d1d0146103205780638a53aaac1461035457806393845e46146103885780639c8b2cfb146103bc5780639ff78c30146103f0578063ac9650d814610424578063b584830514610444578063d7cd394914610478578063e43ce790146104ac578063e65c9ae1146104cc578063e6d66ac814610500578063ece9296b14610513578063f887ea4014610547575b600080fd5b34801561012c57600080fd5b5061015061013b366004612e99565b60016020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b34801561017157600080fd5b50610185610180366004612f02565b61057b565b60405190815260200161015c565b34801561019f57600080fd5b506101c77f000000000000000000000000000000000000000000000000000000000000000081565b60405161015c9190612fc5565b3480156101e057600080fd5b506101c77f000000000000000000000000000000000000000000000000000000000000000081565b34801561021457600080fd5b506101c77f000000000000000000000000000000000000000000000000000000000000000081565b34801561024857600080fd5b506101c77f000000000000000000000000000000000000000000000000000000000000000081565b61028361027e366004612fd9565b610767565b005b34801561029157600080fd5b506101c77f000000000000000000000000000000000000000000000000000000000000000081565b3480156102c557600080fd5b506101856102d4366004613005565b6107b1565b3480156102e557600080fd5b506101c77f000000000000000000000000000000000000000000000000000000000000000081565b61028361031b366004612fd9565b610931565b34801561032c57600080fd5b506101c77f000000000000000000000000000000000000000000000000000000000000000081565b34801561036057600080fd5b506101c77f000000000000000000000000000000000000000000000000000000000000000081565b34801561039457600080fd5b506101c77f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c857600080fd5b506101c77f000000000000000000000000000000000000000000000000000000000000000081565b3480156103fc57600080fd5b506101c77f000000000000000000000000000000000000000000000000000000000000000081565b6104376104323660046130ac565b61096d565b60405161015c91906131cd565b34801561045057600080fd5b506101c77f000000000000000000000000000000000000000000000000000000000000000081565b34801561048457600080fd5b506101c77f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b857600080fd5b506101856104c73660046131e0565b610a81565b3480156104d857600080fd5b506101c77f000000000000000000000000000000000000000000000000000000000000000081565b61028361050e366004613287565b610b5c565b34801561051f57600080fd5b506101c77f000000000000000000000000000000000000000000000000000000000000000081565b34801561055357600080fd5b506101c77f000000000000000000000000000000000000000000000000000000000000000081565b6000610585610c12565b8585856000805a9050610596610c70565b60006105a0610ca4565b90506105af8187878787610d6a565b600073c72390b4b667a0cb378b2dd85cfbf7bd61593b1063ba953c288e8c8c6040518463ffffffff1660e01b81526004016105ec939291906138e5565b602060405180830381865af4158015610609573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062d919061396e565b905061063b8d8d838e610eb1565b6106468c8b8d610ff3565b60006106717f0000000000000000000000000000000000000000000000000000000000000000611105565b90506106ab6001600160a01b0382167f000000000000000000000000000000000000000000000000000000000000000060c08d01356111b2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166322dfcf4c8e8e8d6040518463ffffffff1660e01b81526004016106fb93929190613987565b6020604051808303816000875af115801561071a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073e919061396e565b9850505061074e81838787611208565b50505050505061075e6001600055565b95945050505050565b61076f610c12565b61077882611436565b6107a37f00000000000000000000000000000000000000000000000000000000000000008383611460565b6107ad6001600055565b5050565b60006107bb610c12565b8585856000805a90506107cc610c70565b60006107d6610ca4565b90506107e58187878787610d6a565b600073c72390b4b667a0cb378b2dd85cfbf7bd61593b1063cabd70e68e8c8c6040518463ffffffff1660e01b815260040161082293929190613a14565b602060405180830381865af415801561083f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610863919061396e565b90506108718d8d838e610eb1565b61087c8c8b8d610ff3565b60006108a77f0000000000000000000000000000000000000000000000000000000000000000611105565b90506108e16001600160a01b0382167f000000000000000000000000000000000000000000000000000000000000000060808d01356111b2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166341e6fad98e8e8d6040518463ffffffff1660e01b81526004016106fb93929190613b7a565b610939610c12565b61094282611436565b6107a37f0000000000000000000000000000000000000000000000000000000000000000838361156c565b6060816001600160401b0381111561098757610987613ccd565b6040519080825280602002602001820160405280156109ba57816020015b60608152602001906001900390816109a55790505b50905060005b82811015610a7957600080308686858181106109de576109de613ce3565b90506020028101906109f09190613cf9565b6040516109fe929190613d3f565b600060405180830381855af49150503d8060008114610a39576040519150601f19603f3d011682016040523d82523d6000602084013e610a3e565b606091505b509150915081610a5157610a51816115ef565b80848481518110610a6457610a64613ce3565b602090810291909101015250506001016109c0565b505b92915050565b6000610a8b610c12565b8585856000805a9050610a9c610c70565b6000610aa6610ca4565b9050610ab58187878787610d6a565b600073c72390b4b667a0cb378b2dd85cfbf7bd61593b1063c02b481b8e8c8c6040518463ffffffff1660e01b8152600401610af293929190613d65565b602060405180830381865af4158015610b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b33919061396e565b9050610b418d8d838e610eb1565b610b4d8c8c8c8c611628565b97505061074e81838787611208565b610b64610c12565b610b6d82611436565b6040516303704f0f60e31b81526001600160a01b0384811660048301523360248301819052848216604484015260648301849052917f000000000000000000000000000000000000000000000000000000000000000090911690631b82787890608401600060405180830381600087803b158015610bea57600080fd5b505af1158015610bfe573d6000803e3d6000fd5b5050505050610c0d6001600055565b505050565b600260005403610c695760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c0060448201526064015b60405180910390fd5b6002600055565b610ca27f0000000000000000000000000000000000000000000000000000000000000000610c9d30611739565b6117c2565b565b6040805160808101825260008082526020820181905291810182905260608101919091527f00000000000000000000000000000000000000000000000000000000000000006000610cf482611105565b604080516080810182526001600160a01b0394851681527f0000000000000000000000000000000000000000000000000000000000000000851660208201527f00000000000000000000000000000000000000000000000000000000000000008516918101919091529216606083015250919050565b610d748480613ee6565b610d7d90614041565b6040516331e999fd60e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c7a667f490610dc99084906004016141d4565b600060405180830381600087803b158015610de357600080fd5b505af1158015610df7573d6000803e3d6000fd5b50610e129250610e0d915050604087018761422b565b6117ed565b610e2a8484610e246020890189614274565b8561193e565b610e378686868686611b57565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031662ccf1556040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610e9157600080fd5b505af1158015610ea5573d6000803e3d6000fd5b50505050505050505050565b610ed38160e086013560a0870135610ecc604089018961422b565b9050611f5e565b604051638a3b3d6f60e01b81526004810182905260009073c72390b4b667a0cb378b2dd85cfbf7bd61593b1090638a3b3d6f90602401602060405180830381865af4158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a919061396e565b90506000610f72828560405161190160f01b8152600281019290925260228201526042902090565b9050610f7d81612060565b73c72390b4b667a0cb378b2dd85cfbf7bd61593b1063bead67858383610fa660c08b018b613cf9565b8a6040518663ffffffff1660e01b8152600401610fc795949392919061428a565b60006040518083038186803b158015610fdf57600080fd5b505af4158015610ea5573d6000803e3d6000fd5b61100060208301836142e1565b905061100c83806142e1565b9050141580611034575061102360408301836142e1565b905061102f83806142e1565b905014155b156110525760405163b0731c3f60e01b815260040160405180910390fd5b60005b61105f83806142e1565b90508110156110ff576110f78461107685806142e1565b8481811061108657611086613ce3565b905060200201602081019061109b919061432a565b6110a860208701876142e1565b858181106110b8576110b8613ce3565b90506020020160208101906110cd919061432a565b6110da60408801886142e1565b868181106110ea576110ea613ce3565b90506020020135866120b1565b600101611055565b50505050565b6000816001600160a01b03166321f8a72160405160200161113d9060208082526003908201526215d39560ea1b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b815260040161117191815260200190565b602060405180830381865afa15801561118e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7b9190614347565b610c0d8363a9059cbb60e01b84846040516024016111d1929190614364565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526121c3565b60008085606001516001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161123b9190612fc5565b602060405180830381865afa158015611258573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127c919061396e565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ae1cfca6112b633612298565b6040518263ffffffff1660e01b81526004016112d491815260200190565b602060405180830381865afa1580156112f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611315919061437d565b61140c576000611324336122d3565b15905080156113d35786516060880151604051630e22a74960e31b81526001600160a01b0392831660048201529116602482015260448101879052366064820152608481018390527349eaeafa626011ede0b9852e567dfcf8b62aba88906371153a489060a401602060405180830381865af41580156113a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113cc919061396e565b925061140a565b6113db61231e565b925081831115611402578282604051639cd7629560e01b8152600401610c6092919061439a565b61140a612327565b505b61141682826143be565b9050801561142e5761142e8660600151858386612353565b505050505050565b6001600160a01b03811661145d5760405163d551823d60e01b815260040160405180910390fd5b50565b8060000361146d57505050565b61147682611436565b6000836001600160a01b031663bd02d0f56040516020016114c8906020808252601f908201527f4e41544956455f544f4b454e5f5452414e534645525f4741535f4c494d495400604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016114fc91815260200190565b602060405180830381865afa158015611519573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061153d919061396e565b90506000806000806000868887f19050801561155a575050505050565b61156585858561156c565b5050505050565b8060000361157957505050565b61158282611436565b600061158d84611105565b9050806001600160a01b031663d0e30db0836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156115ca57600080fd5b505af11580156115de573d6000803e3d6000fd5b50505050506110ff84828585612481565b6000806115fb836126cb565b91509150801561161f578160405162461bcd60e51b8152600401610c6091906143d1565b610c0d8361275b565b6000611635858486610ff3565b60006116607f0000000000000000000000000000000000000000000000000000000000000000611105565b905061169a6001600160a01b0382167f000000000000000000000000000000000000000000000000000000000000000060608601356111b2565b604051631c866fc960e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690637219bf24906116ea908990899088906004016143e4565b6020604051808303816000875af1158015611709573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172d919061396e565b9150505b949350505050565b60006040516020016117779060208082526018908201527711d054d31154d4d7d191505515549157d11254d05093115160421b604082015260600190565b60408051601f198184030181528282528051602091820120908301526001600160a01b038416908201526060015b604051602081830303815290604052805190602001209050919050565b6117cc8282612764565b156107ad5760405163dd70e0c960e01b815260048101829052602401610c60565b60008190036117fa575050565b7f000000000000000000000000000000000000000000000000000000000000000060005b828110156110ff57600084848381811061183a5761183a613ce3565b90506101000201803603810190611851919061455f565b9050826001600160a01b031681602001516001600160a01b03161461189157806020015183604051633c0ac19960e01b8152600401610c609291906145f2565b60e0810151815160208301516040808501516060860151608087015160a088015160c0890151945163d505accf60e01b81526001600160a01b03978816600482015295871660248701526044860193909352606485019190915260ff16608484015260a483015260c482015291169063d505accf9060e401600060405180830381600087803b15801561192357600080fd5b505af1925050508015611934575060015b505060010161181e565b61194b60408301836142e1565b1590506110ff578015611971576040516328f773e960e01b815260040160405180910390fd5b61197b82806142e1565b159050806119a2575061199160208301836142e1565b905061199d83806142e1565b905014155b156119db576119b182806142e1565b90506119c060208401846142e1565b60405163ec7fd38560e01b8152610c6093925060040161439a565b60005b6119e883806142e1565b9050811015611a7757611a6f856119ff85806142e1565b84818110611a0f57611a0f613ce3565b9050602002016020810190611a24919061432a565b7f0000000000000000000000000000000000000000000000000000000000000000611a5260208801886142e1565b86818110611a6257611a62613ce3565b90506020020135886120b1565b6001016119de565b506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663d59922b0611ab460408501856142e1565b611ac160608701876142e1565b611ace60808901896142e1565b611adb60a08b018b6142e1565b6040518963ffffffff1660e01b8152600401611afe98979695949392919061460c565b600060405180830381600087803b158015611b1857600080fd5b505af1158015611b2c573d6000803e3d6000fd5b505050506110ff8484848060800190611b4591906142e1565b611b5260a08801886142e1565b6127d7565b611b60336122d3565b8015611b89575084606001516001600160a01b0316611b7d61295c565b6001600160a01b031614155b15611bb657611b9661295c565b8560600151604051630d0fcc0b60e01b8152600401610c609291906145f2565b611bc36060850185613ee6565b611bd19060408101906142e1565b159050611ea3578015611daa57600085600001516001600160a01b031663bd02d0f5604051602001611c429060208082526025908201527f4d41585f52454c41595f4645455f535741505f5553445f464f525f535542414360408201526410d3d5539560da1b606082015260800190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b8152600401611c7691815260200190565b602060405180830381865afa158015611c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb7919061396e565b905060006001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016635dcf7194611cf76060890189613ee6565b611d0590602081019061432a565b6040518263ffffffff1660e01b8152600401611d219190612fc5565b6040805180830381865afa158015611d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6191906146b8565b60200151611d726060880188613ee6565b60200135611d809190614708565b905081811115611da7578082604051631808e37f60e31b8152600401610c6092919061439a565b50505b611de583611dbb6060870187613ee6565b611dc990602081019061432a565b6020880151611ddb6060890189613ee6565b60200135866120b1565b73c72390b4b667a0cb378b2dd85cfbf7bd61593b1063cbb114e7867f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611e4f60608a018a613ee6565b6040518563ffffffff1660e01b8152600401611e6e949392919061471f565b60006040518083038186803b158015611e8657600080fd5b505af4158015611e9a573d6000803e3d6000fd5b50505050611565565b6060808601516001600160a01b031690611ebf90860186613ee6565b611ecd90602081019061432a565b6001600160a01b031603611f2357611ee86060850185613ee6565b6020013515611f1e57611f1e83611f026060870187613ee6565b611f1090602081019061432a565b30611ddb6060890189613ee6565b611565565b611f306060850185613ee6565b611f3e90602081019061432a565b85606001516040516374a488a760e11b8152600401610c609291906145f2565b468314611f81576040516330ddda8b60e21b815260048101849052602401610c60565b8015611fa057604051637344d98160e01b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316637ae1cfca611fd886612968565b6040518263ffffffff1660e01b8152600401611ff691815260200190565b602060405180830381865afa158015612013573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612037919061437d565b61205757604051632c9bcbdd60e01b815260048101859052602401610c60565b6110ff826129cd565b60008181526001602052604090205460ff161561209357604051630820e04560e11b815260048101829052602401610c60565b6000908152600160208190526040909120805460ff19169091179055565b6120ba83611436565b6040516313bc4d6960e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301527f00000000000000000000000000000000000000000000000000000000000000008116604483015280861660648301528087166084830152841660a482015260c4810183905260e48101829052731158e639da58fd104908343ef3f42a79d54d2918906313bc4d69906101040160006040518083038186803b1580156121a457600080fd5b505af41580156121b8573d6000803e3d6000fd5b505050505050505050565b6000612218826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166129f29092919063ffffffff16565b9050805160001480612239575080806020019051810190612239919061437d565b610c0d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c60565b6000604051602001611777906020808252601590820152741254d7d49153105657d1915157d15610d315511151605a1b604082015260600190565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361231657506001919050565b506000919050565b601f1936013590565b610ca236604719013560601c61233b61231e565b61234361295c565b6001600160a01b03169190612a01565b61239f7f0000000000000000000000000000000000000000000000000000000000000000857f000000000000000000000000000000000000000000000000000000000000000085612481565b6040516315ff6d2d60e01b8152731158e639da58fd104908343ef3f42a79d54d2918906315ff6d2d90612440907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000907f0000000000000000000000000000000000000000000000000000000000000000908a908a908990600401614779565b602060405180830381865af415801561245d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611565919061396e565b80156110ff5761249082611436565b6000846001600160a01b031663bd02d0f56124aa86612a50565b6040518263ffffffff1660e01b81526004016124c891815260200190565b602060405180830381865afa1580156124e5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612509919061396e565b90508060000361252e5783604051634fe14bfd60e11b8152600401610c609190612fc5565b600061253c85858585612a8e565b509050801561254c5750506110ff565b6000866001600160a01b03166321f8a721604051602001612590906020808252600f908201526e484f4c44494e475f4144445245535360881b604082015260600190565b604051602081830303815290604052805190602001206040518263ffffffff1660e01b81526004016125c491815260200190565b602060405180830381865afa1580156125e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126059190614347565b90506001600160a01b03811661262e57604051633a6de2f560e21b815260040160405180910390fd5b60008061263d88848888612a8e565b9150915081156126515750505050506110ff565b600061265c826126cb565b5090507fc9f14d9a0a9b46470c7c0b6c508f8283abaab7f795f153953c58cd4250824dae81836040516126909291906147b4565b60405180910390a160405163012f3b8f60e71b81526001600160a01b03808b1660048301528916602482015260448101889052606401610c60565b606060006044835110156126f2575050604080516020810190915260008082529092909150565b60006126ff846020015190565b90506307b9e43360e51b6001600160e01b031982160161273e576004840193508380602001905181019061273391906147d9565b946001945092505050565b600060405180602001604052806000815250909250925050915091565b80518060208301fd5b604051633d70e7e560e11b8152600481018290526000906001600160a01b03841690637ae1cfca90602401602060405180830381865afa1580156127ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d0919061437d565b9392505050565b60005b81811015612953577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031683838381811061281e5761281e613ce3565b9050602002016020810190612833919061432a565b6001600160a01b03160361294b57731158e639da58fd104908343ef3f42a79d54d29186315ff6d2d7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008989878181106128d0576128d0613ce3565b90506020020160208101906128e5919061432a565b8c8c6040518763ffffffff1660e01b815260040161290896959493929190614779565b602060405180830381865af4158015612925573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612949919061396e565b505b6001016127da565b50505050505050565b60331936013560601c90565b60006040516020016129a5906020808252601790820152761254d7d4d490d7d0d210525397d25117d1539050931151604a1b604082015260600190565b60405160208183030381529060405280519060200120826040516020016117a592919061439a565b8042111561145d57428160405163041f95d160e51b8152600401610c6092919061439a565b60606117318484600085612bfd565b80600003612a0e57505050565b6001600160a01b03831673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee14612a4657610c0d6001600160a01b03841683836111b2565b610c0d8282612cd8565b6000604051602001611777906020808252601890820152771513d2d15397d514905394d1915497d1d054d7d31253525560421b604082015260600190565b60006060600063a9059cbb60e01b8686604051602401612aaf929190614364565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050509050600080886001600160a01b03168684604051612b009190614846565b60006040518083038160008787f1925050503d8060008114612b3e576040519150601f19603f3d011682016040523d82523d6000602084013e612b43565b606091505b50915091508115612beb578051600003612ba857612b69896001600160a01b0316612dee565b612ba85760006040518060400160405280601481526020017310d85b1b081d1bc81b9bdb8b58dbdb9d1c9858dd60621b81525094509450505050612bf4565b60008151118015612bca575080806020019051810190612bc8919061437d565b155b15612bdd57600094509250612bf4915050565b600194509250612bf4915050565b60009450925050505b94509492505050565b606082471015612c5e5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610c60565b600080866001600160a01b03168587604051612c7a9190614846565b60006040518083038185875af1925050503d8060008114612cb7576040519150601f19603f3d011682016040523d82523d6000602084013e612cbc565b606091505b5091509150612ccd87838387612dfd565b979650505050505050565b80471015612d285760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c60565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612d75576040519150601f19603f3d011682016040523d82523d6000602084013e612d7a565b606091505b5050905080610c0d5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c20726044820152791958da5c1a595b9d081b585e481a185d99481c995d995c9d195960321b6064820152608401610c60565b6001600160a01b03163b151590565b60608315612e6a578251600003612e6357612e1785612dee565b612e635760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c60565b5081611731565b6117318383815115612e7f5781518083602001fd5b8060405162461bcd60e51b8152600401610c6091906143d1565b600060208284031215612eab57600080fd5b5035919050565b60006101008284031215612ec557600080fd5b50919050565b6001600160a01b038116811461145d57600080fd5b8035612eeb81612ecb565b919050565b600060608284031215612ec557600080fd5b600080600080600060a08688031215612f1a57600080fd5b85356001600160401b03811115612f3057600080fd5b612f3c88828901612eb2565b9550506020860135612f4d81612ecb565b93506040860135925060608601356001600160401b03811115612f6f57600080fd5b612f7b88828901612ef0565b92505060808601356001600160401b03811115612f9757600080fd5b86016101208189031215612faa57600080fd5b809150509295509295909350565b6001600160a01b03169052565b6001600160a01b0391909116815260200190565b60008060408385031215612fec57600080fd5b8235612ff781612ecb565b946020939093013593505050565b600080600080600060a0868803121561301d57600080fd5b85356001600160401b0381111561303357600080fd5b61303f88828901612eb2565b955050602086013561305081612ecb565b93506040860135925060608601356001600160401b0381111561307257600080fd5b61307e88828901612ef0565b92505060808601356001600160401b0381111561309a57600080fd5b860160e08189031215612faa57600080fd5b600080602083850312156130bf57600080fd5b82356001600160401b038111156130d557600080fd5b8301601f810185136130e657600080fd5b80356001600160401b038111156130fc57600080fd5b8560208260051b840101111561311157600080fd5b6020919091019590945092505050565b60005b8381101561313c578181015183820152602001613124565b50506000910152565b6000815180845261315d816020860160208601613121565b601f01601f19169290920160200192915050565b600082825180855260208501945060208160051b8301016020850160005b838110156131c157601f198584030188526131ab838351613145565b602098890198909350919091019060010161318f565b50909695505050505050565b6020815260006127d06020830184613171565b600080600080600060a086880312156131f857600080fd5b85356001600160401b0381111561320e57600080fd5b61321a88828901612eb2565b955050602086013561322b81612ecb565b93506040860135925060608601356001600160401b0381111561324d57600080fd5b61325988828901612ef0565b92505060808601356001600160401b0381111561327557600080fd5b860160c08189031215612faa57600080fd5b60008060006060848603121561329c57600080fd5b83356132a781612ecb565b925060208401356132b781612ecb565b929592945050506040919091013590565b60008235605e198336030181126132de57600080fd5b90910192915050565b6000808335601e198436030181126132fe57600080fd5b83016020810192503590506001600160401b0381111561331d57600080fd5b8060051b360382131561332f57600080fd5b9250929050565b81835260208301925060008160005b8481101561337657813561335881612ecb565b6001600160a01b031686526020958601959190910190600101613345565b5093949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e198436030181126133c057600080fd5b83016020810192503590506001600160401b038111156133df57600080fd5b80360382131561332f57600080fd5b60008383855260208501945060208460051b8201018360005b868110156131c157838303601f1901885261342282876133a9565b61342d858284613380565b60209a8b019a90955093909301925050600101613407565b600061345182836132e7565b60608552613463606086018284613336565b91505061347360208401846132e7565b8583036020870152613486838284613336565b9250505061349760408401846132e7565b85830360408701526134aa8382846133ee565b9695505050505050565b6000823560be198336030181126132de57600080fd5b81835260006001600160fb1b038311156134e357600080fd5b8260051b80836020870137939093016020019392505050565b600061350882836132e7565b60c0855261351a60c086018284613336565b91505061352a60208401846132e7565b858303602087015261353d8382846134ca565b9250505061354e60408401846132e7565b8583036040870152613561838284613336565b9250505061357260608401846132e7565b85830360608701526135858382846133ee565b9250505061359660808401846132e7565b85830360808701526135a9838284613336565b925050506135ba60a08401846132e7565b85830360a08701526134aa838284613336565b6000808335601e198436030181126135e457600080fd5b83016020810192503590506001600160401b0381111561360357600080fd5b8060081b360382131561332f57600080fd5b803560ff81168114612eeb57600080fd5b81835260208301925060008160005b8481101561337657813561364881612ecb565b6001600160a01b03168652602082013561366181612ecb565b6001600160a01b03166020870152604082810135908701526060808301359087015261368f60808301613615565b60ff16608087015260a0828101359087015260c080830135908701526136b760e08301612ee0565b6136c460e0880182612fb8565b50610100958601959190910190600101613635565b600081356136e681612ecb565b6001600160a01b031683526020828101359084015261370860408301836132e7565b6060604086015261075e606086018284613336565b600061372982836132c8565b610100845261373c610100850182613445565b905061374b60208401846134b4565b848203602086015261375d82826134fc565b91505061376d60408401846135cd565b8583036040870152613780838284613626565b9250505061379160608401846132c8565b84820360608601526137a382826136d9565b6080858101359087015260a0808601359087015291506137c8905060c08401846133a9565b85830360c08701526137db838284613380565b60e095860135969095019590955250919392505050565b60006137fe82836132e7565b60608552613810606086018284613336565b91505061382060208401846132e7565b8583036020870152613833838284613336565b9250505061384460408401846132e7565b85830360408701526134aa8382846134ca565b803561386281612ecb565b6001600160a01b03168252602081013561387b81612ecb565b6001600160a01b03166020830152604081013561389781612ecb565b6001600160a01b0316604083015260608101356138b381612ecb565b6001600160a01b0316606083015260808101356138cf81612ecb565b6001600160a01b03166080929092019190915250565b6060815260006138f8606083018661371d565b828103602084015261390a81866137f2565b9050828103604084015261391e8185613857565b60a0848101359082015260c0808501359082015260e0808501359082015261394a6101008501856132e7565b610120610100840152613962610120840182846134ca565b98975050505050505050565b60006020828403121561398057600080fd5b5051919050565b6001600160a01b0384168152602081018390526060604082018190526139af90820183613857565b60a08201356101008281019190915260c083013561012083015260e08301356101408301526000906139e3908401846132e7565b610120610160850152612ccd610180850182846134ca565b801515811461145d57600080fd5b8035612eeb816139fb565b606081526000613a27606083018661371d565b8281036020840152613a3981866137f2565b90508281036040840152613a4d84856134b4565b60e082528035613a5c81612ecb565b6001600160a01b031660e08301526020810135613a7881612ecb565b6001600160a01b03166101008301526040810135613a9581612ecb565b613aa3610120840182612fb8565b50613ab060608201612ee0565b613abe610140840182612fb8565b50613acc60808201826132e7565b60c0610160850152613ae36101a085018284613336565b915050613af360a08301836132e7565b84830360df19016101808601529250613b0d828483613336565b60208881013590860152604080890135908601529250613b3291505060608601613a09565b151560608301526080858101359083015260a08086013590830152613b5a60c08601866132e7565b83830360c0850152613b6d8382846134ca565b9998505050505050505050565b6001600160a01b038416815260208101839052606060408201526000613ba083806134b4565b60e060608401528035613bb281612ecb565b6001600160a01b03166101408401526020810135613bcf81612ecb565b6001600160a01b03166101608401526040810135613bec81612ecb565b613bfa610180850182612fb8565b50613c0760608201612ee0565b613c156101a0850182612fb8565b50613c2360808201826132e7565b60c06101c0860152613c3a61020086018284613336565b915050613c4a60a08301836132e7565b85830361013f19016101e08701529250613c65828483613336565b60208701356080870152604087013560a08701529250613c8a91505060608501613a09565b80151560c085015250608084013560e084015260a0840135610100840152613cb560c08501856132e7565b848303605f19016101208601526139628382846134ca565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112613d1057600080fd5b8301803591506001600160401b03821115613d2a57600080fd5b60200191503681900382131561332f57600080fd5b8183823760009101908152919050565b6000823560fe198336030181126132de57600080fd5b606081526000613d78606083018661371d565b8281036020840152613d8a81866137f2565b90508281036040840152613d9e8485613d4f565b60c082528035613dad81612ecb565b613dba60c0840182612fb8565b50613dc760208201612ee0565b613dd460e0840182612fb8565b50613de160408201612ee0565b613def610100840182612fb8565b50613dfc60608201612ee0565b613e0a610120840182612fb8565b50613e1760808201612ee0565b613e25610140840182612fb8565b50613e3260a08201612ee0565b613e40610160840182612fb8565b50613e4e60c08201826132e7565b610100610180850152613e666101c085018284613336565b915050613e7660e08301836132e7565b84830360bf19016101a08601529250613e90828483613336565b602088810135908601529250613eab91505060408601613a09565b151560408301526060858101359083015260808086013590830152613ed360a08601866132e7565b83830360a0850152613b6d8382846134ca565b60008235605e19833603018112613efc57600080fd5b9190910192915050565b604051606081016001600160401b0381118282101715613f2857613f28613ccd565b60405290565b60405161010081016001600160401b0381118282101715613f2857613f28613ccd565b604051601f8201601f191681016001600160401b0381118282101715613f7957613f79613ccd565b604052919050565b60006001600160401b03821115613f9a57613f9a613ccd565b5060051b60200190565b600082601f830112613fb557600080fd5b8135613fc8613fc382613f81565b613f51565b8082825260208201915060208360051b860101925085831115613fea57600080fd5b602085015b8381101561401057803561400281612ecb565b835260209283019201613fef565b5095945050505050565b60006001600160401b0382111561403357614033613ccd565b50601f01601f191660200190565b60006060823603121561405357600080fd5b61405b613f06565b82356001600160401b0381111561407157600080fd5b61407d36828601613fa4565b82525060208301356001600160401b0381111561409957600080fd5b6140a536828601613fa4565b60208301525060408301356001600160401b038111156140c457600080fd5b830136601f8201126140d557600080fd5b80356140e3613fc382613f81565b8082825260208201915060208360051b85010192503683111561410557600080fd5b602084015b838110156141895780356001600160401b0381111561412857600080fd5b850136603f82011261413957600080fd5b602081013561414a613fc38261401a565b81815236604084840101111561415f57600080fd5b8160408401602083013760006020838301015280865250505060208301925060208101905061410a565b5060408501525091949350505050565b600081518084526020840193506020830160005b828110156133765781516001600160a01b03168652602095860195909101906001016141ad565b6020815260008251606060208401526141f06080840182614199565b90506020840151601f1984830301604085015261420d8282614199565b9150506040840151601f1984830301606085015261075e8282613171565b6000808335601e1984360301811261424257600080fd5b8301803591506001600160401b0382111561425c57600080fd5b6020019150600881901b360382131561332f57600080fd5b6000823560be19833603018112613efc57600080fd5b85815284602082015260a0604082015260006142aa60a083018587613380565b6001600160a01b0393909316606083015250808203608090910152600481526318d85b1b60e21b6020820152604001949350505050565b6000808335601e198436030181126142f857600080fd5b8301803591506001600160401b0382111561431257600080fd5b6020019150600581901b360382131561332f57600080fd5b60006020828403121561433c57600080fd5b81356127d081612ecb565b60006020828403121561435957600080fd5b81516127d081612ecb565b6001600160a01b03929092168252602082015260400190565b60006020828403121561438f57600080fd5b81516127d0816139fb565b918252602082015260400190565b634e487b7160e01b600052601160045260246000fd5b81810381811115610a7b57610a7b6143a8565b6020815260006127d06020830184613145565b6001600160a01b03841681526020810183905260606040820152600061440a8380613d4f565b60c06060840152803561441c81612ecb565b61442a610120850182612fb8565b5061443760208201612ee0565b614445610140850182612fb8565b5061445260408201612ee0565b614460610160850182612fb8565b5061446d60608201612ee0565b61447b610180850182612fb8565b5061448860808201612ee0565b6144966101a0850182612fb8565b506144a360a08201612ee0565b6144b16101c0850182612fb8565b506144bf60c08201826132e7565b6101006101e08601526144d761022086018284613336565b9150506144e760e08301836132e7565b85830361011f19016102008701529250614502828483613336565b60208701356080870152925061451d91505060408501613a09565b80151560a085015250606084013560c0840152608084013560e084015261454760a08501856132e7565b848303605f19016101008601526139628382846134ca565b600061010082840312801561457357600080fd5b50600061457e613f2e565b833561458981612ecb565b815261459760208501612ee0565b602082015260408481013590820152606080850135908201526145bc60808501613615565b608082015260a0848101359082015260c08085013590820181905291506145e560e08501612ee0565b60e0820152949350505050565b6001600160a01b0392831681529116602082015260400190565b608081526000614620608083018a8c613336565b82810360208401528088825260208201905060208960051b8301018a60005b8b81101561467d57848303601f1901845261465a828e6133a9565b614665858284613380565b6020968701969095509390930192505060010161463f565b5050848103604086015261469281898b613336565b9250505082810360608401526146a9818587613336565b9b9a5050505050505050505050565b600060408284031280156146cb57600080fd5b50604080519081016001600160401b03811182821017156146ee576146ee613ccd565b604052825181526020928301519281019290925250919050565b8082028115828204841417610a7b57610a7b6143a8565b84516001600160a01b0390811682526020808701518216908301526040808701518216908301526060808701518216908301528481166080830152831660a082015260e060c082018190526000906134aa908301846136d9565b6001600160a01b039687168152948616602086015292851660408501529084166060840152909216608082015260a081019190915260c00190565b6040815260006147c76040830185613145565b828103602084015261075e8185613145565b6000602082840312156147eb57600080fd5b81516001600160401b0381111561480157600080fd5b8201601f8101841361481257600080fd5b8051614820613fc38261401a565b81815285602083850101111561483557600080fd5b61075e826020830160208601613121565b60008251613efc81846020870161312156fea264697066735822122055e09ad9cabdb58477be4e3841d76b4045182e082c8694041dd0384327addee764736f6c634300081d00330000000000000000000000007452c558d45f8afc8c83dae62c3f8a5be19c71f60000000000000000000000003c3d99fd298f679dbc2cecd132b4ec4d0f5e6e72000000000000000000000000fd70de6b91282d8017aa4e741e9ae325cab992d8000000000000000000000000c8ee91a54287db53897056e12d9819156d3822fb0000000000000000000000007f01614ca5198ec979b1aad1daf0de7e0a215bdf00000000000000000000000031ef83a530fde1b38ee9a18093a333d8bbbc40d500000000000000000000000004315e233c1c6ffa61080b76e29d5e8a1f7b4a35000000000000000000000000db2ab9566732710d02b23325f79a8832118b97c5000000000000000000000000389cef541397e872dc04421f166b5bc2e0b374a5000000000000000000000000ceaadfaf6a8c489b250e407987877c5fdfcdbe6e000000000000000000000000f89e77e8dc11691c9e8757e84aafbcd8a67d7a55000000000000000000000000563e8cdb5ba929039c2bb693b78ce12dc0aafada0000000000000000000000000628d46b5d145f183adb6ef1f2c97ed1c4701c550000000000000000000000001ec018d2b6acca20a0bedb86450b7e27d1d8355b000000000000000000000000fe99609c4aa83ff6816b64563bdffd7fa68753ab000000000000000000000000763fd06baf6bbce1a06ab94c6dfd13813e517938