0 txs
262.6k calls
constructor
constructor(address factory)
functions
ACCOUNT_VERSION
viewfunction ACCOUNT_VERSION() view returns (uint256)
approvedCreditor
viewfunction approvedCreditor(address) view returns (address)
ASSET_LIMIT
viewfunction ASSET_LIMIT() view returns (uint256)
creditor
viewfunction creditor() view returns (address)
erc1155Balances
viewfunction erc1155Balances(address, uint256) view returns (uint256)
erc20Balances
viewfunction erc20Balances(address) view returns (uint256)
FACTORY
viewfunction FACTORY() view returns (address)
generateAssetData
viewfunction generateAssetData() view returns (address[] assetAddresses, uint256[] assetIds, uint256[] assetAmounts)
getAccountValue
viewfunction getAccountValue(address numeraire_) view returns (uint256 accountValue)
getCollateralValue
viewfunction getCollateralValue() view returns (uint256 collateralValue)
getFreeMargin
viewfunction getFreeMargin() view returns (uint256 freeMargin)
getLiquidationValue
viewfunction getLiquidationValue() view returns (uint256 liquidationValue)
getUsedMargin
viewfunction getUsedMargin() view returns (uint256 usedMargin)
inAuction
viewfunction inAuction() view returns (bool)
isAccountLiquidatable
viewfunction isAccountLiquidatable() view returns (bool success)
isAccountUnhealthy
viewfunction isAccountUnhealthy() view returns (bool isUnhealthy)
isAssetManager
viewfunction isAssetManager(address, address) view returns (bool)
lastActionTimestamp
viewfunction lastActionTimestamp() view returns (uint32)
liquidator
viewfunction liquidator() view returns (address)
minimumMargin
viewfunction minimumMargin() view returns (uint96)
numeraire
viewfunction numeraire() view returns (address)
onERC1155Received
purefunction onERC1155Received(address, address, uint256, uint256, bytes) pure returns (bytes4)
onERC721Received
purefunction onERC721Received(address, address, uint256, bytes) pure returns (bytes4)
owner
viewfunction owner() view returns (address)
registry
viewfunction registry() view returns (address)
auctionBid
nonpayablefunction auctionBid(address[] assetAddresses, uint256[] assetIds, uint256[] assetAmounts, address bidder) returns (uint256[] assetAmounts_)
auctionBoughtIn
nonpayablefunction auctionBoughtIn(address recipient)
closeMarginAccount
nonpayablefunction closeMarginAccount()
deposit
nonpayablefunction deposit(address[] assetAddresses, uint256[] assetIds, uint256[] assetAmounts)
endAuction
nonpayablefunction endAuction()
flashAction
nonpayablefunction flashAction(address actionTarget, bytes actionData)
flashActionByCreditor
nonpayablefunction flashActionByCreditor(bytes callbackData, address actionTarget, bytes actionData) returns (uint256 accountVersion)
increaseOpenPosition
nonpayablefunction increaseOpenPosition(uint256 openPosition) returns (uint256 accountVersion)
initialize
nonpayablefunction initialize(address owner_, address registry_, address creditor_)
openMarginAccount
nonpayablefunction openMarginAccount(address newCreditor)
setApprovedCreditor
nonpayablefunction setApprovedCreditor(address creditor_)
setAssetManager
nonpayablefunction setAssetManager(address assetManager, bool value)
setNumeraire
nonpayablefunction setNumeraire(address numeraire_)
skim
nonpayablefunction skim(address token, uint256 id, uint256 type_)
startLiquidation
nonpayablefunction startLiquidation(address initiator) returns (address[] assetAddresses, uint256[] assetIds, uint256[] assetAmounts, address creditor_, uint96 minimumMargin_, uint256 openPosition, tuple[] assetAndRiskValues)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
upgradeAccount
nonpayablefunction upgradeAccount(address newImplementation, address newRegistry, uint256 newVersion, bytes data)
upgradeHook
nonpayablefunction upgradeHook(address oldImplementation, address oldRegistry, uint256 oldVersion, bytes data)
withdraw
nonpayablefunction withdraw(address[] assetAddresses, uint256[] assetIds, uint256[] assetAmounts)
events
AssetManagerSet
event AssetManagerSet(address indexed owner, address indexed assetManager, bool value)
MarginAccountChanged
event MarginAccountChanged(address indexed creditor, address indexed liquidator)
NumeraireSet
event NumeraireSet(address indexed numeraire)
errors
AccountInAuction
error AccountInAuction()
AccountNotLiquidatable
error AccountNotLiquidatable()
AccountUnhealthy
error AccountUnhealthy()
AlreadyInitialized
error AlreadyInitialized()
CoolDownPeriodNotPassed
error CoolDownPeriodNotPassed()
CreditorAlreadySet
error CreditorAlreadySet()
CreditorNotSet
error CreditorNotSet()
InvalidAccountVersion
error InvalidAccountVersion()
InvalidERC20Id
error InvalidERC20Id()
InvalidERC721Amount
error InvalidERC721Amount()
InvalidRegistry
error InvalidRegistry()
NoFallback
error NoFallback()
NoReentry
error NoReentry()
NumeraireNotFound
error NumeraireNotFound()
OnlyCreditor
error OnlyCreditor()
OnlyFactory
error OnlyFactory()
OnlyLiquidator
error OnlyLiquidator()
OnlyOwner
error OnlyOwner()
TooManyAssets
error TooManyAssets()
UnknownAsset
error UnknownAsset()
UnknownAssetType
error UnknownAssetType()
creation bytecode
0x60c06040526e22d473030f116ddee9f6b43ac78ba360a05234801562000023575f80fd5b50604051620053c4380380620053c483398101604081905262000046916200006a565b600280546001600160a01b031916331790556001600160a01b031660805262000099565b5f602082840312156200007b575f80fd5b81516001600160a01b038116811462000092575f80fd5b9392505050565b60805160a0516152f4620000d05f395f61319301525f81816103ca01528181610e26015281816127db01526136e001526152f45ff3fe608060405234801561000f575f80fd5b5060043610610272575f3560e01c806387bbaeb61161014f578063d5d4305b116100c1578063eac697c911610085578063eac697c914610645578063edfe1faf1461066f578063f23a6e6114610677578063f2fde38b14610697578063fb787d01146106aa578063fe67a54b146106b257610272565b8063d5d4305b146105de578063d80359f1146105e6578063df03e1a0146105f9578063e1c501001461060c578063e36db7851461063257610272565b8063adb33ab611610113578063adb33ab614610576578063b8eabab0146105a0578063bc68c676146105b3578063bfed6b03146105bb578063c047e563146105c3578063c0c53b8b146105cb57610272565b806387bbaeb61461050b5780638da5cb5b14610517578063907a94291461052a578063a0d9f5cd14610532578063ac891de41461056e57610272565b80634046ebae116101e8578063653b92b4116101ac578063653b92b41461045b578063656e87291461047b57806368719ee31461048e57806371a84c71146104a15780637afc01be146104de5780637b103999146104f157610272565b80634046ebae146103ec57806342c8d7151461040557806347cf6c9e1461040d5780634a1ec375146104355780635ae809511461044857610272565b80630b9252f01161023a5780630b9252f01461031d578063150b7a021461033057806321ab889d146103685780632723ae1f146103875780632c3c7173146103b25780632dd31000146103c557610272565b806304dababe1461028b57806305549367146102a257806305c0608c146102c857806305f1a68d146102f357806308f1bdaa14610306575b60405163b25befbf60e01b815260040160405180910390fd5b6102a0610299366004614201565b5050505050565b005b6102b56102b036600461426e565b6106ba565b6040519081526020015b60405180910390f35b6001546102db906001600160601b031681565b6040516001600160601b0390911681526020016102bf565b6102a0610301366004614285565b6107bf565b61030e610867565b6040516102bf93929190614319565b6102a061032b36600461435b565b610bee565b61034f61033e366004614201565b630a85bd0160e11b95945050505050565b6040516001600160e01b031990911681526020016102bf565b6102b5610376366004614285565b600a6020525f908152604090205481565b60045461039a906001600160a01b031681565b6040516001600160a01b0390911681526020016102bf565b6102a06103c0366004614201565b610e1b565b61039a7f000000000000000000000000000000000000000000000000000000000000000081565b5f5461039a90600160301b90046001600160a01b031681565b6102b56110f0565b61039a61041b366004614285565b600c6020525f90815260409020546001600160a01b031681565b6102a06104433660046143ab565b61118f565b6102b5610456366004614285565b61154c565b61046e610469366004614580565b6115ec565b6040516102bf9190614614565b6102a0610489366004614666565b611964565b6102a061049c366004614285565b611aa2565b6104ce6104af3660046146f8565b600d60209081525f928352604080842090915290825290205460ff1681565b60405190151581526020016102bf565b6102b56104ec36600461472f565b611d04565b60015461039a90600160601b90046001600160a01b031681565b5f546104ce9060ff1681565b60025461039a906001600160a01b031681565b6102b5612128565b6102a0610540366004614285565b335f908152600c6020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6104ce6121c9565b6102b561058436600461479c565b600b60209081525f928352604080842090915290825290205481565b6102a06105ae366004614666565b6121fb565b6102b5600181565b6102b5600f81565b6102b5612361565b6102a06105d93660046147c6565b6123bb565b6104ce61245b565b6102a06105f436600461481b565b612486565b6102a0610607366004614285565b6124f1565b61061f61061a366004614285565b612564565b6040516102bf9796959493929190614847565b60035461039a906001600160a01b031681565b5f5461065a9062010000900463ffffffff1681565b60405163ffffffff90911681526020016102bf565b6102b56127a1565b61034f610685366004614905565b63f23a6e6160e01b9695505050505050565b6102a06106a5366004614285565b6127d0565b6102a061289c565b6102a0612aae565b6003545f906001600160a01b031633146106e75760405163a9faa8f560e01b815260040160405180910390fd5b5f5460ff610100909104166001146107125760405163f464177760e01b815260040160405180910390fd5b5f805461020061ff001982161790915560ff16151560010361074757604051635441f54960e11b815260040160405180910390fd5b5f805465ffffffff00001916620100004263ffffffff1602179055811580159061078c5750600154610782906001600160601b03168361497d565b61078a612361565b105b156107aa576040516302fb7a9160e31b815260040160405180910390fd5b50505f805461ff001916610100179055600190565b6002546001600160a01b031633146107ea57604051635fc483c560e01b815260040160405180910390fd5b5f5460ff610100909104166001146108155760405163f464177760e01b815260040160405180910390fd5b5f805461ff0019166102001790556003546001600160a01b03161561084d5760405163ce5a86f760e01b815260040160405180910390fd5b61085681612b1a565b505f805461ff001916610100179055565b600754600654600554606092839283920101806001600160401b03811115610891576108916143dd565b6040519080825280602002602001820160405280156108ba578160200160208202803683370190505b509350806001600160401b038111156108d5576108d56143dd565b6040519080825280602002602001820160405280156108fe578160200160208202803683370190505b509250806001600160401b03811115610919576109196143dd565b604051908082528060200260200182016040528015610942578160200160208202803683370190505b506005549092505f90815b81831015610a05576005838154811061096857610968614990565b905f5260205f20015f9054906101000a90046001600160a01b031690508087848151811061099857610998614990565b60200260200101906001600160a01b031690816001600160a01b031681525050600a5f826001600160a01b03166001600160a01b031681526020019081526020015f20548584815181106109ee576109ee614990565b60200260200101818152505082600101925061094d565b6006545f905b80821015610ae15760068281548110610a2657610a26614990565b905f5260205f20015f9054906101000a90046001600160a01b0316925082898681518110610a5657610a56614990565b60200260200101906001600160a01b031690816001600160a01b03168152505060088281548110610a8957610a89614990565b905f5260205f200154888681518110610aa457610aa4614990565b6020026020010181815250506001878681518110610ac457610ac4614990565b602002602001018181525050846001019450816001019150610a0b565b6007545f90815b81831015610be05760078381548110610b0357610b03614990565b5f91825260209091200154600980546001600160a01b0390921697509084908110610b3057610b30614990565b905f5260205f2001549050858c8981518110610b4e57610b4e614990565b60200260200101906001600160a01b031690816001600160a01b031681525050808b8981518110610b8157610b81614990565b6020908102919091018101919091526001600160a01b0387165f908152600b8252604080822084835290925220548a518b908a908110610bc357610bc3614990565b602002602001018181525050876001019750826001019250610ae8565b505050505050505050909192565b6002546001600160a01b0316331480610c2b57506002546001600160a01b03165f908152600d6020908152604080832033845290915290205460ff165b610c745760405162461bcd60e51b8152602060048201526015602482015274209d1027b7363c9020b9b9b2ba1026b0b730b3b2b960591b60448201526064015b60405180910390fd5b5f5460ff61010090910416600114610c9f5760405163f464177760e01b815260040160405180910390fd5b5f805461020061ff001982161790915560ff161515600103610cd457604051635441f54960e11b815260040160405180910390fd5b5f805465ffffffff00001916620100004263ffffffff160217815580808080610cff87870188614b98565b94509450945094509450610d20855f0151866020015187604001518b612bf4565b83515115610d3257610d328489612e64565b5f8251118015610d43575082515115155b15610d5357610d5383838a613098565b60405163a129568d60e01b81525f906001600160a01b038a169063a129568d90610d81908590600401614ca3565b5f604051808303815f875af1158015610d9c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610dc39190810190614d76565b9050610ddc815f0151826020015183604001518c613204565b610de461245b565b15610e02576040516302fb7a9160e31b815260040160405180910390fd5b50505f805461ff00191661010017905550505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610e6457604051630636a15760e11b815260040160405180910390fd5b5f5460ff61010090910416600114610e8f5760405163f464177760e01b815260040160405180910390fd5b5f805461020061ff001982161790915560ff161515600103610ec457604051635441f54960e11b815260040160405180910390fd5b5f805463ffffffff4216620100000265ffffffff0000199091161790557f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8054600180546001600160a01b038981166001600160a01b0319851617909455878416600160601b8181026001600160601b0384161784559385169493909104909216918214801590610fc057506004805460405163e4ec552b60e01b81526001600160a01b039182169281019290925288169063e4ec552b90602401602060405180830381865afa158015610f9a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fbe9190614e46565b155b15610fde576040516311a1e69760e01b815260040160405180910390fd5b6003546001600160a01b03161561108057600354604051638c48052360e01b8152600481018890525f916001600160a01b031690638c480523906024016080604051808303815f875af1158015611037573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061105b9190614e61565b50505090508061107e5760405163a93eca7960e01b815260040160405180910390fd5b505b60405163026d5d5f60e11b815230906304dababe906110ab908690869086908b908b90600401614ed9565b5f604051808303815f87803b1580156110c2575f80fd5b505af11580156110d4573d5f803e3d5ffd5b50505f805461ff00191661010017905550505050505050505050565b6003545f906001600160a01b03168061110a575f91505090565b60015460405163c11002df60e01b81523060048201526001600160601b03909116906001600160a01b0383169063c11002df90602401602060405180830381865afa15801561115b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061117f9190614f17565b611189919061497d565b91505090565b6002546001600160a01b031633146111ba57604051635fc483c560e01b815260040160405180910390fd5b5f5460ff610100909104166001146111e55760405163f464177760e01b815260040160405180910390fd5b5f805463ffffffff4216620100000265ffffffffff0019909116176102001790556001600160a01b038316611287576040515f908190339047908381818185875af1925050503d805f8114611255576040519150601f19603f3d011682016040523d82523d5f602084013e61125a565b606091505b509150915081819061127f5760405162461bcd60e51b8152600401610c6b9190614ca3565b505050611539565b80600103611340576040516370a0823160e01b81523060048201525f906001600160a01b038516906370a0823190602401602060405180830381865afa1580156112d3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112f79190614f17565b6001600160a01b0385165f908152600a60205260409020549091508082111561133957611339336113288385614f2e565b6001600160a01b03881691906134df565b5050611539565b8060020361142f576006545f90815b818110156113c557856001600160a01b03166006828154811061137457611374614990565b5f918252602090912001546001600160a01b03161480156113af575084600882815481106113a4576113a4614990565b905f5260205f200154145b156113bd57600192506113c5565b60010161134f565b508161133957604051632142170760e11b81526001600160a01b038616906342842e0e906113fb90309033908990600401614f41565b5f604051808303815f87803b158015611412575f80fd5b505af1158015611424573d5f803e3d5ffd5b505050505050611539565b8060030361153957604051627eeac760e11b8152306004820152602481018390525f906001600160a01b0385169062fdd58e90604401602060405180830381865afa158015611480573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114a49190614f17565b6001600160a01b0385165f908152600b6020908152604080832087845290915290205490915080821115611536576001600160a01b03851663f242432a3033876114ee8688614f2e565b6040518563ffffffff1660e01b815260040161150d9493929190614f65565b5f604051808303815f87803b158015611524575f80fd5b505af1158015610e02573d5f803e3d5ffd5b50505b50505f805461ff00191661010017905550565b5f805f80611558610867565b60015460035460405163068e097b60e51b81529497509295509093506001600160a01b03600160601b90910481169263d1c12f60926115a4928a92911690889088908890600401614f9c565b602060405180830381865afa1580156115bf573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115e39190614f17565b95945050505050565b5f54606090600160301b90046001600160a01b03163314611620576040516399b01c4760e01b815260040160405180910390fd5b5f5460ff6101009091041660011461164b5760405163f464177760e01b815260040160405180910390fd5b5f805461ff001916610200178155600154604051630c3d587560e11b8152600160601b9091046001600160a01b03169063187ab0ea9061168f908990600401614ff9565b5f60405180830381865afa1580156116a9573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526116d0919081019061500b565b90505f805b875181101561193e578581815181106116f0576116f0614990565b60200260200101515f03156119365782818151811061171157611711614990565b602002602001015160010361176457600a5f89838151811061173557611735614990565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205491506118f5565b82818151811061177657611776614990565b602002602001015160020361184f5787818151811061179757611797614990565b60200260200101516001600160a01b0316636352211e8883815181106117bf576117bf614990565b60200260200101516040518263ffffffff1660e01b81526004016117e591815260200190565b602060405180830381865afa158015611800573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118249190615044565b6001600160a01b0316306001600160a01b031614611842575f611845565b60015b60ff1691506118f5565b82818151811061186157611861614990565b60200260200101516003036118dc57600b5f89838151811061188557611885614990565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f8883815181106118bf576118bf614990565b602002602001015181526020019081526020015f205491506118f5565b60405163b8bcee3f60e01b815260040160405180910390fd5b8186828151811061190857611908614990565b60200260200101511115611936578186828151811061192957611929614990565b6020026020010181815250505b6001016116d5565b5061194b87878787612bf4565b50505f805461ff00191661010017905550909392505050565b6002546001600160a01b0316331461198f57604051635fc483c560e01b815260040160405180910390fd5b5f5460ff610100909104166001146119ba5760405163f464177760e01b815260040160405180910390fd5b5f805461020061ff001982161790915560ff1615156001036119ef57604051635441f54960e11b815260040160405180910390fd5b611a8c8686808060200260200160405190810160405280939291908181526020018383602002808284375f9201919091525050604080516020808a028281018201909352898252909350899250889182918501908490808284375f92019190915250506040805160208089028281018201909352888252909350889250879182918501908490808284375f92019190915250339250613204915050565b50505f805461ff00191661010017905550505050565b6002546001600160a01b03163314611acd57604051635fc483c560e01b815260040160405180910390fd5b5f5460ff61010090910416600114611af85760405163f464177760e01b815260040160405180910390fd5b5f805461020061ff001982161790915560ff161515600103611b2d57604051635441f54960e11b815260040160405180910390fd5b5f805465ffffffff00001916620100004263ffffffff16021781558080611b52610867565b60035492955090935091506001600160a01b039081169085168103611b8a5760405163ce5a86f760e01b815260040160405180910390fd5b6001600160a01b03811615611c1957600154604051630578da2160e41b8152600160601b9091046001600160a01b03169063578da21090611bd590849088908890889060040161505f565b5f604051808303815f875af1158015611bf0573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c17919081019061500b565b505b600154604051631a1bb38960e21b8152600160601b9091046001600160a01b03169063686ece2490611c5590889088908890889060040161505f565b5f604051808303815f87803b158015611c6c575f80fd5b505af1158015611c7e573d5f803e3d5ffd5b50505050611c8b85613562565b6001600160a01b03811615611cef57604051632ce1ed1560e01b81523060048201526001600160a01b03821690632ce1ed15906024015f604051808303815f87803b158015611cd8575f80fd5b505af1158015611cea573d5f803e3d5ffd5b505050505b50505f805461ff001916610100179055505050565b5f805460ff61010090910416600114611d305760405163f464177760e01b815260040160405180910390fd5b5f805461020061ff001982161790915560ff161515600103611d6557604051635441f54960e11b815260040160405180910390fd5b5f805465ffffffff00001916620100004263ffffffff16021790556003546001600160a01b0316338114801590611db857506002546001600160a01b039081165f908152600c6020526040902054163314155b15611dd65760405163a9faa8f560e01b815260040160405180910390fd5b5f80808080611de7888a018a614b98565b604051637afcd25560e11b815294995092975090955093509150339063f5f9a4aa90611e19908f908f906004016150a8565b5f604051808303815f87803b158015611e30575f80fd5b505af1158015611e42573d5f803e3d5ffd5b50505050611e5d855f0151866020015187604001518d612bf4565b336001600160a01b03871614611faa576002546001600160a01b03165f908152600c6020526040812080546001600160a01b03191690558080611e9e610867565b919450925090506001600160a01b03891615611f3457600154604051630578da2160e41b8152600160601b9091046001600160a01b03169063578da21090611ef0908c9087908790879060040161505f565b5f604051808303815f875af1158015611f0b573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611f32919081019061500b565b505b600154604051631a1bb38960e21b8152600160601b9091046001600160a01b03169063686ece2490611f7090339087908790879060040161505f565b5f604051808303815f87803b158015611f87575f80fd5b505af1158015611f99573d5f803e3d5ffd5b50505050611fa633613562565b5050505b83515115611fbc57611fbc848b612e64565b5f8251118015611fcd575082515115155b15611fdd57611fdd83838c613098565b60405163a129568d60e01b81525f906001600160a01b038c169063a129568d9061200b908590600401614ca3565b5f604051808303815f875af1158015612026573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261204d9190810190614d76565b9050612066815f0151826020015183604001518e613204565b6001600160a01b038716158015906120875750336001600160a01b03881614155b156120e157604051632ce1ed1560e01b81523060048201526001600160a01b03881690632ce1ed15906024015f604051808303815f87803b1580156120ca575f80fd5b505af11580156120dc573d5f803e3d5ffd5b505050505b6120e961245b565b15612107576040516302fb7a9160e31b815260040160405180910390fd5b50505f805461ff0019166101001790555060019a9950505050505050505050565b5f805f80612134610867565b6001546004805460035460405163c068a4cd60e01b81529699509497509295506001600160a01b03600160601b90920482169463c068a4cd9461218294841693169189918991899101614f9c565b602060405180830381865afa15801561219d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121c19190614f17565b935050505090565b5f806121d36110f0565b6001549091506001600160601b0316811180156111895750806121f4612128565b1091505090565b6002546001600160a01b0316331461222657604051635fc483c560e01b815260040160405180910390fd5b5f5460ff610100909104166001146122515760405163f464177760e01b815260040160405180910390fd5b5f805461020061ff001982161790915560ff16151560010361228657604051635441f54960e11b815260040160405180910390fd5b5f805465ffffffff00001916620100004263ffffffff1602179055604080516020878102808301820190935287825261233b928991899182918501908490808284375f9201919091525050604080516020808a028281018201909352898252909350899250889182918501908490808284375f92019190915250506040805160208089028281018201909352888252909350889250879182918501908490808284375f92019190915250339250612bf4915050565b61234361245b565b15611a8c576040516302fb7a9160e31b815260040160405180910390fd5b5f805f8061236d610867565b60015460048054600354604051631b3355ef60e01b81529699509497509295506001600160a01b03600160601b909204821694631b3355ef9461218294841693169189918991899101614f9c565b600154600160601b90046001600160a01b0316156123eb5760405162dc149f60e41b815260040160405180910390fd5b6001600160a01b038216612412576040516311a1e69760e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0385811691909117909155600180546001600160601b0316600160601b858416021790558116156115395761153981613562565b5f806124656110f0565b6001549091506001600160601b0316811180156111895750806121f4612361565b335f818152600d602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f8e88e5512acfbeb8b54f789484f9625bced0405b0d3bc16df01bc28421e5f8c1910160405180910390a35050565b5f54600160301b90046001600160a01b03163314612522576040516399b01c4760e01b815260040160405180910390fd5b5f5460ff6101009091041660011461254d5760405163f464177760e01b815260040160405180910390fd5b5f805461ff001916610200179055610856816136aa565b60608060605f805f60605f60069054906101000a90046001600160a01b03166001600160a01b0316336001600160a01b0316146125b4576040516399b01c4760e01b815260040160405180910390fd5b5f5460ff610100909104166001146125df5760405163f464177760e01b815260040160405180910390fd5b5f8054600161020065ffffffffff0019909216620100004263ffffffff1602179190911760ff1916811790915560035490546001600160a01b0390911694506001600160601b03169250612631610867565b60015460048054604051633a137bf360e11b8152959c50939a509198506001600160a01b03600160601b909104811693637426f7e69361267c9392169189918d918d918d9101614f9c565b5f60405180830381865afa158015612696573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526126bd91908101906150bb565b6040516342f2e72760e11b81526001600160a01b038a811660048301526001600160601b0386166024830152919250908516906385e5ce4e906044016020604051808303815f875af1158015612715573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127399190614f17565b91505f61274f6001600160601b0385168461497d565b905082158061276657508061276383613735565b10155b1561278357604051627616e960e61b815260040160405180910390fd5b505f805461ff00191661010017905595979496509294919390929190565b5f806127ab612361565b90505f6127b66110f0565b90508082116127c5575f6127c9565b8082035b9250505090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461281957604051630636a15760e11b815260040160405180910390fd5b5f5460ff16151560010361284057604051635441f54960e11b815260040160405180910390fd5b5f5461285b9061012c9062010000900463ffffffff1661497d565b421161287a5760405163036a87d960e21b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b031633146128c757604051635fc483c560e01b815260040160405180910390fd5b5f5460ff610100909104166001146128f25760405163f464177760e01b815260040160405180910390fd5b5f805461020061ff001982161790915560ff16151560010361292757604051635441f54960e11b815260040160405180910390fd5b6003546001600160a01b03168061295057604051623cb2cf60e01b815260040160405180910390fd5b600380546001600160a01b03191690555f80546601000000000000600160d01b0319168155600180546bffffffffffffffffffffffff191690558080612994610867565b600154604051630578da2160e41b81529396509194509250600160601b90046001600160a01b03169063578da210906129d790879087908790879060040161505f565b5f604051808303815f875af11580156129f2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612a19919081019061500b565b50604051632ce1ed1560e01b81523060048201526001600160a01b03851690632ce1ed15906024015f604051808303815f87803b158015612a58575f80fd5b505af1158015612a6a573d5f803e3d5ffd5b50506040515f92508291507fa521c704a92cee73ea8410dc251eece5bd5362f6887c45f3e9566e817aee7369908290a350505f805461ff0019166101001790555050565b5f54600160301b90046001600160a01b03163314612adf576040516399b01c4760e01b815260040160405180910390fd5b5f5460ff61010090910416600114612b0a5760405163f464177760e01b815260040160405180910390fd5b5f805461ffff1916610100179055565b60015460405163e4ec552b60e01b81526001600160a01b038381166004830152600160601b9092049091169063e4ec552b90602401602060405180830381865afa158015612b6a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b8e9190614e46565b612bab57604051635958323160e01b815260040160405180910390fd5b600480546001600160a01b0319166001600160a01b0383169081179091556040517f9ed2bd12cb184cf96abec450551864ef441ead0f80ac1c3bab504ce07d5a84cd905f90a250565b600154600354604051630578da2160e41b81525f92600160601b90046001600160a01b039081169263578da21092612c38929091169089908990899060040161505f565b5f604051808303815f875af1158015612c53573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052612c7a919081019061500b565b90505f5b8551811015612e5c57838181518110612c9957612c99614990565b60200260200101515f0315612e5457818181518110612cba57612cba614990565b6020026020010151600103612d4457848181518110612cdb57612cdb614990565b60200260200101515f14612d02576040516318ffa99360e31b815260040160405180910390fd5b612d3f83878381518110612d1857612d18614990565b6020026020010151868481518110612d3257612d32614990565b60200260200101516137ad565b612e54565b818181518110612d5657612d56614990565b6020026020010151600203612ddc57838181518110612d7757612d77614990565b6020026020010151600114612d9f5760405163053dda6d60e21b815260040160405180910390fd5b612d3f83878381518110612db557612db5614990565b6020026020010151878481518110612dcf57612dcf614990565b6020026020010151613947565b818181518110612dee57612dee614990565b60200260200101516003036118dc57612d3f83878381518110612e1357612e13614990565b6020026020010151878481518110612e2d57612e2d614990565b6020026020010151878581518110612e4757612e47614990565b6020026020010151613bf5565b600101612c7e565b505050505050565b8151516002546001600160a01b03165f5b828110156102995784604001518181518110612e9357612e93614990565b60200260200101515f03156130905784606001518181518110612eb857612eb8614990565b6020026020010151600103612f2557612f20828587604001518481518110612ee257612ee2614990565b6020026020010151885f01518581518110612eff57612eff614990565b60200260200101516001600160a01b0316613e6b909392919063ffffffff16565b613090565b84606001518181518110612f3b57612f3b614990565b6020026020010151600203612fe4578451805182908110612f5e57612f5e614990565b60200260200101516001600160a01b03166342842e0e838688602001518581518110612f8c57612f8c614990565b60200260200101516040518463ffffffff1660e01b8152600401612fb293929190614f41565b5f604051808303815f87803b158015612fc9575f80fd5b505af1158015612fdb573d5f803e3d5ffd5b50505050613090565b84606001518181518110612ffa57612ffa614990565b60200260200101516003036118dc57845180518290811061301d5761301d614990565b60200260200101516001600160a01b031663f242432a83868860200151858151811061304b5761304b614990565b60200260200101518960400151868151811061306957613069614990565b60200260200101516040518563ffffffff1660e01b8152600401612fb29493929190614f65565b600101612e75565b8251515f816001600160401b038111156130b4576130b46143dd565b6040519080825280602002602001820160405280156130f857816020015b604080518082019091525f80825260208201528152602001906001900390816130d25790505b5090505f5b82811015613178578382828151811061311857613118614990565b60209081029190910101516001600160a01b039091169052855180518290811061314457613144614990565b60200260200101516020015182828151811061316257613162614990565b60209081029190910181015101526001016130fd565b5060025460405163edd9444b60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169263edd9444b926131d0928a9287929116908a906004016151bd565b5f604051808303815f87803b1580156131e7575f80fd5b505af11580156131f9573d5f803e3d5ffd5b505050505050505050565b600154604051630c3d587560e11b81525f91600160601b90046001600160a01b03169063187ab0ea9061323b908890600401614ff9565b5f60405180830381865afa158015613255573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261327c919081019061500b565b90505f5b855181101561345e5783818151811061329b5761329b614990565b60200260200101515f0315613456578181815181106132bc576132bc614990565b6020026020010151600103613346578481815181106132dd576132dd614990565b60200260200101515f14613304576040516318ffa99360e31b815260040160405180910390fd5b6133418387838151811061331a5761331a614990565b602002602001015186848151811061333457613334614990565b6020026020010151613efc565b613456565b81818151811061335857613358614990565b60200260200101516002036133de5783818151811061337957613379614990565b60200260200101516001146133a15760405163053dda6d60e21b815260040160405180910390fd5b613341838783815181106133b7576133b7614990565b60200260200101518784815181106133d1576133d1614990565b6020026020010151613f9b565b8181815181106133f0576133f0614990565b60200260200101516003036118dc576133418387838151811061341557613415614990565b602002602001015187848151811061342f5761342f614990565b602002602001015187858151811061344957613449614990565b6020026020010151614078565b600101613280565b50600754600654600554600f92916134759161497d565b61347f919061497d565b111561349e5760405163df8153c760e01b815260040160405180910390fd5b600154600354604051631a1bb38960e21b81526001600160a01b03600160601b90930483169263686ece24926131d09291169089908990899060040161505f565b5f60405163a9059cbb60e01b81526001600160a01b038416600482015282602482015260205f6044835f895af13d15601f3d1160015f51141617169150508061355c5760405162461bcd60e51b815260206004820152600f60248201526e1514905394d1915497d19052531151608a1b6044820152606401610c6b565b50505050565b5f805f80846001600160a01b0316638c48052360016040518263ffffffff1660e01b815260040161359591815260200190565b6080604051808303815f875af11580156135b1573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906135d59190614e61565b9350935093509350836135fb5760405163a93eca7960e01b815260040160405180910390fd5b600180546bffffffffffffffffffffffff19166001600160601b0383161790556004546001600160a01b038481169116146136395761363983612b1a565b5f80546601000000000000600160d01b031916600160301b6001600160a01b03858116918202929092178355600380546001600160a01b031916928916928317905560405190927fa521c704a92cee73ea8410dc251eece5bd5362f6887c45f3e9566e817aee736991a35050505050565b600280546001600160a01b0319166001600160a01b03838116918217909255604051637ccd031560e01b815260048101919091527f000000000000000000000000000000000000000000000000000000000000000090911690637ccd0315906024015f604051808303815f87803b158015613723575f80fd5b505af1158015610299573d5f803e3d5ffd5b5f805b825181101561379a5782818151811061375357613753614990565b60200260200101516040015183828151811061377157613771614990565b60200260200101515f01516137869190615274565b613790908361497d565b9150600101613738565b506137a76127108261528b565b92915050565b6001600160a01b0382165f908152600a6020526040812080548392906137d4908490614f2e565b90915550506001600160a01b0382165f908152600a6020526040812054900361392e576005546001819003613839576005805480613814576138146152aa565b5f8281526020902081015f1990810180546001600160a01b031916905501905561392c565b5f5b8181101561392a57836001600160a01b03166005828154811061386057613860614990565b5f918252602090912001546001600160a01b031603613922576005613886600184614f2e565b8154811061389657613896614990565b5f91825260209091200154600580546001600160a01b0390921691839081106138c1576138c1614990565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b0316021790555060058054806138fd576138fd6152aa565b5f8281526020902081015f1990810180546001600160a01b031916905501905561392a565b60010161383b565b505b505b6139426001600160a01b03831684836134df565b505050565b6008545f6001829003613a25578260085f8154811061396857613968614990565b905f5260205f2001541415806139ad5750836001600160a01b031660065f8154811061399657613996614990565b5f918252602090912001546001600160a01b031614155b156139cb5760405163c97d95cf60e01b815260040160405180910390fd5b60088054806139dc576139dc6152aa565b600190038181905f5260205f20015f905590556006805480613a0057613a006152aa565b5f8281526020902081015f1990810180546001600160a01b0319169055019055613bc5565b81811015613ba5578260088281548110613a4157613a41614990565b905f5260205f200154148015613a855750836001600160a01b031660068281548110613a6f57613a6f614990565b5f918252602090912001546001600160a01b0316145b15613b9d576008613a97600184614f2e565b81548110613aa757613aa7614990565b905f5260205f20015460088281548110613ac357613ac3614990565b5f918252602090912001556008805480613adf57613adf6152aa565b600190038181905f5260205f20015f905590556006600183613b019190614f2e565b81548110613b1157613b11614990565b5f91825260209091200154600680546001600160a01b039092169183908110613b3c57613b3c614990565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506006805480613b7857613b786152aa565b5f8281526020902081015f1990810180546001600160a01b0319169055019055613ba5565b600101613a25565b818103613bc55760405163c97d95cf60e01b815260040160405180910390fd5b604051632142170760e11b81526001600160a01b038516906342842e0e906131d090309089908890600401614f41565b6009546001600160a01b0384165f908152600b6020908152604080832086845290915281208054849290613c2a908490614f2e565b90915550506001600160a01b0384165f908152600b602090815260408083208684529091528120549003613e395780600103613cba576009805480613c7157613c716152aa565b600190038181905f5260205f20015f905590556007805480613c9557613c956152aa565b5f8281526020902081015f1990810180546001600160a01b0319169055019055613e39565b5f5b81811015613e37578360098281548110613cd857613cd8614990565b905f5260205f20015403613e2f57846001600160a01b031660078281548110613d0357613d03614990565b5f918252602090912001546001600160a01b031603613e2f576009613d29600184614f2e565b81548110613d3957613d39614990565b905f5260205f20015460098281548110613d5557613d55614990565b5f918252602090912001556009805480613d7157613d716152aa565b600190038181905f5260205f20015f905590556007600183613d939190614f2e565b81548110613da357613da3614990565b5f91825260209091200154600780546001600160a01b039092169183908110613dce57613dce614990565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506007805480613e0a57613e0a6152aa565b5f8281526020902081015f1990810180546001600160a01b0319169055019055613e37565b600101613cbc565b505b604051637921219560e11b81526001600160a01b0385169063f242432a906131d0903090899088908890600401614f65565b5f6040516323b872dd60e01b81526001600160a01b03851660048201526001600160a01b038416602482015282604482015260205f6064835f8a5af13d15601f3d1160015f5114161716915050806102995760405162461bcd60e51b81526020600482015260146024820152731514905394d1915497d19493d357d1905253115160621b6044820152606401610c6b565b613f116001600160a01b038316843084613e6b565b6001600160a01b0382165f908152600a602052604081205490819003613f7c57600580546001810182555f919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0385161790555b6001600160a01b039092165f908152600a602052604090209101905550565b604051632142170760e11b81526001600160a01b038316906342842e0e90613fcb90869030908690600401614f41565b5f604051808303815f87803b158015613fe2575f80fd5b505af1158015613ff4573d5f803e3d5ffd5b50506006805460018082019092557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319166001600160a01b03969096169590951790945550506008805492830181555f527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee39091015550565b604051637921219560e11b81526001600160a01b0384169063f242432a906140aa908790309087908790600401614f65565b5f604051808303815f87803b1580156140c1575f80fd5b505af11580156140d3573d5f803e3d5ffd5b5050506001600160a01b0384165f908152600b60209081526040808320868452909152812054915081900361417a576007805460018082019092557fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319166001600160a01b0387161790556009805491820181555f527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af018390555b6001600160a01b039093165f908152600b60209081526040808320948352939052919091209101905550565b6001600160a01b03811681146141ba575f80fd5b50565b5f8083601f8401126141cd575f80fd5b5081356001600160401b038111156141e3575f80fd5b6020830191508360208285010111156141fa575f80fd5b9250929050565b5f805f805f60808688031215614215575f80fd5b8535614220816141a6565b94506020860135614230816141a6565b93506040860135925060608601356001600160401b03811115614251575f80fd5b61425d888289016141bd565b969995985093965092949392505050565b5f6020828403121561427e575f80fd5b5035919050565b5f60208284031215614295575f80fd5b81356142a0816141a6565b9392505050565b5f815180845260208085019450602084015f5b838110156142df5781516001600160a01b0316875295820195908201906001016142ba565b509495945050505050565b5f815180845260208085019450602084015f5b838110156142df578151875295820195908201906001016142fd565b606081525f61432b60608301866142a7565b828103602084015261433d81866142ea565b9050828103604084015261435181856142ea565b9695505050505050565b5f805f6040848603121561436d575f80fd5b8335614378816141a6565b925060208401356001600160401b03811115614392575f80fd5b61439e868287016141bd565b9497909650939450505050565b5f805f606084860312156143bd575f80fd5b83356143c8816141a6565b95602085013595506040909401359392505050565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715614413576144136143dd565b60405290565b604051606081016001600160401b0381118282101715614413576144136143dd565b604080519081016001600160401b0381118282101715614413576144136143dd565b604051601f8201601f191681016001600160401b0381118282101715614485576144856143dd565b604052919050565b5f6001600160401b038211156144a5576144a56143dd565b5060051b60200190565b5f82601f8301126144be575f80fd5b813560206144d36144ce8361448d565b61445d565b8083825260208201915060208460051b8701019350868411156144f4575f80fd5b602086015b8481101561451957803561450c816141a6565b83529183019183016144f9565b509695505050505050565b5f82601f830112614533575f80fd5b813560206145436144ce8361448d565b8083825260208201915060208460051b870101935086841115614564575f80fd5b602086015b848110156145195780358352918301918301614569565b5f805f8060808587031215614593575f80fd5b84356001600160401b03808211156145a9575f80fd5b6145b5888389016144af565b955060208701359150808211156145ca575f80fd5b6145d688838901614524565b945060408701359150808211156145eb575f80fd5b506145f887828801614524565b9250506060850135614609816141a6565b939692955090935050565b602081525f6142a060208301846142ea565b5f8083601f840112614636575f80fd5b5081356001600160401b0381111561464c575f80fd5b6020830191508360208260051b85010111156141fa575f80fd5b5f805f805f806060878903121561467b575f80fd5b86356001600160401b0380821115614691575f80fd5b61469d8a838b01614626565b909850965060208901359150808211156146b5575f80fd5b6146c18a838b01614626565b909650945060408901359150808211156146d9575f80fd5b506146e689828a01614626565b979a9699509497509295939492505050565b5f8060408385031215614709575f80fd5b8235614714816141a6565b91506020830135614724816141a6565b809150509250929050565b5f805f805f60608688031215614743575f80fd5b85356001600160401b0380821115614759575f80fd5b61476589838a016141bd565b90975095506020880135915061477a826141a6565b9093506040870135908082111561478f575f80fd5b5061425d888289016141bd565b5f80604083850312156147ad575f80fd5b82356147b8816141a6565b946020939093013593505050565b5f805f606084860312156147d8575f80fd5b83356147e3816141a6565b925060208401356147f3816141a6565b91506040840135614803816141a6565b809150509250925092565b80151581146141ba575f80fd5b5f806040838503121561482c575f80fd5b8235614837816141a6565b915060208301356147248161480e565b60e081525f61485960e083018a6142a7565b60208382038185015261486c828b6142ea565b915060408483036040860152614882838b6142ea565b6001600160a01b038a166060878101919091526001600160601b038a16608088015260a0870189905286820360c08801528751808352848901955090918401905f5b818110156148f15786518051845286810151878501528501518584015295850195918301916001016148c4565b50909e9d5050505050505050505050505050565b5f805f805f8060a0878903121561491a575f80fd5b8635614925816141a6565b95506020870135614935816141a6565b9450604087013593506060870135925060808701356001600160401b0381111561495d575f80fd5b6146e689828a016141bd565b634e487b7160e01b5f52601160045260245ffd5b808201808211156137a7576137a7614969565b634e487b7160e01b5f52603260045260245ffd5b5f608082840312156149b4575f80fd5b6149bc6143f1565b905081356001600160401b03808211156149d4575f80fd5b6149e0858386016144af565b835260208401359150808211156149f5575f80fd5b614a0185838601614524565b60208401526040840135915080821115614a19575f80fd5b614a2585838601614524565b60408401526060840135915080821115614a3d575f80fd5b50614a4a84828501614524565b60608301525092915050565b5f60608284031215614a66575f80fd5b614a6e614419565b905081356001600160401b03811115614a85575f80fd5b8201601f81018413614a95575f80fd5b80356020614aa56144ce8361448d565b82815260069290921b83018101918181019087841115614ac3575f80fd5b938201935b83851015614b0d5760408589031215614adf575f80fd5b614ae761443b565b8535614af2816141a6565b81528584013584820152825260409094019390820190614ac8565b808652505080850135818501525050506040820135604082015292915050565b5f82601f830112614b3c575f80fd5b81356001600160401b03811115614b5557614b556143dd565b614b68601f8201601f191660200161445d565b818152846020838601011115614b7c575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f60a08688031215614bac575f80fd5b85356001600160401b0380821115614bc2575f80fd5b614bce89838a016149a4565b96506020880135915080821115614be3575f80fd5b614bef89838a016149a4565b95506040880135915080821115614c04575f80fd5b614c1089838a01614a56565b94506060880135915080821115614c25575f80fd5b614c3189838a01614b2d565b93506080880135915080821115614c46575f80fd5b50614c5388828901614b2d565b9150509295509295909350565b5f81518084525f5b81811015614c8457602081850181015186830182015201614c68565b505f602082860101526020601f19601f83011685010191505092915050565b602081525f6142a06020830184614c60565b5f82601f830112614cc4575f80fd5b81516020614cd46144ce8361448d565b8083825260208201915060208460051b870101935086841115614cf5575f80fd5b602086015b84811015614519578051614d0d816141a6565b8352918301918301614cfa565b5f82601f830112614d29575f80fd5b81516020614d396144ce8361448d565b8083825260208201915060208460051b870101935086841115614d5a575f80fd5b602086015b848110156145195780518352918301918301614d5f565b5f60208284031215614d86575f80fd5b81516001600160401b0380821115614d9c575f80fd5b9083019060808286031215614daf575f80fd5b614db76143f1565b825182811115614dc5575f80fd5b614dd187828601614cb5565b825250602083015182811115614de5575f80fd5b614df187828601614d1a565b602083015250604083015182811115614e08575f80fd5b614e1487828601614d1a565b604083015250606083015182811115614e2b575f80fd5b614e3787828601614d1a565b60608301525095945050505050565b5f60208284031215614e56575f80fd5b81516142a08161480e565b5f805f8060808587031215614e74575f80fd5b8451614e7f8161480e565b6020860151909450614e90816141a6565b6040860151909350614ea1816141a6565b6060959095015193969295505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03868116825285166020820152604081018490526080606082018190525f90614f0c9083018486614eb1565b979650505050505050565b5f60208284031215614f27575f80fd5b5051919050565b818103818111156137a7576137a7614969565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0394851681529290931660208301526040820152606081019190915260a0608082018190525f9082015260c00190565b6001600160a01b0386811682528516602082015260a0604082018190525f90614fc7908301866142a7565b8281036060840152614fd981866142ea565b90508281036080840152614fed81856142ea565b98975050505050505050565b602081525f6142a060208301846142a7565b5f6020828403121561501b575f80fd5b81516001600160401b03811115615030575f80fd5b61503c84828501614d1a565b949350505050565b5f60208284031215615054575f80fd5b81516142a0816141a6565b6001600160a01b03851681526080602082018190525f90615082908301866142a7565b828103604084015261509481866142ea565b90508281036060840152614f0c81856142ea565b602081525f61503c602083018486614eb1565b5f60208083850312156150cc575f80fd5b82516001600160401b038111156150e1575f80fd5b8301601f810185136150f1575f80fd5b80516150ff6144ce8261448d565b8181526060918202830184019184820191908884111561511d575f80fd5b938501935b838510156151655780858a031215615138575f80fd5b615140614419565b8551815286860151878201526040808701519082015283529384019391850191615122565b50979650505050505050565b5f815180845260208085019450602084015f5b838110156142df576151aa87835180516001600160a01b03168252602090810151910152565b6040969096019590820190600101615184565b608081525f60e0820186516060608085015281815180845261010086019150602093506020830192505f5b818110156152215761520e83855180516001600160a01b03168252602090810151910152565b92840192604092909201916001016151e8565b5050602089015160a0860152604089015160c086015284810360208601526152498189615171565b9250505061526260408401866001600160a01b03169052565b8281036060840152614f0c8185614c60565b80820281158282048414176137a7576137a7614969565b5f826152a557634e487b7160e01b5f52601260045260245ffd5b500490565b634e487b7160e01b5f52603160045260245ffdfea264697066735822122083fa64421f9db008b3776e4e4657f005b973a4d2378d524f49d0f78b903e2a1664736f6c63430008160033000000000000000000000000da14fdd72345c4d2511357214c5b89a919768e59