0 txs
15 calls
constructor
constructor()
functions
bascule
viewfunction bascule() view returns (address)
bitcoinChainId
viewfunction bitcoinChainId() view returns (bytes32)
calcUnstakeRequestAmount
viewfunction calcUnstakeRequestAmount(address token, bytes scriptPubkey, uint256 amount) view returns (uint256 amountAfterFee, bool isAboveMinLimit)
CALLER_ROLE
viewfunction CALLER_ROLE() view returns (bytes32)
CLAIMER_ROLE
viewfunction CLAIMER_ROLE() view returns (bytes32)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
defaultAdmin
viewfunction defaultAdmin() view returns (address)
defaultAdminDelay
viewfunction defaultAdminDelay() view returns (uint48)
defaultAdminDelayIncreaseWait
viewfunction defaultAdminDelayIncreaseWait() view returns (uint48)
getRate
viewfunction getRate(address token) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getRouteType
viewfunction getRouteType(bytes32 fromToken, bytes32 fromChainId, bytes32 toChainId, bytes32 toToken) view returns (uint8)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
mailbox
viewfunction mailbox() view returns (address)
maxMintCommission
viewfunction maxMintCommission(address token) view returns (uint256)
nativeToken
viewfunction nativeToken() view returns (address)
OPERATOR_ROLE
viewfunction OPERATOR_ROLE() view returns (bytes32)
oracle
viewfunction oracle(address token) view returns (address)
owner
viewfunction owner() view returns (address)
pendingDefaultAdmin
viewfunction pendingDefaultAdmin() view returns (address newAdmin, uint48 schedule)
pendingDefaultAdminDelay
viewfunction pendingDefaultAdminDelay() view returns (uint48 newDelay, uint48 schedule)
ratio
viewfunction ratio(address token) view returns (uint256)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
tokenConfig
viewfunction tokenConfig(address token) view returns (uint256 redeemFee, uint256 redeemForBtcMinAmount, bool isRedeemEnabled)
toNativeCommission
viewfunction toNativeCommission(address token) view returns (uint64)
acceptDefaultAdminTransfer
nonpayablefunction acceptDefaultAdminTransfer()
batchMint
nonpayablefunction batchMint(bytes[] payload, bytes[] proof)
batchMintWithFee
nonpayablefunction batchMintWithFee(bytes[] mintPayload, bytes[] proof, bytes[] feePayload, bytes[] userSignature)
beginDefaultAdminTransfer
nonpayablefunction beginDefaultAdminTransfer(address newAdmin)
cancelDefaultAdminTransfer
nonpayablefunction cancelDefaultAdminTransfer()
changeBascule
nonpayablefunction changeBascule(address newVal)
changeDefaultAdminDelay
nonpayablefunction changeDefaultAdminDelay(uint48 newDelay)
changeMailbox
nonpayablefunction changeMailbox(address newVal)
changeNativeToken
nonpayablefunction changeNativeToken(address newValue)
changeOracle
nonpayablefunction changeOracle(address token, address newVal)
changeRedeemFee
nonpayablefunction changeRedeemFee(address token, uint256 fee)
changeRedeemFee
nonpayablefunction changeRedeemFee(uint256 fee)
changeRedeemForBtcMinAmount
nonpayablefunction changeRedeemForBtcMinAmount(address token, uint256 minAmount)
changeRedeemForBtcMinAmount
nonpayablefunction changeRedeemForBtcMinAmount(uint256 minAmount)
changeTokenConfig
nonpayablefunction changeTokenConfig(address token, uint256 redeemFee, uint256 redeemForBtcMinAmount, bool redeemEnabled)
changeTokenConfigExt
nonpayablefunction changeTokenConfigExt(address token, uint256 redeemFee, uint256 redeemForBtcMinAmount, address oracle_, uint256 maximumMintCommission_, uint64 toNativeCommission_)
changeToNativeCommission
nonpayablefunction changeToNativeCommission(address token, uint64 newValue)
deposit
nonpayablefunction deposit(address fromAddress, address toToken, uint256 amount)
deposit
nonpayablefunction deposit(bytes32 tolChainId, bytes32 toToken, bytes32 recipient, uint256 amount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
handlePayload
nonpayablefunction handlePayload(tuple payload) returns (bytes)
initialize
nonpayablefunction initialize(address owner_, uint48 initialOwnerDelay_, bytes32 ledgerChainId_, bytes32 bitcoinChainId_, address mailbox_, address bascule_)
mint
nonpayablefunction mint(bytes rawPayload, bytes proof) returns (address)
mintWithFee
nonpayablefunction mintWithFee(bytes mintPayload, bytes proof, bytes feePayload, bytes userSignature)
redeem
nonpayablefunction redeem(address fromAddress, address fromToken, uint256 amount)
redeem
nonpayablefunction redeem(address fromAddress, bytes32 tolChainId, address fromToken, bytes32 toToken, bytes32 recipient, uint256 amount)
redeemForBtc
nonpayablefunction redeemForBtc(address fromAddress, address fromToken, bytes recipient, uint256 amount)
removeRoute
nonpayablefunction removeRoute(bytes32 fromToken, bytes32 fromChainId, bytes32 toToken, bytes32 toChainId)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address account)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
rollbackDefaultAdminDelay
nonpayablefunction rollbackDefaultAdminDelay()
setMaxMintCommission
nonpayablefunction setMaxMintCommission(address token, uint256 fee)
setRoute
nonpayablefunction setRoute(bytes32 fromToken, bytes32 fromChainId, bytes32 toToken, bytes32 toChainId, uint8 routeType)
toggleRedeem
nonpayablefunction toggleRedeem()
events
AssetRouter_BasculeChanged
event AssetRouter_BasculeChanged(address indexed prevVal, address indexed newVal)
AssetRouter_BatchMintError
event AssetRouter_BatchMintError(bytes32 indexed payloadHash, string reason, bytes customError)
AssetRouter_DustFeeRateChanged
event AssetRouter_DustFeeRateChanged(uint256 indexed oldRate, uint256 indexed newRate)
AssetRouter_FeeCharged
event AssetRouter_FeeCharged(uint256 indexed fee, bytes userSignature)
AssetRouter_MailboxChanged
event AssetRouter_MailboxChanged(address indexed prevVal, address indexed newVal)
AssetRouter_MintFeeChanged
event AssetRouter_MintFeeChanged(uint256 indexed oldFee, uint256 indexed newFee)
AssetRouter_NativeTokenChanged
event AssetRouter_NativeTokenChanged(address indexed oldAddress, address indexed newAddress)
AssetRouter_OracleChanged
event AssetRouter_OracleChanged(address indexed prevVal, address indexed newVal)
AssetRouter_RedeemEnabled
event AssetRouter_RedeemEnabled(address indexed token, bool enabled)
AssetRouter_RedeemFeeChanged
event AssetRouter_RedeemFeeChanged(address indexed token, uint256 oldFee, uint256 newFee)
AssetRouter_RedeemForBtcMinAmountChanged
event AssetRouter_RedeemForBtcMinAmountChanged(address indexed token, uint256 oldMinAmount, uint256 newMinAmount)
AssetRouter_RouteRemoved
event AssetRouter_RouteRemoved(bytes32 indexed fromToken, bytes32 indexed fromChainId, bytes32 indexed toToken, bytes32 toChainId)
AssetRouter_RouteSet
event AssetRouter_RouteSet(bytes32 indexed fromToken, bytes32 indexed fromChainId, bytes32 indexed toToken, bytes32 toChainId, uint8 routeType)
AssetRouter_ToNativeCommissionChanged
event AssetRouter_ToNativeCommissionChanged(uint256 indexed oldCommission, uint256 indexed newCommission)
DefaultAdminDelayChangeCanceled
event DefaultAdminDelayChangeCanceled()
DefaultAdminDelayChangeScheduled
event DefaultAdminDelayChangeScheduled(uint48 newDelay, uint48 effectSchedule)
DefaultAdminTransferCanceled
event DefaultAdminTransferCanceled()
DefaultAdminTransferScheduled
event DefaultAdminTransferScheduled(address indexed newAdmin, uint48 acceptSchedule)
Initialized
event Initialized(uint64 version)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlEnforcedDefaultAdminDelay
error AccessControlEnforcedDefaultAdminDelay(uint48 schedule)
AccessControlEnforcedDefaultAdminRules
error AccessControlEnforcedDefaultAdminRules()
AccessControlInvalidDefaultAdmin
error AccessControlInvalidDefaultAdmin(address defaultAdmin)
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
AmountBelowMinLimit
error AmountBelowMinLimit(uint256 dustLimit)
AmountLessThanCommission
error AmountLessThanCommission(uint256 fee)
AssertRouter_UnauthorizedAccount
error AssertRouter_UnauthorizedAccount()
AssertRouter_WrongRedeemDestinationChain
error AssertRouter_WrongRedeemDestinationChain()
AssertRouter_WrongRouteType
error AssertRouter_WrongRouteType()
AssertRouter_WrongToken
error AssertRouter_WrongToken()
AssetOperation_DepositNotAllowed
error AssetOperation_DepositNotAllowed()
AssetOperation_RedeemNotAllowed
error AssetOperation_RedeemNotAllowed()
AssetRouter_FeeGreaterThanAmount
error AssetRouter_FeeGreaterThanAmount()
AssetRouter_MailboxExpected
error AssetRouter_MailboxExpected()
AssetRouter_MintProcessingError
error AssetRouter_MintProcessingError()
AssetRouter_PayloadAlreadyUsed
error AssetRouter_PayloadAlreadyUsed()
AssetRouter_Unauthorized
error AssetRouter_Unauthorized()
AssetRouter_WrongNativeToken
error AssetRouter_WrongNativeToken()
AssetRouter_WrongOperation
error AssetRouter_WrongOperation()
AssetRouter_WrongSender
error AssetRouter_WrongSender()
AssetRouter_ZeroAddress
error AssetRouter_ZeroAddress()
AssetRouter_ZeroMailbox
error AssetRouter_ZeroMailbox()
Assets_InvalidPayloadSize
error Assets_InvalidPayloadSize(uint256 expected, uint256 actual)
Assets_InvalidSelector
error Assets_InvalidSelector(bytes4 expected, bytes4 actual)
Assets_ZeroAmount
error Assets_ZeroAmount()
Assets_ZeroRecipient
error Assets_ZeroRecipient()
Assets_ZeroToToken
error Assets_ZeroToToken()
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
GMP_InvalidAddess
error GMP_InvalidAddess()
InvalidAction
error InvalidAction(bytes4 expected, bytes4 actual)
InvalidFeeApprovalSignature
error InvalidFeeApprovalSignature()
InvalidInitialization
error InvalidInitialization()
InvalidPayloadSize
error InvalidPayloadSize(uint256 expected, uint256 actual)
NonEqualLength
error NonEqualLength(uint256 a, uint256 b)
NotInitializing
error NotInitializing()
NotStakingToken
error NotStakingToken()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
ScriptPubkeyUnsupported
error ScriptPubkeyUnsupported()
UserSignatureExpired
error UserSignatureExpired(uint256 expiry)
ZeroFee
error ZeroFee()
creation bytecode
0x60806040523480156200001157600080fd5b506200001c62000022565b620000d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000735760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620000d35780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6151fa80620000e66000396000f3fe608060405234801561001057600080fd5b50600436106103995760003560e01c8063774237fc116101e9578063cf6eefb71161010f578063e1758bd8116100ad578063fb17cab71161007c578063fb17cab71461080c578063fc5f18d314610814578063fe136c4e1461083b578063fe38ae871461086b57600080fd5b8063e1758bd8146107b7578063e9fae4ee146107bf578063eb37d349146107d2578063f5b541a6146107e557600080fd5b8063d5438eae116100e9578063d5438eae14610781578063d547741f14610789578063d602b9fd1461079c578063e0fbc8bc146107a457600080fd5b8063cf6eefb714610720578063d073787a1461074e578063d4ecb4811461076157600080fd5b80639b91447011610187578063ab384d1811610156578063ab384d18146106d5578063aba905f0146106e8578063cc8463c814610710578063cefc14291461071857600080fd5b80639b91447014610680578063a129d18614610693578063a1eda53c146106a6578063a217fddf146106cd57600080fd5b806384ef8ffc116101c357806384ef8ffc1461064a5780638da5cb5b1461065257806391d148541461065a578063943592001461066d57600080fd5b8063774237fc1461060f5780637f56945e146106245780638340f5491461063757600080fd5b806337a9bdc9116102ce5780634dc809ce1161026c578063649a5ec71161023b578063649a5ec7146105c357806368cc6100146105d65780636bc63893146105e9578063757a6103146105fc57600080fd5b80634dc809ce1461055f5780635698732f1461057257806359aae4ba1461059d578063634e93da146105b057600080fd5b806342d05b9b116102a857806342d05b9b1461051157806343f340f614610519578063464b7f5e1461052c5780634b1c9b281461053f57600080fd5b806337a9bdc9146104d857806337cef791146104eb57806340b3fc79146104fe57600080fd5b80630e6dfcd51161033b57806318551f061161031557806318551f061461048c578063248a9ca31461049f5780632f2ff15d146104b257806336568abe146104c557600080fd5b80630e6dfcd5146104535780631478ac0714610466578063156796db1461047957600080fd5b806305112d001161037757806305112d001461040257806306689495146104175780630aa6220b1461042a5780630b40495b1461043257600080fd5b806301ffc9a71461039e578063022d63fb146103c657806302d9f221146103e2575b600080fd5b6103b16103ac36600461433f565b61087e565b60405190151581526020015b60405180910390f35b620697805b60405165ffffffffffff90911681526020016103bd565b6103ea6108a9565b6040516001600160a01b0390911681526020016103bd565b610415610410366004614381565b6108c5565b005b6104156104253660046143f5565b6108df565b610415610966565b6104456104403660046144b8565b61097c565b6040519081526020016103bd565b6104156104613660046144d5565b610aaf565b610415610474366004614524565b610b44565b6104456104873660046144b8565b610b74565b61041561049a366004614584565b610ba3565b6104456104ad3660046145f2565b610ccb565b6104156104c036600461460b565b610ced565b6104156104d336600461460b565b610d19565b6104156104e636600461463b565b610ddd565b6104456104f93660046144b8565b610f9c565b61041561050c3660046146a7565b6110a4565b6104156111b4565b6104156105273660046144b8565b6111d5565b61041561053a3660046146f8565b6111e9565b61055261054d366004614815565b61129f565b6040516103bd919061491b565b61041561056d36600461492e565b611446565b6105856105803660046144b8565b61145b565b6040516001600160401b0390911681526020016103bd565b6104156105ab3660046149a0565b61149a565b6104156105be3660046144b8565b611660565b6104156105d1366004614a4f565b611674565b6104156105e43660046144b8565b611688565b6103ea6105f7366004614a6a565b61169c565b61041561060a366004614381565b6116fb565b61044560008051602061512583398151915281565b6104156106323660046144b8565b611710565b6104156106453660046144d5565b611724565b6103ea61179e565b6103ea6117ba565b6103b161066836600461460b565b6117c9565b61041561067b3660046145f2565b611801565b61041561068e366004614ad5565b611823565b6104156106a13660046146f8565b61198d565b6106ae6119a3565b6040805165ffffffffffff9384168152929091166020830152016103bd565b610445600081565b6104156106e3366004614b4b565b611a16565b6106fb6106f6366004614bae565b611a5c565b604080519283529015156020830152016103bd565b6103cb611b7d565b610415611bfb565b610728611c3b565b604080516001600160a01b03909316835265ffffffffffff9091166020830152016103bd565b61041561075c366004614381565b611c69565b61077461076f3660046146f8565b611c9d565b6040516103bd9190614c41565b6103ea611cb4565b61041561079736600461460b565b611cd0565b610415611cf8565b6104156107b2366004614c4f565b611d0b565b6103ea611d20565b6104156107cd366004614c84565b611d3c565b6103ea6107e03660046144b8565b611daf565b6104457f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b92981565b610445611de2565b6104457f11a8cb5a02bd6c42679835e867ef2118ba78f088f8300511420c6603c21d9c7881565b61084e6108493660046144b8565b611df7565b6040805193845260208401929092521515908201526060016103bd565b6104156108793660046145f2565b611e12565b6000630963936560e31b6001600160e01b0319831614806108a357506108a382611e34565b92915050565b60006108b3611e59565b600501546001600160a01b0316919050565b60006108d081611e7d565b6108da8383611e87565b505050565b6108e7611ef2565b7f11a8cb5a02bd6c42679835e867ef2118ba78f088f8300511420c6603c21d9c7861091181611e7d565b60006109238a8a8a8a8a8a8a8a611f2a565b9050806109435760405163778df52760e01b815260040160405180910390fd5b505061095c600160008051602061518583398151915255565b5050505050505050565b600061097181611e7d565b610979612238565b50565b600080610987611e59565b9050826001600160a01b03166373cfc6b26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109eb9190614ce0565b8015610a1457506001600160a01b03838116600090815260078301602052604090206003015416155b15610a295750670de0b6b3a764000092915050565b6001600160a01b0380841660009081526007830160209081526040918290206003015482516371ca337d60e01b815292519316926371ca337d9260048082019392918290030181865afa158015610a84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa89190614cfd565b9392505050565b610ab7611ef2565b6000610ac1611e59565b9050610b2c8185466001600160f81b0316600685015487906001600160a01b03166001600160a01b038a16604051602001610afe91815260200190565b60408051601f198184030181529190528860007389e3e4e7a699d6f131d893aeef7ee143706ac23a81612245565b506108da600160008051602061518583398151915255565b6000610b4f81611e7d565b610b598585611e87565b610b638584612548565b610b6d85836125b9565b5050505050565b6000610b7e611e59565b6001600160a01b03909216600090815260079290920160205250604090206002015490565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b0316600081158015610be85750825b90506000826001600160401b03166001148015610c045750303b155b905081158015610c12575080155b15610c305760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c5a57845460ff60401b1916600160401b1785555b610c648a8c6126a3565b610c6c6126b5565b610c78898989896126c5565b8315610cbe57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b6000908152600080516020615165833981519152602052604090206001015490565b81610d0b57604051631fe1e13d60e11b815260040160405180910390fd5b610d1582826126f8565b5050565b60008051602061514583398151915282158015610d4e5750610d3961179e565b6001600160a01b0316826001600160a01b0316145b15610dd357600080610d5e611c3b565b90925090506001600160a01b038216151580610d80575065ffffffffffff8116155b80610d9357504265ffffffffffff821610155b15610dc0576040516319ca5ebb60e01b815265ffffffffffff821660048201526024015b60405180910390fd5b5050805465ffffffffffff60a01b191681555b6108da8383612714565b610de5611ef2565b6000610def611e59565b6001600160a01b03861660009081526007820160205260408120805492935090918411610e2f57604051638e2d830960e01b815260040160405180910390fd5b60008060009050886001600160a01b03166373cfc6b26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e989190614ce0565b15610ef657610ed48888856000015489610eb29190614d2c565b8660030160149054906101000a90046001600160401b03168760010154612747565b9350738bf729ffe074caee622c02928173467e658e19e2915060019050610f25565b610f0b8888856000015489610eb29190614d2c565b93507389e3e4e7a699d6f131d893aeef7ee143706ac23a91505b610f80858b87600101548c600160001b8d8d8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d9250610f7991508290508f614d2c565b8a8a612245565b5050505050610b6d600160008051602061518583398151915255565b600080610fa7611e59565b9050826001600160a01b03166373cfc6b26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fe7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100b9190614ce0565b801561103457506001600160a01b03838116600090815260078301602052604090206003015416155b156110495750670de0b6b3a764000092915050565b6001600160a01b0380841660009081526007830160209081526040918290206003015482516333cd77e760e11b8152925193169263679aefce9260048082019392918290030181865afa158015610a84573d6000803e3d6000fd5b60006110af81611e7d565b60006110b9611e59565b9050600087876040516020016110d9929190918252602082015260400190565b60408051601f1981840301815291815281516020928301206000818152600280870185528382208a835285528382208b83529485905292902080549194508792909160ff191690600190849081111561113457611134614c09565b0217905550466001600160f81b0316880361115357611153838a6127b7565b466001600160f81b0316860361116d5761116d83886127b7565b86888a7f65d345579617d61433f1ecd9a50794a2c910037a17b3e91bce3ac6e2b6b061a489896040516111a1929190614d3f565b60405180910390a4505050505050505050565b6000805160206151258339815191526111cc81611e7d565b610979336128b1565b60006111e081611e7d565b610d15826129fd565b60006111f481611e7d565b60006111fe611e59565b90506000868660405160200161121e929190918252602082015260400190565b60408051808303601f190181528282528051602091820120600081815260028701835283812089825283528381208a8252808452939020805460ff1916905587845293509091879189918b917fc5386d2e751ac4e54d3265f9f137c5468532e2c31aad50019b3e4ea19927c0de910160405180910390a45050505050505050565b606060006112ab611e59565b60048101549091506001600160a01b0316336001600160a01b0316146112e45760405163372b4bf360e11b815260040160405180910390fd5b60608301517389e3e4e7a699d6f131d893aeef7ee143706ac23a1461131c576040516303cefbf360e01b815260040160405180910390fd5b8251600090815260038201602052604090205460ff1615611350576040516309eae50960e41b815260040160405180910390fd5b825160009081526003820160205260408120805460ff1916600117905560c084015161137b90612aaf565b5090506113918285600001518360400151612c9a565b8051602082015160408084015190516340c10f1960e01b81526001600160a01b03909316926340c10f19926113ca929091600401614d53565b600060405180830381600087803b1580156113e457600080fd5b505af11580156113f8573d6000803e3d6000fd5b50505050602081810151825160408085015181516001600160a01b03948516958101959095529290911690830152606082015260800160405160208183030381529060405292505050919050565b600061145181611e7d565b6108da8383612d0b565b6000611465611e59565b6001600160a01b039290921660009081526007909201602052506040902060030154600160a01b90046001600160401b031690565b6114a2611ef2565b7f11a8cb5a02bd6c42679835e867ef2118ba78f088f8300511420c6603c21d9c786114cc81611e7d565b6114d68887612d9a565b6114e08885612d9a565b6114ea8883612d9a565b60005b8881101561094357600061158f8b8b8481811061150c5761150c614d6c565b905060200281019061151e9190614d82565b8b8b8681811061153057611530614d6c565b90506020028101906115429190614d82565b8b8b8881811061155457611554614d6c565b90506020028101906115669190614d82565b8b8b8a81811061157857611578614d6c565b905060200281019061158a9190614d82565b611f2a565b90508061165757600060028c8c858181106115ac576115ac614d6c565b90506020028101906115be9190614d82565b6040516115cc929190614dc8565b602060405180830381855afa1580156115e9573d6000803e3d6000fd5b5050506040513d601f19601f8201168201806040525081019061160c9190614cfd565b6040805160008152602081019182905291925082917fa3bb38c016dd194a0062f340c984fe709ae20573fac5363ec9d67f140864a99c9161164d9190614dd8565b60405180910390a2505b506001016114ed565b600061166b81611e7d565b610d1582612dc4565b600061167f81611e7d565b610d1582612e37565b600061169381611e7d565b610d1582612ea7565b60006116a6611ef2565b6000806116b587878787612f3b565b505091509150816116d95760405163778df52760e01b815260040160405180910390fd5b9150506116f3600160008051602061518583398151915255565b949350505050565b600061170681611e7d565b6108da8383612548565b600061171b81611e7d565b610d1582613026565b61172c611ef2565b336001600160a01b03841681148015906117585750826001600160a01b0316816001600160a01b031614155b156117765760405163553925af60e11b815260040160405180910390fd5b610b2c84466001600160f81b03166001600160a01b0386166001600160a01b03881686613093565b6000805160206151a5833981519152546001600160a01b031690565b60006117c461179e565b905090565b6000918252600080516020615165833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b60008051602061512583398151915261181981611e7d565b610d153383611e87565b61182b611ef2565b6118358382612d9a565b60005b8381101561196f57600061189286868481811061185757611857614d6c565b90506020028101906118699190614d82565b86868681811061187b5761187b614d6c565b905060200281019061188d9190614d82565b612f3b565b50505090508061196657600060028787858181106118b2576118b2614d6c565b90506020028101906118c49190614d82565b6040516118d2929190614dc8565b602060405180830381855afa1580156118ef573d6000803e3d6000fd5b5050506040513d601f19601f820116820180604052508101906119129190614cfd565b9050807fa3bb38c016dd194a0062f340c984fe709ae20573fac5363ec9d67f140864a99c60405161195c906040808252600090820181905260606020830181905282015260800190565b60405180910390a2505b50600101611838565b50611987600160008051602061518583398151915255565b50505050565b611995611ef2565b3361196f8186868686613093565b6000805160206151a583398151915254600090600160d01b900465ffffffffffff1660008051602061514583398151915281158015906119eb57504265ffffffffffff831610155b6119f757600080611a0d565b6001810154600160a01b900465ffffffffffff16825b92509250509091565b6000611a2181611e7d565b611a2b8787611e87565b611a358786612548565b611a3f8785612d0b565b611a498783613201565b611a53878461328e565b50505050505050565b6000806000611a69611e59565b6001600160a01b038816600090815260078201602052604090208054919250908511611aa857604051638e2d830960e01b815260040160405180910390fd5b876001600160a01b03166373cfc6b26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a9190614ce0565b15611b5557611b468787836000015488611b249190614d2c565b8460030160149054906101000a90046001600160401b031685600101546132f0565b919550909350611b7492505050565b611b6a8787836000015488611b249190614d2c565b9195509093505050505b94509492505050565b6000805160206151a58339815191525460009060008051602061514583398151915290600160d01b900465ffffffffffff168015801590611bc557504265ffffffffffff8216105b611bdf578154600160d01b900465ffffffffffff16611bf4565b6001820154600160a01b900465ffffffffffff165b9250505090565b6000611c05611c3b565b509050336001600160a01b03821614611c3357604051636116401160e11b8152336004820152602401610db7565b610979613383565b600080516020615145833981519152546001600160a01b03811691600160a01b90910465ffffffffffff1690565b7f97667070c54ef182b0f5858b034beac1b6f3089aa2d3188bb1e8929f4fa9b929611c9381611e7d565b6108da838361328e565b6000611cab85858585613420565b95945050505050565b6000611cbe611e59565b600401546001600160a01b0316919050565b81611cee57604051631fe1e13d60e11b815260040160405180910390fd5b610d158282613492565b6000611d0381611e7d565b6109796134ae565b6000611d1681611e7d565b6108da8383613201565b6000611d2a611e59565b600601546001600160a01b0316919050565b611d44611ef2565b6000611d4e611e59565b905080600101548603611d7457604051630d712d2160e21b815260040160405180910390fd5b611d8f818888888888604051602001610afe91815260200190565b50611da7600160008051602061518583398151915255565b505050505050565b6000611db9611e59565b6001600160a01b0392831660009081526007919091016020526040902060030154909116919050565b600080611ded611e59565b6001015492915050565b6000806000611e05846134b9565b9196909550909350915050565b600080516020615125833981519152611e2a81611e7d565b610d153383612548565b60006001600160e01b031982166318a4c3c360e11b14806108a357506108a382613576565b7f634af38ba2564e2d74d7d4e289db84afe1b0f1c101e1349f6428c2bd44a09b0090565b61097981336135ab565b6000611e91611e59565b6001600160a01b0384166000818152600783016020908152604091829020805483519081529182018790529394507fc9ed75bd1b7e1ec0b10331ec0f4df28b7c6c1c9b34a7215508bca77a638612b1910160405180910390a2919091555050565b600080516020615185833981519152805460011901611f2457604051633ee5aeb560e01b815260040160405180910390fd5b60029055565b6000806000806000611f3e8d8d8d8d612f3b565b935093509350935083611f58576000945050505050612218565b81611f6b8a8a63205d72a560e21b6135d6565b6000611fb7611f7d8b6004818f614df9565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061363292505050565b90506000611fc3611e59565b90506000836001600160a01b0316633b19e84a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612005573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120299190614e23565b6001600160a01b0387166000908152600784016020526040812060020154855192935090916120589190613701565b8451602086015160405163af25311d60e01b81529293506000926001600160a01b0389169263af25311d9261209892600401918252602082015260400190565b602060405180830381865afa1580156120b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d99190614cfd565b90506120e7818a8f8f613717565b508086101561210957604051638e2d830960e01b815260040160405180910390fd5b80156121d057604051632770a7eb60e21b81526001600160a01b03861690639dc29fac9061213d908b908590600401614d53565b600060405180830381600087803b15801561215757600080fd5b505af115801561216b573d6000803e3d6000fd5b50506040516340c10f1960e01b81526001600160a01b03881692506340c10f19915061219d9085908590600401614d53565b600060405180830381600087803b1580156121b757600080fd5b505af11580156121cb573d6000803e3d6000fd5b505050505b807ff08753429caf643a11ec73a1d53fbaf28d062bfb8bdb0d7c6a564ebd20fdcb598d8d604051612202929190614e69565b60405180910390a2600199505050505050505050505b98975050505050505050565b600160008051602061518583398151915255565b612243600080613775565b565b336001600160a01b038a16148015906122675750336001600160a01b03881614155b156122855760405163553925af60e11b815260040160405180910390fd5b61228e87613850565b6122ab57604051630f2ea0b160e31b815260040160405180910390fd5b6001600160a01b03871660026122cc826001600160f81b0346168c8b613420565b60028111156122dd576122dd614c09565b146122fb57604051631581c4c960e21b815260040160405180910390fd5b87600085900361234f576001600160a01b038916600090815260078d01602052604090205480871161234057604051638e2d830960e01b815260040160405180910390fd5b61234a8188614d2c565b965094505b606083156123725761236b6001600160a01b038d16898961386a565b905061238b565b6123888b846001600160a01b038f168b8b61396c565b90505b6004808e01548e54604051630a9fb35560e41b81526001600160a01b039092169263a9fb3550926123c492918a91600091889101614e7d565b60408051808303816000875af11580156123e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124069190614eac565b505085156124d057816001600160a01b03166340c10f19836001600160a01b0316633b19e84a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561245b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061247f9190614e23565b886040518363ffffffff1660e01b815260040161249d929190614d53565b600060405180830381600087803b1580156124b757600080fd5b505af11580156124cb573d6000803e3d6000fd5b505050505b6001600160a01b038216639dc29fac8d6124ea898b614ed0565b6040518363ffffffff1660e01b8152600401612507929190614d53565b600060405180830381600087803b15801561252157600080fd5b505af1158015612535573d6000803e3d6000fd5b5050505050505050505050505050505050565b6000612552611e59565b6001600160a01b0384166000818152600783016020908152604091829020600181015483519081529182018790529394507f5018e1e9226f7af379146e7eb39b88b3a058e3b0edff07fb275e74289dda34fd910160405180910390a2600101919091555050565b60006125c3611e59565b9050600083466001600160f81b03166040516020016125e3929190614d53565b60408051601f1981840301815291815281516020928301206000818152600286018452828120600187015482529093529120909150831561263e5760016000908152602082905260409020805460ff19166002179055612657565b60016000908152602082905260409020805460ff191690555b846001600160a01b03167f4d2950449b08e3396339fac49e659de29da01927f1fee34d98590e5c28a135f585604051612694911515815260200190565b60405180910390a25050505050565b6126ab613a74565b610d158282613abd565b6126bd613a74565b612243613b26565b6126cd613a74565b60006126d7611e59565b90506126e283612ea7565b6126eb82613026565b9384555050600190910155565b61270182610ccb565b61270a81611e7d565b6119878383613b2e565b6001600160a01b038116331461273d5760405163334bd91960e11b815260040160405180910390fd5b6108da8282613b9d565b60008060008061275a89898989896132f0565b9250925092508161278957604051630a01b54160e11b81526001600160401b0387166004820152602401610db7565b806127aa5760405163082938a160e01b815260048101869052602401610db7565b5090979650505050505050565b60006127c282613bf6565b90506127dc60008051602061512583398151915282610ced565b806001600160a01b03166373cfc6b26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561281a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061283e9190614ce0565b156108da5760068301546001600160a01b03161580159061286f575060068301546001600160a01b03828116911614155b1561288d5760405163097a76d360e31b815260040160405180910390fd5b6006830180546001600160a01b0383166001600160a01b0319909116179055505050565b60006128bb611e59565b9050600082466001600160f81b03166040516020016128db929190614d53565b60408051601f1981840301815291815281516020928301206000818152600286018452828120600187015482529093529082209092509080600160009081526020849052604090205460ff16600281111561293857612938614c09565b0361295e575060016000818152602083905260409020805460ff191660021790556129c0565b6002600160009081526020849052604090205460ff16600281111561298557612985614c09565b036129a75760016000908152602083905260409020805460ff191690556129c0565b604051631e6857ef60e21b815260040160405180910390fd5b846001600160a01b03167f4d2950449b08e3396339fac49e659de29da01927f1fee34d98590e5c28a135f582604051612694911515815260200190565b6000612a07611e59565b6006810180546001600160a01b038581166001600160a01b031983161790925591925016600081612a3e6001600160f81b03461690565b604051602001612a4f929190614d53565b60408051601f1981840301815290829052805160209182012060008181526002870190925292506001600160a01b0380871692908516917f7f20e25483f9f8d43d6f064900d3ce09760b2d4ab4826c1459e89c60ac5831ec91a350505050565b60408051606081018252600080825260208201819052918101919091526000612ada60206003614ee3565b612ae5906004614ed0565b835114612b2757612af860206003614ee3565b612b03906004614ed0565b83516040516361bf537160e11b815260048101929092526024820152604401610db7565b60208301516024840151604485015160648601516001600160e01b0319841663155b6b1360e01b14612b8557604051634632bef360e01b815263155b6b1360e01b60048201526001600160e01b031985166024820152604401610db7565b80600003612ba65760405163bb0cabf160e01b815260040160405180910390fd5b6000612bb183613bf6565b90506001600160a01b038116612bda576040516351a5d83960e01b815260040160405180910390fd5b6000612be585613bf6565b90506001600160a01b038116612c0e57604051630ca4d1c360e01b815260040160405180910390fd5b6040518060600160405280826001600160a01b03168152602001836001600160a01b031681526020018481525060028a604051612c4b9190614efa565b602060405180830381855afa158015612c68573d6000803e3d6000fd5b5050506040513d601f19601f82011682018060405250810190612c8b9190614cfd565b97509750505050505050915091565b60058301546001600160a01b0316801561198757604051632f0d338d60e11b815260048101849052602481018390526001600160a01b03821690635e1a671a90604401600060405180830381600087803b158015612cf757600080fd5b505af115801561095c573d6000803e3d6000fd5b6000612d15611e59565b6001600160a01b038481166000908152600783016020526040808220600301549051939450828616939216917f98b13b834cc7362f7965a7c806ce6de3ba8b38c9f35a407d0650bf7bac466b889190a36001600160a01b0392831660009081526007919091016020526040902060030180546001600160a01b03191691909216179055565b808214610d1557604051633f9b6c7760e21b81526004810183905260248101829052604401610db7565b6000612dce611b7d565b612dd742613c1f565b612de19190614f16565b9050612ded8282613c52565b60405165ffffffffffff821681526001600160a01b038316907f3377dc44241e779dd06afab5b788a35ca5f3b778836e2990bdb26a2a4b2e5ed69060200160405180910390a25050565b6000612e4282613cdf565b612e4b42613c1f565b612e559190614f16565b9050612e618282613775565b6040805165ffffffffffff8085168252831660208201527ff1038c18cf84a56e432fdbfaf746924b7ea511dfe03a6506a0ceba4888788d9b910160405180910390a15050565b6001600160a01b038116612ece57604051637eb5110560e11b815260040160405180910390fd5b6000612ed8611e59565b60048101546040519192506001600160a01b03808516929116907f038f2bf7924b7a1bbf759b99ac2b99fcc29a3981e21add650354abfad89a3bf390600090a360040180546001600160a01b0319166001600160a01b0392909216919091179055565b6000806000806000612f4b611e59565b600480820154604051635310428360e11b815292935060009283926001600160a01b039092169163a620850691612f8a918f918f918f918f9101614f35565b6000604051808303816000875af1158015612fa9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612fd19190810190614f67565b925092505081612ff157600080600080965096509650965050505061301b565b60008060008380602001905181019061300a9190614ffc565b969b50909950975093955050505050505b945094509450949050565b6000613030611e59565b60058101546040519192506001600160a01b03808516929116907fe7cfa96a5822cda6c84186494722763ab3f06adc731fabdd74d1c79d5db6a07390600090a360050180546001600160a01b0319166001600160a01b0392909216919091179055565b600061309d611e59565b9050600160068201546130c4906001600160a01b0316466001600160f81b03168888613420565b60028111156130d5576130d5614c09565b146130f35760405163b3f6ccfd60e01b815260040160405180910390fd5b600061310b86866001600160a01b038a168787613d27565b6004808401548454604051630a9fb35560e41b81529394506001600160a01b039091169263a9fb35509261315b92917389e3e4e7a699d6f131d893aeef7ee143706ac23a91600091889101614e7d565b60408051808303816000875af1158015613179573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319d9190614eac565b50506006820154604051632770a7eb60e21b81526001600160a01b0390911690639dc29fac906131d3908a908790600401614d53565b600060405180830381600087803b1580156131ed57600080fd5b505af1158015610cbe573d6000803e3d6000fd5b600061320b611e59565b6001600160a01b03841660009081526007820160205260408082206003810180546001600160401b03888116600160a01b81810267ffffffffffffffff60a01b1985161790945594519697509295919004919091169283917f4691de403b48fea6cdc2f7d816eb63f62b96b56b2fb25fdf55375943908a86df9190a35050505050565b6000613298611e59565b6001600160a01b0384166000908152600782016020526040808220600201805490869055905192935091849183917f43aafec62cbe5feda09499e1888afa1c53cc311278ca0cb40fe7d0275df16f9b9190a350505050565b6000806000806133008989613dc1565b9050600081600381111561331657613316614c09565b0361333457604051632695fabb60e01b815260040160405180910390fd5b856001600160401b0316871161335557600080600093509350935050613378565b600061336a6001600160401b03881689614d2c565b945060019350505050828210155b955095509592505050565b60008051602061514583398151915260008061339d611c3b565b915091506133b28165ffffffffffff16151590565b15806133c657504265ffffffffffff821610155b156133ee576040516319ca5ebb60e01b815265ffffffffffff82166004820152602401610db7565b61340060006133fb61179e565b613b9d565b5061340c600083613b2e565b505081546001600160d01b03191690915550565b60008061342b611e59565b90506000868660405160200161344b929190918252602082015260400190565b60408051601f19818403018152918152815160209283012060009081526002909401825280842087855282528084208685529091529091205460ff16915050949350505050565b61349b82610ccb565b6134a481611e7d565b6119878383613b9d565b612243600080613c52565b6000806000806134c7611e59565b6001600160a01b0386166000908152600782016020526040812091925086466001600160f81b0316604051602001613500929190614d53565b60408051601f1981840301815291815281516020928301206000818152600280880185528382206001808a0154845295529290208554938601549194509291600160009081526020859052604090205460ff16600281111561356457613564614c09565b14965096509650505050509193909250565b60006001600160e01b03198216637965db0b60e01b14806108a357506301ffc9a760e01b6001600160e01b03198316146108a3565b6135b582826117c9565b610d1557808260405163e2517d3f60e01b8152600401610db7929190614d53565b6001600160e01b031981166135eb838561503f565b6001600160e01b031916146108da5780613605838561503f565b604051632e35ad2d60e11b81526001600160e01b0319928316600482015291166024820152604401610db7565b604080518082019091526000808252602082015261365260206002614ee3565b8251146136895761366560206002614ee3565b82516040516371cccdf360e11b815260048101929092526024820152604401610db7565b600080838060200190518101906136a09190614eac565b91509150804211156136c85760405163954aba7160e01b815260048101829052602401610db7565b816000036136e95760405163af13986d60e01b815260040160405180910390fd5b60408051808201909152918252602082015292915050565b60008183106137105781610aa8565b5090919050565b613758838584848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613f2f92505050565b611987576040516379543d1d60e01b815260040160405180910390fd5b6000805160206151a58339815191525460008051602061514583398151915290600160d01b900465ffffffffffff168015613812574265ffffffffffff821610156137e857600182015482546001600160d01b0316600160a01b90910465ffffffffffff16600160d01b02178255613812565b6040517f2b1fa2edafe6f7b9e97c1a9e0c3660e645beb2dcaa2d45bdbf9beaf5472e1ec590600090a15b5060010180546001600160a01b0316600160a01b65ffffffffffff948516026001600160d01b031617600160d01b9290931691909102919091179055565b60006108a3600080516020615125833981519152836117c9565b60608160000361388d5760405163bb0cabf160e01b815260040160405180910390fd5b82516000036138af576040516351a5d83960e01b815260040160405180910390fd5b6000805b84518110156138f3578481815181106138ce576138ce614d6c565b01602001516001600160f81b031916156138eb57600191506138f3565b6001016138b3565b5080613912576040516351a5d83960e01b815260040160405180910390fd5b604051634e3e504760e01b906139309087908790879060240161506f565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529150509392505050565b60608160000361398f5760405163bb0cabf160e01b815260040160405180910390fd5b82516000036139b1576040516351a5d83960e01b815260040160405180910390fd5b6000805b84518110156139f5578481815181106139d0576139d0614d6c565b01602001516001600160f81b031916156139ed57600191506139f5565b6001016139b5565b5080613a14576040516351a5d83960e01b815260040160405180910390fd5b60405163aa3db85f60e01b90613a369089908990899089908990602401615098565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915291505095945050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661224357604051631afcd79f60e31b815260040160405180910390fd5b613ac5613a74565b6000805160206151458339815191526001600160a01b038216613afe57604051636116401160e11b815260006004820152602401610db7565b80546001600160d01b0316600160d01b65ffffffffffff851602178155611987600083613b2e565b612224613a74565b600060008051602061514583398151915283613b93576000613b4e61179e565b6001600160a01b031614613b7557604051631fe1e13d60e11b815260040160405180910390fd5b6001810180546001600160a01b0319166001600160a01b0385161790555b6116f38484614002565b600060008051602061514583398151915283158015613bd45750613bbf61179e565b6001600160a01b0316836001600160a01b0316145b15613bec576001810180546001600160a01b03191690555b6116f384846140ae565b600060a082901c15613c1b57604051630f75c10d60e01b815260040160405180910390fd5b5090565b600065ffffffffffff821115613c1b576040516306dfcc6560e41b81526030600482015260248101839052604401610db7565b6000805160206151458339815191526000613c6b611c3b565b835465ffffffffffff8616600160a01b026001600160d01b03199091166001600160a01b038816171784559150613cab90508165ffffffffffff16151590565b15611987576040517f8886ebfc4259abdbc16601dd8fb5678e54878f47b3c34836cfc51154a960510990600090a150505050565b600080613cea611b7d565b90508065ffffffffffff168365ffffffffffff1611613d1257613d0d83826150cf565b610aa8565b610aa865ffffffffffff841662069780613701565b606081600003613d4a5760405163bb0cabf160e01b815260040160405180910390fd5b82613d68576040516351a5d83960e01b815260040160405180910390fd5b5060408051602481019690965260448601949094526064850192909252608484015260a4808401919091528151808403909101815260c490920190526020810180516001600160e01b031663ccb4121560e01b17905290565b6000601682148015613df65750600083838281613de057613de0614d6c565b9050013560f81c60f81b6001600160f81b031916145b8015613e2b5750600560fa1b83836001818110613e1557613e15614d6c565b9050013560f81c60f81b6001600160f81b031916145b15613e38575060026108a3565b602282148015613e6f5750605160f81b8383600081613e5957613e59614d6c565b9050013560f81c60f81b6001600160f81b031916145b8015613ea45750600160fd1b83836001818110613e8e57613e8e614d6c565b9050013560f81c60f81b6001600160f81b031916145b15613eb1575060016108a3565b602282148015613ee45750600083838281613ece57613ece614d6c565b9050013560f81c60f81b6001600160f81b031916145b8015613f195750600160fd1b83836001818110613f0357613f03614d6c565b9050013560f81c60f81b6001600160f81b031916145b15613f26575060036108a3565b50600092915050565b60006001600160a01b0384163b15613fce57604051630b135d3f60e11b808252906001600160a01b03861690631626ba7e90613f7190879087906004016150ee565b602060405180830381865afa158015613f8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fb29190615107565b6001600160e01b03191614613fc957506000610aa8565b613ff8565b836001600160a01b0316613fe2848461412a565b6001600160a01b031614613ff857506000610aa8565b5060019392505050565b600060008051602061516583398151915261401d84846117c9565b61409d576000848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556140533390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019150506108a3565b60009150506108a3565b5092915050565b60006000805160206151658339815191526140c984846117c9565b1561409d576000848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a460019150506108a3565b60008060008061413a8686614154565b92509250925061414a82826141a1565b5090949350505050565b6000806000835160410361418e5760208401516040850151606086015160001a6141808882858561425a565b95509550955050505061419a565b50508151600091506002905b9250925092565b60008260038111156141b5576141b5614c09565b036141be575050565b60018260038111156141d2576141d2614c09565b036141f05760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561420457614204614c09565b036142255760405163fce698f760e01b815260048101829052602401610db7565b600382600381111561423957614239614c09565b03610d15576040516335e2f38360e21b815260048101829052602401610db7565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115614295575060009150600390508261431f565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156142e9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166143155750600092506001915082905061431f565b9250600091508190505b9450945094915050565b6001600160e01b03198116811461097957600080fd5b60006020828403121561435157600080fd5b8135610aa881614329565b6001600160a01b038116811461097957600080fd5b803561437c8161435c565b919050565b6000806040838503121561439457600080fd5b823561439f8161435c565b946020939093013593505050565b60008083601f8401126143bf57600080fd5b5081356001600160401b038111156143d657600080fd5b6020830191508360208285010111156143ee57600080fd5b9250929050565b6000806000806000806000806080898b03121561441157600080fd5b88356001600160401b038082111561442857600080fd5b6144348c838d016143ad565b909a50985060208b013591508082111561444d57600080fd5b6144598c838d016143ad565b909850965060408b013591508082111561447257600080fd5b61447e8c838d016143ad565b909650945060608b013591508082111561449757600080fd5b506144a48b828c016143ad565b999c989b5096995094979396929594505050565b6000602082840312156144ca57600080fd5b8135610aa88161435c565b6000806000606084860312156144ea57600080fd5b83356144f58161435c565b925060208401356145058161435c565b929592945050506040919091013590565b801515811461097957600080fd5b6000806000806080858703121561453a57600080fd5b84356145458161435c565b93506020850135925060408501359150606085013561456381614516565b939692955090935050565b803565ffffffffffff8116811461437c57600080fd5b60008060008060008060c0878903121561459d57600080fd5b86356145a88161435c565b95506145b66020880161456e565b9450604087013593506060870135925060808701356145d48161435c565b915060a08701356145e48161435c565b809150509295509295509295565b60006020828403121561460457600080fd5b5035919050565b6000806040838503121561461e57600080fd5b8235915060208301356146308161435c565b809150509250929050565b60008060008060006080868803121561465357600080fd5b853561465e8161435c565b9450602086013561466e8161435c565b935060408601356001600160401b0381111561468957600080fd5b614695888289016143ad565b96999598509660600135949350505050565b600080600080600060a086880312156146bf57600080fd5b853594506020860135935060408601359250606086013591506080860135600381106146ea57600080fd5b809150509295509295909350565b6000806000806080858703121561470e57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052604160045260246000fd5b60405160e081016001600160401b03811182821017156147625761476261472a565b60405290565b604051601f8201601f191681016001600160401b03811182821017156147905761479061472a565b604052919050565b60006001600160401b038211156147b1576147b161472a565b50601f01601f191660200190565b600082601f8301126147d057600080fd5b81356147e36147de82614798565b614768565b8181528460208386010111156147f857600080fd5b816020850160208301376000918101602001919091529392505050565b60006020828403121561482757600080fd5b81356001600160401b038082111561483e57600080fd5b9083019060e0828603121561485257600080fd5b61485a614740565b8235815260208301356020820152604083013560408201526060830135606082015261488860808401614371565b608082015261489960a08401614371565b60a082015260c0830135828111156148b057600080fd5b6148bc878286016147bf565b60c08301525095945050505050565b60005b838110156148e65781810151838201526020016148ce565b50506000910152565b600081518084526149078160208601602086016148cb565b601f01601f19169290920160200192915050565b602081526000610aa860208301846148ef565b6000806040838503121561494157600080fd5b823561494c8161435c565b915060208301356146308161435c565b60008083601f84011261496e57600080fd5b5081356001600160401b0381111561498557600080fd5b6020830191508360208260051b85010111156143ee57600080fd5b6000806000806000806000806080898b0312156149bc57600080fd5b88356001600160401b03808211156149d357600080fd5b6149df8c838d0161495c565b909a50985060208b01359150808211156149f857600080fd5b614a048c838d0161495c565b909850965060408b0135915080821115614a1d57600080fd5b614a298c838d0161495c565b909650945060608b0135915080821115614a4257600080fd5b506144a48b828c0161495c565b600060208284031215614a6157600080fd5b610aa88261456e565b60008060008060408587031215614a8057600080fd5b84356001600160401b0380821115614a9757600080fd5b614aa3888389016143ad565b90965094506020870135915080821115614abc57600080fd5b50614ac9878288016143ad565b95989497509550505050565b60008060008060408587031215614aeb57600080fd5b84356001600160401b0380821115614b0257600080fd5b614b0e8883890161495c565b90965094506020870135915080821115614b2757600080fd5b50614ac98782880161495c565b80356001600160401b038116811461437c57600080fd5b60008060008060008060c08789031215614b6457600080fd5b8635614b6f8161435c565b955060208701359450604087013593506060870135614b8d8161435c565b925060808701359150614ba260a08801614b34565b90509295509295509295565b60008060008060608587031215614bc457600080fd5b8435614bcf8161435c565b935060208501356001600160401b03811115614bea57600080fd5b614bf6878288016143ad565b9598909750949560400135949350505050565b634e487b7160e01b600052602160045260246000fd5b60038110614c3d57634e487b7160e01b600052602160045260246000fd5b9052565b602081016108a38284614c1f565b60008060408385031215614c6257600080fd5b8235614c6d8161435c565b9150614c7b60208401614b34565b90509250929050565b60008060008060008060c08789031215614c9d57600080fd5b8635614ca88161435c565b9550602087013594506040870135614cbf8161435c565b959894975094956060810135955060808101359460a0909101359350915050565b600060208284031215614cf257600080fd5b8151610aa881614516565b600060208284031215614d0f57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b818103818111156108a3576108a3614d16565b82815260408101610aa86020830184614c1f565b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112614d9957600080fd5b8301803591506001600160401b03821115614db357600080fd5b6020019150368190038213156143ee57600080fd5b8183823760009101908152919050565b6040815260006040820152606060208201526000610aa860608301846148ef565b60008085851115614e0957600080fd5b83861115614e1657600080fd5b5050820193919092039150565b600060208284031215614e3557600080fd5b8151610aa88161435c565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6020815260006116f3602083018486614e40565b848152836020820152826040820152608060608201526000614ea260808301846148ef565b9695505050505050565b60008060408385031215614ebf57600080fd5b505080516020909101519092909150565b808201808211156108a3576108a3614d16565b80820281158282048414176108a3576108a3614d16565b60008251614f0c8184602087016148cb565b9190910192915050565b65ffffffffffff8181168382160190808211156140a7576140a7614d16565b604081526000614f49604083018688614e40565b8281036020840152614f5c818587614e40565b979650505050505050565b600080600060608486031215614f7c57600080fd5b835192506020840151614f8e81614516565b60408501519092506001600160401b03811115614faa57600080fd5b8401601f81018613614fbb57600080fd5b8051614fc96147de82614798565b818152876020838501011115614fde57600080fd5b614fef8260208301602086016148cb565b8093505050509250925092565b60008060006060848603121561501157600080fd5b835161501c8161435c565b602085015190935061502d8161435c565b80925050604084015190509250925092565b6001600160e01b031981358181169160048510156150675780818660040360031b1b83161692505b505092915050565b83815260606020820152600061508860608301856148ef565b9050826040830152949350505050565b85815284602082015283604082015260a0606082015260006150bd60a08301856148ef565b90508260808301529695505050505050565b65ffffffffffff8281168282160390808211156140a7576140a7614d16565b8281526040602082015260006116f360408301846148ef565b60006020828403121561511957600080fd5b8151610aa88161432956fe843c3a00fa95510a35f425371231fd3fe4642e719cb4595160763d6d02594b50eef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d869840002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b6268009b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00eef3dac4538c82c8ace4063ab0acd2d15cdb5883aa1dff7c2673abb3d8698401a264697066735822122004a1c52036f678074227b397161c10fc314ac92fe1272c5c8fae07f86373c2df64736f6c63430008180033