0 txs
42 calls
constructor
constructor()
functions
getCollateral
viewfunction getCollateral() view returns (address collateral_)
getPermit2Address
viewfunction getPermit2Address() view returns (address permit2Address_)
getSwapper
viewfunction getSwapper() view returns (address swapper_)
getVault
viewfunction getVault() view returns (address vault_)
getWrappedNativeToken
viewfunction getWrappedNativeToken() view returns (address wrappedNativeToken_)
owner
viewfunction owner() view returns (address)
initialize
nonpayablefunction initialize(address owner_, address vault_, address collateral_, address swapper_, address orderAnnouncementModule_, address permit2_, address wrappedNativeToken_)
renounceOwnership
nonpayablefunction renounceOwnership()
rescueFunds
nonpayablefunction rescueFunds(address token_, address to_, uint256 amount_)
setCollateral
nonpayablefunction setCollateral(address newCollateral_)
setSwapper
nonpayablefunction setSwapper(address newSwapper_)
setVault
nonpayablefunction setVault(address vault_)
setWrappedNativeToken
nonpayablefunction setWrappedNativeToken(address wrappedNativeToken_)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unlimitedApproveOrderAnnouncementModule
nonpayablefunction unlimitedApproveOrderAnnouncementModule()
zap
payablefunction zap(tuple swapStruct_, tuple announcementData_) payable
events
Initialized
event Initialized(uint64 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
ZapCompleted
event ZapCompleted(address indexed sender, uint8 indexed orderType)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
AmountReceivedForMarginTooSmall
error AmountReceivedForMarginTooSmall(uint256 receivedAmount, uint256 minMargin)
AmountsAfterPermit2TransferMismatch
error AmountsAfterPermit2TransferMismatch(address token, uint256 expectedAmount, uint256 actualAmount)
FailedInnerCall
error FailedInnerCall()
InvalidInitialization
error InvalidInitialization()
InvalidNativeTokenTransferEncoding
error InvalidNativeTokenTransferEncoding()
InvalidOrderType
error InvalidOrderType()
NativeTokenSentWithoutNativeSwap
error NativeTokenSentWithoutNativeSwap()
NotEnoughCollateralAfterFees
error NotEnoughCollateralAfterFees(uint256 collateralReceived, uint256 fees)
NotEnoughNativeTokenSent
error NotEnoughNativeTokenSent(uint256 expectedAmount, uint256 sentAmount)
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UnsupportedPermit2Method
error UnsupportedPermit2Method(uint8 transferType)
UnsupportedTokenTransferMethod
error UnsupportedTokenTransferMethod()
ZeroAddress
error ZeroAddress(string variableName)
creation bytecode
0x6080604052348015600f57600080fd5b506016601a565b60ca565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560695760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c75780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b612fa8806100d96000396000f3fe6080604052600436106100f35760003560e01c8063715018a61161008a5780639c82f2a4116100595780639c82f2a41461028c578063d135c325146102ac578063da058ae3146102c1578063f2fde38b146102e157600080fd5b8063715018a614610205578063886abef51461021a5780638d928af81461023a5780638da5cb5b1461024f57600080fd5b8063555de3bb116100c6578063555de3bb1461019d5780635c1548fb146101b05780636817031b146101c55780636ccae054146101e557600080fd5b80631d9478b6146100f85780632dab136514610129578063358764761461013e57806343ad12af14610160575b600080fd5b34801561010457600080fd5b5061010d610301565b6040516001600160a01b03909116815260200160405180910390f35b34801561013557600080fd5b5061010d610337565b34801561014a57600080fd5b5061015e61015936600461205c565b61036a565b005b34801561016c57600080fd5b507fd864549198ec95d704c0a8cce160d13cbd5509cdd8c7e567bb2b8fe66fc5ce02546001600160a01b031661010d565b61015e6101ab3660046120f2565b6105c2565b3480156101bc57600080fd5b5061010d61073c565b3480156101d157600080fd5b5061015e6101e0366004612165565b610764565b3480156101f157600080fd5b5061015e610200366004612182565b6107b7565b34801561021157600080fd5b5061015e6107d8565b34801561022657600080fd5b5061015e610235366004612165565b6107ec565b34801561024657600080fd5b5061010d6108d9565b34801561025b57600080fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661010d565b34801561029857600080fd5b5061015e6102a7366004612165565b610901565b3480156102b857600080fd5b5061015e61098a565b3480156102cd57600080fd5b5061015e6102dc366004612165565b610a33565b3480156102ed57600080fd5b5061015e6102fc366004612165565b610a44565b60007ff443e521187c51ec1e29e6d8262f76dbe7d41015741854199897c2f773019d005b600101546001600160a01b0316919050565b60007ff443e521187c51ec1e29e6d8262f76dbe7d41015741854199897c2f773019d005b546001600160a01b0316919050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff1615906001600160401b03166000811580156103b45750825b90506000826001600160401b031660011480156103d05750303b155b9050811580156103de575080155b156103fc5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561043057845468ff00000000000000001916680100000000000000001785555b6104398c610a7f565b6001600160a01b038b16158061045657506001600160a01b038a16155b8061046857506001600160a01b038916155b156104bb5760405163eac0d38960e01b815260206004820152601860248201527f7661756c747c636f6c6c61746572616c7c73776170706572000000000000000060448201526064015b60405180910390fd5b7fd864549198ec95d704c0a8cce160d13cbd5509cdd8c7e567bb2b8fe66fc5ce0080546001600160a01b038c81166001600160a01b0319928316179092557fd864549198ec95d704c0a8cce160d13cbd5509cdd8c7e567bb2b8fe66fc5ce0180548e84169083161790557fd864549198ec95d704c0a8cce160d13cbd5509cdd8c7e567bb2b8fe66fc5ce028054928c169290911691909117905561055f8787610a90565b6105698a89610aa6565b83156105b457845468ff000000000000000019168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050565b60006105cc61073c565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610616573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063a91906121c3565b90506106583361064a86806121dc565b610653916125bb565b610b51565b610669610664856125c8565b610ca5565b6040516370a0823160e01b815230600482015260009082906001600160a01b038516906370a0823190602401602060405180830381865afa1580156106b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106d691906121c3565b6106e09190612675565b90506106ec8482611033565b6106f96020850185612688565b600681111561070a5761070a6126a9565b60405133907f93f93e61654ad1696c050dfaf30562a67494e3cc33efe4008f62c5a97e63280990600090a35050505050565b60007fd864549198ec95d704c0a8cce160d13cbd5509cdd8c7e567bb2b8fe66fc5ce0061035b565b61076c61144d565b6001600160a01b0381166107ab5760405163eac0d38960e01b81526020600482015260056024820152641d985d5b1d60da1b60448201526064016104b2565b6107b4816114a8565b50565b6107bf61144d565b6107d36001600160a01b03841683836114ef565b505050565b6107e061144d565b6107ea600061154e565b565b6107f461144d565b6001600160a01b03811661083b5760405163eac0d38960e01b815260206004820152600d60248201526c1b995dd0dbdb1b185d195c985b609a1b60448201526064016104b2565b610844816115bf565b6107b4816108506108d9565b604051630aa10e9f60e41b8152766f72646572416e6e6f756e63656d656e744d6f64756c6560481b60048201526001600160a01b03919091169063aa10e9f090602401602060405180830381865afa1580156108b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d491906126bf565b610aa6565b60007fd864549198ec95d704c0a8cce160d13cbd5509cdd8c7e567bb2b8fe66fc5ce00610325565b61090961144d565b6001600160a01b03811661094d5760405163eac0d38960e01b815260206004820152600a6024820152693732bba9bbb0b83832b960b11b60448201526064016104b2565b7fd864549198ec95d704c0a8cce160d13cbd5509cdd8c7e567bb2b8fe66fc5ce0280546001600160a01b0319166001600160a01b03831617905550565b61099261144d565b600061099c6108d9565b604051630aa10e9f60e41b8152766f72646572416e6e6f756e63656d656e744d6f64756c6560481b60048201526001600160a01b03919091169063aa10e9f090602401602060405180830381865afa1580156109fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2091906126bf565b90506107b4610a2d61073c565b82610aa6565b610a3b61144d565b6107b481611603565b610a4c61144d565b6001600160a01b038116610a7657604051631e4fbdf760e01b8152600060048201526024016104b2565b6107b48161154e565b610a8761162a565b6107b481611678565b610a9982611680565b610aa281611603565b5050565b604051636eb1769f60e11b81523060048201526001600160a01b0382811660248301526000919084169063dd62ed3e90604401602060405180830381865afa158015610af6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1a91906121c3565b9050610b2960026000196126dc565b8110156107d3576107d382610b4083600019612675565b6001600160a01b03861691906116a7565b6000805b82518160ff161015610c78576000838260ff1681518110610b7857610b786126fe565b60209081029190910181015101515190506000816002811115610b9d57610b9d6126a9565b03610bcd57610bc885858460ff1681518110610bbb57610bbb6126fe565b6020026020010151611737565b610c67565b6001816002811115610be157610be16126a9565b03610c0c57610bc885858460ff1681518110610bff57610bff6126fe565b60200260200101516117ae565b6002816002811115610c2057610c206126a9565b03610c4e5760019250610bc8848360ff1681518110610c4157610c416126fe565b6020026020010151611b92565b604051635b7543dd60e01b815260040160405180910390fd5b50610c7181612714565b9050610b55565b5080158015610c875750600034115b156107d357604051634088d01d60e01b815260040160405180910390fd5b6000610cd87fd864549198ec95d704c0a8cce160d13cbd5509cdd8c7e567bb2b8fe66fc5ce02546001600160a01b031690565b90506000805b835151811015610d1e578351805182908110610cfc57610cfc6126fe565b6020026020010151600001515182610d149190612733565b9150600101610cde565b50604080516001808252818301909252600091816020015b610d3e611fd3565b815260200190600190039081610d36579050509050816001600160401b03811115610d6b57610d6b61222c565b604051908082528060200260200182016040528015610da457816020015b610d91612005565b815260200190600190039081610d895790505b5081600081518110610db857610db86126fe565b602002602001015160000181905250600081600081518110610ddc57610ddc6126fe565b602002602001015160200151600001906002811115610dfd57610dfd6126a9565b90816002811115610e1057610e106126a9565b9052506000805b855151811015610fca5760005b8651805183908110610e3857610e386126fe565b60200260200101516000015151811015610fc157604051806060016040528088600001518481518110610e6d57610e6d6126fe565b6020026020010151600001518381518110610e8a57610e8a6126fe565b6020026020010151600001516001600160a01b0316815260200188600001518481518110610eba57610eba6126fe565b6020026020010151600001518381518110610ed757610ed76126fe565b602002602001015160200151815260200188600001518481518110610efe57610efe6126fe565b6020026020010151600001518381518110610f1b57610f1b6126fe565b60200260200101516040015181525084600081518110610f3d57610f3d6126fe565b6020026020010151600001518480610f5490612746565b955081518110610f6657610f666126fe565b6020026020010181905250610fb987600001518381518110610f8a57610f8a6126fe565b6020026020010151600001518281518110610fa757610fa76126fe565b60200260200101516000015187610aa6565b600101610e24565b50600101610e17565b50818552604051630bffcd2560e41b81526001600160a01b0385169063bffcd25090610ffa9088906004016127e8565b600060405180830381600087803b15801561101457600080fd5b505af1158015611028573d6000803e3d6000fd5b505050505050505050565b600061103d6108d9565b9050600161104e6020850185612688565b600681111561105f5761105f6126a9565b036111df576000611073602085018561291e565b8101906110809190612964565b9050806020015183116110b65760208101516040516304b2f19b60e21b81526104b2918591600401918252602082015260400190565b604051630aa10e9f60e41b8152766f72646572416e6e6f756e63656d656e744d6f64756c6560481b60048201526001600160a01b0383169063aa10e9f090602401602060405180830381865afa158015611114573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061113891906126bf565b6001600160a01b031663f2f6a2ce8260200151856111569190612675565b8351602085015160405160e085901b7fffffffff00000000000000000000000000000000000000000000000000000000168152600481019390935260248301919091526044820152336064820152608401600060405180830381600087803b1580156111c157600080fd5b505af11580156111d5573d6000803e3d6000fd5b5050505050505050565b60036111ee6020850185612688565b60068111156111ff576111ff6126a9565b03611434576000611213602085018561291e565b8101906112209190612997565b90506000826001600160a01b0316639eb3386283602001516040518263ffffffff1660e01b815260040161125691815260200190565b602060405180830381865afa158015611273573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129791906121c3565b8260a001516112a69190612733565b90508084116112d2576040516304b2f19b60e21b815260048101859052602481018290526044016104b2565b60006112de8286612675565b83519091508110156113105782516040516319a40f5b60e01b81526104b2918791600401918252602082015260400190565b604051630aa10e9f60e41b8152766f72646572416e6e6f756e63656d656e744d6f64756c6560481b60048201526001600160a01b0385169063aa10e9f090602401602060405180830381865afa15801561136e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139291906126bf565b60208401516040808601516060870151608088015160a0890151935163135d999b60e21b815260048101889052602481019590955260448501929092526064840152608483015260a48201523360c48201526001600160a01b039190911690634d76666c9060e401600060405180830381600087803b15801561141457600080fd5b505af1158015611428573d6000803e3d6000fd5b50505050505050505050565b60405163688c176f60e01b815260040160405180910390fd5b3361147f7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146107ea5760405163118cdaa760e01b81523360048201526024016104b2565b807fd864549198ec95d704c0a8cce160d13cbd5509cdd8c7e567bb2b8fe66fc5ce005b60010180546001600160a01b0319166001600160a01b039290921691909117905550565b6040516001600160a01b038381166024830152604482018390526107d391859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050611cc4565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3505050565b807fd864549198ec95d704c0a8cce160d13cbd5509cdd8c7e567bb2b8fe66fc5ce005b80546001600160a01b0319166001600160a01b039290921691909117905550565b807ff443e521187c51ec1e29e6d8262f76dbe7d41015741854199897c2f773019d006114cb565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166107ea57604051631afcd79f60e31b815260040160405180910390fd5b610a4c61162a565b807ff443e521187c51ec1e29e6d8262f76dbe7d41015741854199897c2f773019d006115e2565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa1580156116f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171b91906121c3565b9050611731848461172c8585612733565b611d27565b50505050565b60005b8151518110156107d3576117a683308460000151848151811061175f5761175f6126fe565b60200260200101516020015185600001518581518110611781576117816126fe565b6020026020010151600001516001600160a01b0316611db7909392919063ffffffff16565b60010161173a565b60008160200151602001518060200190518101906117cc9190612a59565b905060008260000151516001600160401b038111156117ed576117ed61222c565b604051908082528060200260200182016040528015611816578160200160208202803683370190505b50905060005b8351518110156118d457835180518290811061183a5761183a6126fe565b6020908102919091010151516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561188b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118af91906121c3565b8282815181106118c1576118c16126fe565b602090810291909101015260010161181c565b506000825160018111156118ea576118ea6126a9565b0361198857600082602001518060200190518101906119099190612b1a565b9050611913610337565b6001600160a01b03166330f28b7a826000015183602001518885604001516040518563ffffffff1660e01b81526004016119509493929190612bdf565b600060405180830381600087803b15801561196a57600080fd5b505af115801561197e573d6000803e3d6000fd5b5050505050611a1f565b60018251600181111561199d5761199d6126a9565b03611a0357600082602001518060200190518101906119bc9190612cdb565b90506119c6610337565b6001600160a01b031663edd9444b826000015183602001518885604001516040518563ffffffff1660e01b81526004016119509493929190612e55565b8151604051633a01d48360e11b81526104b29190600401612f1a565b60005b835151811015611b8b57600084600001518281518110611a4457611a446126fe565b6020908102919091010151516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab991906121c3565b90506000838381518110611acf57611acf6126fe565b602002602001015182611ae29190612675565b905085600001518381518110611afa57611afa6126fe565b6020026020010151602001518114611b81578551805184908110611b2057611b206126fe565b60200260200101516000015186600001518481518110611b4257611b426126fe565b6020908102919091018101510151604051632dcd710760e21b81526001600160a01b0390921660048301526024820152604481018290526064016104b2565b5050600101611a22565b5050505050565b6000611b9c610301565b8251519091506001141580611be55750806001600160a01b03168260000151600081518110611bcd57611bcd6126fe565b6020026020010151600001516001600160a01b031614155b15611c03576040516318a7537760e21b815260040160405180910390fd5b81518051600090611c1657611c166126fe565b6020026020010151602001513414611c6c5781518051600090611c3b57611c3b6126fe565b602002602001015160200151346040516348d9ecc160e01b81526004016104b2929190918252602082015260400190565b806001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611ca757600080fd5b505af1158015611cbb573d6000803e3d6000fd5b50505050505050565b6000611cd96001600160a01b03841683611df0565b90508051600014158015611cfe575080806020019051810190611cfc9190612f34565b155b156107d357604051635274afe760e01b81526001600160a01b03841660048201526024016104b2565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b179052611d788482611e07565b611731576040516001600160a01b03848116602483015260006044830152611dad91869182169063095ea7b39060640161151c565b6117318482611cc4565b6040516001600160a01b0384811660248301528381166044830152606482018390526117319186918216906323b872dd9060840161151c565b6060611dfe83836000611eaf565b90505b92915050565b6000806000846001600160a01b031684604051611e249190612f56565b6000604051808303816000865af19150503d8060008114611e61576040519150601f19603f3d011682016040523d82523d6000602084013e611e66565b606091505b5091509150818015611e90575080511580611e90575080806020019051810190611e909190612f34565b8015611ea657506000856001600160a01b03163b115b95945050505050565b606081471015611ed45760405163cd78605960e01b81523060048201526024016104b2565b600080856001600160a01b03168486604051611ef09190612f56565b60006040518083038185875af1925050503d8060008114611f2d576040519150601f19603f3d011682016040523d82523d6000602084013e611f32565b606091505b5091509150611f42868383611f4e565b925050505b9392505050565b606082611f6357611f5e82611faa565b611f47565b8151158015611f7a57506001600160a01b0384163b155b15611fa357604051639996b31560e01b81526001600160a01b03851660048201526024016104b2565b5080611f47565b805115611fba5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b60405180604001604052806060815260200161200060408051808201909152600081526060602082015290565b905290565b604051806060016040528060006001600160a01b0316815260200160008152602001612000604051806040016040528060008019168152602001606081525090565b6001600160a01b03811681146107b457600080fd5b600080600080600080600060e0888a03121561207757600080fd5b873561208281612047565b9650602088013561209281612047565b955060408801356120a281612047565b945060608801356120b281612047565b935060808801356120c281612047565b925060a08801356120d281612047565b915060c08801356120e281612047565b8091505092959891949750929550565b6000806040838503121561210557600080fd5b82356001600160401b0381111561211b57600080fd5b83016060818603121561212d57600080fd5b915060208301356001600160401b0381111561214857600080fd5b83016040818603121561215a57600080fd5b809150509250929050565b60006020828403121561217757600080fd5b8135611f4781612047565b60008060006060848603121561219757600080fd5b83356121a281612047565b925060208401356121b281612047565b929592945050506040919091013590565b6000602082840312156121d557600080fd5b5051919050565b6000808335601e198436030181126121f357600080fd5b8301803591506001600160401b0382111561220d57600080fd5b6020019150600581901b360382131561222557600080fd5b9250929050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156122645761226461222c565b60405290565b604051606081016001600160401b03811182821017156122645761226461222c565b604051601f8201601f191681016001600160401b03811182821017156122b4576122b461222c565b604052919050565b60006001600160401b038211156122d5576122d561222c565b5060051b60200190565b60006001600160401b038211156122f8576122f861222c565b50601f01601f191660200190565b600082601f83011261231757600080fd5b813561232a612325826122df565b61228c565b81815284602083860101111561233f57600080fd5b816020850160208301376000918101602001919091529392505050565b60006040828403121561236e57600080fd5b612376612242565b905081356003811061238757600080fd5b815260208201356001600160401b038111156123a257600080fd5b6123ae84828501612306565b60208301525092915050565b60006123c8612325846122bc565b838152905060208101600584901b83018510156123e457600080fd5b825b8460051b84018110156125b2576001600160401b038135111561240857600080fd5b803584016040818803121561241c57600080fd5b612424612242565b6001600160401b038235111561243957600080fd5b8135820188601f82011261244c57600080fd5b61245961232582356122bc565b81358082526020808301929160051b8401018b101561247757600080fd5b602083015b6020843560051b85010181101561256a576001600160401b03813511156124a257600080fd5b803584016060818e03601f190112156124ba57600080fd5b6124c261226a565b6124cf6020830135612047565b60208281013582526040830135908201526001600160401b03606083013511156124f857600080fd5b6020606083013583010191506040828f03121561251457600080fd5b61251c612242565b823581526001600160401b036020840135111561253857600080fd5b6125488f60208501358501612306565b602082015280604083015250808552505060208301925060208101905061247c565b50835250506001600160401b036020830135111561258757600080fd5b612597886020840135840161235c565b602082015280845250506020820191506020810190506123e6565b50509392505050565b6000611dfe3684846123ba565b600081360360608112156125db57600080fd5b6125e3612242565b83356001600160401b038111156125f957600080fd5b840136601f82011261260a57600080fd5b612619368235602084016123ba565b8252506040601f198301121561262e57600080fd5b612636612242565b9150602084013561264681612047565b8252604093909301356020808301919091528301525090565b634e487b7160e01b600052601160045260246000fd5b81810381811115611e0157611e0161265f565b60006020828403121561269a57600080fd5b813560078110611f4757600080fd5b634e487b7160e01b600052602160045260246000fd5b6000602082840312156126d157600080fd5b8151611f4781612047565b6000826126f957634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff810361272a5761272a61265f565b60010192915050565b80820180821115611e0157611e0161265f565b6000600182016127585761275861265f565b5060010190565b60005b8381101561277a578181015183820152602001612762565b50506000910152565b6000815180845261279b81602086016020860161275f565b601f01601f19169290920160200192915050565b60008151600381106127c3576127c36126a9565b808452506020820151604060208501526127e06040850182612783565b949350505050565b6020815260006080820183516060602085015281815180845260a08601915060a08160051b870101935060208301925060005b818110156128f357609f1987860301835283518051604080885281519088018190526060600582901b8901810192602001919089019060005b818110156128bf578a8503605f19018352835180516001600160a01b03168652602080820151818801526040918201516060838901819052815190890152015160808701919091526128a960a0870182612783565b9550506020938401939290920191600101612854565b505050506020820151915086810360208801526128dc81836127af565b96505050602093840193929092019160010161281b565b5050505060208481015180516001600160a01b03166040860152908101516060850152509392505050565b6000808335601e1984360301811261293557600080fd5b8301803591506001600160401b0382111561294f57600080fd5b60200191503681900382131561222557600080fd5b6000604082840312801561297757600080fd5b50612980612242565b823581526020928301359281019290925250919050565b600060c08284031280156129aa57600080fd5b5060405160009060c081016001600160401b03811182821017156129d0576129d061222c565b604090815284358252602080860135908301528481013590820152606080850135908201526080808501359082015260a09384013593810193909352509092915050565b600082601f830112612a2557600080fd5b8151612a33612325826122df565b818152846020838601011115612a4857600080fd5b6127e082602083016020870161275f565b600060208284031215612a6b57600080fd5b81516001600160401b03811115612a8157600080fd5b820160408185031215612a9357600080fd5b612a9b612242565b815160028110612aaa57600080fd5b815260208201516001600160401b03811115612ac557600080fd5b612ad186828501612a14565b602083015250949350505050565b600060408284031215612af157600080fd5b612af9612242565b90508151612b0681612047565b815260209182015191810191909152919050565b600060208284031215612b2c57600080fd5b81516001600160401b03811115612b4257600080fd5b820180840360e0811215612b5557600080fd5b612b5d61226a565b6080821215612b6b57600080fd5b612b7361226a565b9150612b7f8684612adf565b82526040838101516020840152606084015190830152818152612ba58660808501612adf565b602082015260c083015191506001600160401b03821115612bc557600080fd5b612bd186838501612a14565b604082015295945050505050565b612bfd81865180516001600160a01b03168252602090810151910152565b6020850151604082015260408501516060820152612c31608082018580516001600160a01b03168252602090810151910152565b6001600160a01b03831660c082015261010060e08201526000612c58610100830184612783565b9695505050505050565b6000612c70612325846122bc565b838152905060208101600684901b830185811115612c8d57600080fd5b835b81811015612cb157612ca18782612adf565b8352602090920191604001612c8f565b5050509392505050565b600082601f830112612ccc57600080fd5b611dfe83835160208501612c62565b600060208284031215612ced57600080fd5b81516001600160401b03811115612d0357600080fd5b820160608185031215612d1557600080fd5b612d1d61226a565b81516001600160401b03811115612d3357600080fd5b820160608187031215612d4557600080fd5b612d4d61226a565b81516001600160401b03811115612d6357600080fd5b8201601f81018813612d7457600080fd5b612d8388825160208401612c62565b825250602082810151818301526040928301519282019290925282528201516001600160401b03811115612db657600080fd5b612dc286828501612cbb565b60208301525060408201516001600160401b03811115612de157600080fd5b612ded86828501612a14565b604083015250949350505050565b600081518084526020840193506020830160005b82811015612e4b57612e3586835180516001600160a01b03168252602090810151910152565b6040959095019460209190910190600101612e0f565b5093949350505050565b60808152600060e0820186516060608085015281815180845261010086019150602083019350600092505b80831015612ebd57612ea682855180516001600160a01b03168252602090810151910152565b604082019150602084019350600183019250612e80565b50602089015160a0860152604089015160c08601528481036020860152612ee48189612dfb565b92505050612efd60408401866001600160a01b03169052565b8281036060840152612f0f8185612783565b979650505050505050565b6020810160028310612f2e57612f2e6126a9565b91905290565b600060208284031215612f4657600080fd5b81518015158114611f4757600080fd5b60008251612f6881846020870161275f565b919091019291505056fea2646970667358221220eddb3180fff3262b726a9d244c53ed0a5452d553471ce6243fe45a85f203615964736f6c634300081c0033