0 txs
2 calls
constructor
constructor()
functions
authorityAddress
viewfunction authorityAddress() view returns (address)
baseToken
viewfunction baseToken() view returns (address)
buyBackAndBurn
viewfunction buyBackAndBurn() view returns (bool)
disputeEndTime
viewfunction disputeEndTime() view returns (uint256)
disputeStartTime
viewfunction disputeStartTime() view returns (uint256)
feeWethORC
viewfunction feeWethORC() view returns (uint24)
getAuthorityAddress
viewfunction getAuthorityAddress() view returns (address)
getBaseToken
viewfunction getBaseToken() view returns (address)
getPlatformWallet
viewfunction getPlatformWallet() view returns (address)
MINI_DISPUTE_NUMBER_OF_ORACLES
viewfunction MINI_DISPUTE_NUMBER_OF_ORACLES() view returns (uint256)
miniDisputeCreated
viewfunction miniDisputeCreated(address) view returns (bool)
owner
viewfunction owner() view returns (address)
platformWallet
viewfunction platformWallet() view returns (address)
PRICE_PER_SIDE
viewfunction PRICE_PER_SIDE() view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
timeFeeWallet
viewfunction timeFeeWallet() view returns (address)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
userMiniDisputeContracts
viewfunction userMiniDisputeContracts(address, uint256) view returns (address)
userMiniDisputeCount
viewfunction userMiniDisputeCount(address) view returns (uint256)
createMiniDispute
nonpayablefunction createMiniDispute(uint256 dealSize, bool isLoyalty, uint256 eachUserDisputeCost, uint256 disputeParties, string disputeUri) returns (address)
initialize
nonpayablefunction initialize(address platform, address timeFeeAddress, address base, address authority, address platformOwner)
renounceOwnership
nonpayablefunction renounceOwnership()
setAuthorityAddress
nonpayablefunction setAuthorityAddress(address newAuthorityAddress)
setDisputeTimes
nonpayablefunction setDisputeTimes(uint256 startTime, uint256 endTime)
setPlatformWallet
nonpayablefunction setPlatformWallet(address newPlatformWallet)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
updateBuyBackAndBurn
nonpayablefunction updateBuyBackAndBurn(uint24 fee)
updateExistingAuthorityAddress
nonpayablefunction updateExistingAuthorityAddress(address miniDisputeContract, address newAuthorityAddress)
updateExistingPlatformWallet
nonpayablefunction updateExistingPlatformWallet(address miniDisputeContract, address newPlatformWallet)
updateMiniDisputePricePerSide
nonpayablefunction updateMiniDisputePricePerSide(uint256 newPricePerSide)
updateNoOfOracles
nonpayablefunction updateNoOfOracles(uint256 newNoOfOracles)
updateTimeFeeWalletAddress
nonpayablefunction updateTimeFeeWalletAddress(address newTimeFeeWallet)
updateTimeInMinutes
nonpayablefunction updateTimeInMinutes(uint256 startTime, uint256 endTime)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AuthorityAddressUpdated
event AuthorityAddressUpdated(address indexed previousAuthorityAddress, address indexed newAuthorityAddress)
BaseTokenIsUpdated
event BaseTokenIsUpdated(address indexed previousBaseToken, address indexed newBaseToken)
DisputeTimeUpdated
event DisputeTimeUpdated(uint256 startTime, uint256 endTime, address indexed disputeContract)
ExistingAuthorityAddressUpdated
event ExistingAuthorityAddressUpdated(address indexed miniDisputeContract, address indexed authorityAddress)
ExistingPlatformWalletUpdated
event ExistingPlatformWalletUpdated(address indexed miniDisputeContract, address indexed platfromWallet)
Initialized
event Initialized(uint64 version)
MiniDisputeCreated
event MiniDisputeCreated(address contractAddress, address creator, address baseToken, address authority, uint256 userMiniDisputeId)
MiniDisputePriceUpdated
event MiniDisputePriceUpdated(uint256 previousPrice, uint256 newPrice)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PlatformWalletIsUpdated
event PlatformWalletIsUpdated(address indexed previousPlatformWallet, address indexed newPlatformWallet)
TimeFeeWalletAddressUpdated
event TimeFeeWalletAddressUpdated(address indexed previousTimeFeeWallet, address indexed newTimeFeeWallet)
Upgraded
event Upgraded(address indexed implementation)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
ExistingAndNewAuthorityAddressCantBeSame
error ExistingAndNewAuthorityAddressCantBeSame()
ExistingAndNewPlatFormWalletCantBeSame
error ExistingAndNewPlatFormWalletCantBeSame()
ExistingAndNewWalletAddressCantBeSame
error ExistingAndNewWalletAddressCantBeSame()
FailedCall
error FailedCall()
InvalidAddress
error InvalidAddress()
InvalidAuthorityAddress
error InvalidAuthorityAddress()
InvalidBaseToken
error InvalidBaseToken()
InvalidFee
error InvalidFee()
InvalidInitialization
error InvalidInitialization()
InvalidMiniDisputeContractAddress
error InvalidMiniDisputeContractAddress()
InvalidPlatformOwner
error InvalidPlatformOwner()
InvalidPlatformWallet
error InvalidPlatformWallet()
InvalidValue
error InvalidValue()
MiniDisputeAddressNotFound
error MiniDisputeAddressNotFound()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a060405230608052348015610013575f5ffd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051615f886100f95f395f81816115350152818161155e01526116990152615f885ff3fe6080604052600436106101b5575f3560e01c80639b8f539c116100ea578063d9dc954f1161008e578063d9dc954f146104d5578063e47a9d4614610514578063e9eef88e14610531578063ea36212d14610567578063ee78e83514610586578063eea659c7146105b1578063f2fde38b146105d0578063f472bd5f146105ef578063fa2af9da14610603575f5ffd5b80639b8f539c146103c0578063a3cf25ab146103df578063ad3cb1cc146103fe578063b26b58011461043b578063bf0780db1461045a578063c55dae6314610479578063c970e99f14610498578063d76a09f4146104b8575f5ffd5b806352d1902d1161015c57806352d1902d146102b7578063579812a5146102cb5780635e159c53146102ea5780636d2035e51461030957806370b97de714610347578063715018a61461035c5780638831e9cf146103705780638da5cb5b1461038f57806398acd7a6146103a3575f5ffd5b80630571ae08146101b957806306d12411146101ee5780631459457a1461020f578063225edd101461022e57806322edce20146102515780633c695d4e146102705780634ab312181461028f5780634f1ef286146102a4575b5f5ffd5b3480156101c4575f5ffd5b506101d86101d33660046119bb565b610622565b6040516101e59190611a59565b60405180910390f35b3480156101f9575f5ffd5b5061020d610208366004611a6d565b610a09565b005b34801561021a575f5ffd5b5061020d610229366004611aa1565b610b09565b348015610239575f5ffd5b5061024360025481565b6040519081526020016101e5565b34801561025c575f5ffd5b5061020d61026b366004611b0e565b610d39565b34801561027b575f5ffd5b506007546101d8906001600160a01b031681565b34801561029a575f5ffd5b5061024360035481565b61020d6102b2366004611b44565b610db8565b3480156102c2575f5ffd5b50610243610dd7565b3480156102d6575f5ffd5b5061020d6102e5366004611c07565b610df2565b3480156102f5575f5ffd5b5061020d610304366004611c22565b610eaa565b348015610314575f5ffd5b50610337610323366004611c07565b600a6020525f908152604090205460ff1681565b60405190151581526020016101e5565b348015610352575f5ffd5b5061024360015481565b348015610367575f5ffd5b5061020d610fcc565b34801561037b575f5ffd5b5061020d61038a366004611c07565b610fdf565b34801561039a575f5ffd5b506101d8611099565b3480156103ae575f5ffd5b506004546001600160a01b03166101d8565b3480156103cb575f5ffd5b5061020d6103da366004611c59565b6110c7565b3480156103ea575f5ffd5b506006546101d8906001600160a01b031681565b348015610409575f5ffd5b5061042e604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101e59190611c9e565b348015610446575f5ffd5b5061020d610455366004611c59565b611114565b348015610465575f5ffd5b5061020d610474366004611c07565b61119f565b348015610484575f5ffd5b506004546101d8906001600160a01b031681565b3480156104a3575f5ffd5b5060065461033790600160a01b900460ff1681565b3480156104c3575f5ffd5b506005546001600160a01b03166101d8565b3480156104e0575f5ffd5b506101d86104ef366004611cb0565b600860209081525f92835260408084209091529082529020546001600160a01b031681565b34801561051f575f5ffd5b506007546001600160a01b03166101d8565b34801561053c575f5ffd5b5060065461055390600160a81b900462ffffff1681565b60405162ffffff90911681526020016101e5565b348015610572575f5ffd5b5061020d610581366004611c22565b611257565b348015610591575f5ffd5b506102436105a0366004611c07565b60096020525f908152604090205481565b3480156105bc575f5ffd5b5061020d6105cb366004611a6d565b611379565b3480156105db575f5ffd5b5061020d6105ea366004611c07565b6113f2565b3480156105fa575f5ffd5b506102435f5481565b34801561060e575f5ffd5b506005546101d8906001600160a01b031681565b5f5f3390505f604051806101c001604052808a81526020015f5481526020018881526020015f815260200189151581526020015f8152602001600254426106699190611cee565b81526020016003546002544261067f9190611cee565b6106899190611cee565b81526020018781526020015f815260200160018152602001878152602001836001600160a01b0316815260200186868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250505091525090506001861161071057604051632a9ffab760e21b815260040160405180910390fd5b87156107ab575f610721878b611d01565b9050805f03610743576040516358d620b360e01b815260040160405180910390fd5b5f6107508b611388611435565b90505f61075d8983611d01565b9050805f0361077f576040516358d620b360e01b815260040160405180910390fd5b60a084018290526001546107938285611cee565b61079d9190611cee565b6040850152506107b4915050565b60015460408201525b6005546006546004546007546001545f805460035460405192976001600160a01b0390811697808216978216969091169493309260ff600160a01b8404169262ffffff600160a81b909104169161080a906119ae565b6001600160a01b039a8b168152988a1660208a015296891660408901529488166060880152608087019390935260a086019190915290941660c084015292151560e083015262ffffff90921661010082015261012081019190915261014001604051809103905ff080158015610882573d5f5f3e3d5ffd5b50905081604001518810156108aa576040516358d620b360e01b815260040160405180910390fd5b60408201516004546108cb916001600160a01b039091169085908490611457565b60405163712c751960e11b81526001600160a01b0382169063e258ea32906108f7908590600401611d20565b5f604051808303815f87803b15801561090e575f5ffd5b505af1158015610920573d5f5f3e3d5ffd5b505050506001600160a01b038381165f818152600960208181526040808420805460088452828620818752845291852080546001600160a01b0319169789169790971790965593835252825491929061097883611ded565b90915550506001600160a01b038281165f818152600a6020908152604091829020805460ff1916600117905560045460075483519485528986169285019290925284168383015290921660608201526080810183905290517f131e4c5935cf83cea16f8de53db3480b67fd5bd3a6bbfb950fb0868e5a2653fb9160a0908290030190a1509998505050505050505050565b610a116114b7565b811580610a1c575080155b15610a3a57604051632a9ffab760e21b815260040160405180910390fd5b816002541480610a4b575080600354145b15610a6957604051632a9ffab760e21b815260040160405180910390fd5b80821115610a8a57604051632a9ffab760e21b815260040160405180910390fd5b808203610aaa57604051632a9ffab760e21b815260040160405180910390fd5b610ab78262015180611e05565b600255610ac78162015180611e05565b600355604080518381526020810183905230917f2cc057811f9e8dd446f08ff1434462e69ebb495dbbb0e58ec92e77490a37b990910160405180910390a25050565b5f610b126114e9565b805490915060ff600160401b82041615906001600160401b03165f81158015610b385750825b90505f826001600160401b03166001148015610b535750303b155b905081158015610b61575080155b15610b7f5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610ba957845460ff60401b1916600160401b1785555b610bb286611511565b610bba611522565b6001600160a01b038a16610be1576040516387ac4dbf60e01b815260040160405180910390fd5b6001600160a01b038916610c085760405163e6c4247b60e01b815260040160405180910390fd5b6001600160a01b038816610c2f57604051630722152560e11b815260040160405180910390fd5b6001600160a01b038716610c56576040516322203f5960e01b815260040160405180910390fd5b6001600160a01b038616610c7d57604051631397094360e21b815260040160405180910390fd5b600580546001600160a01b03199081166001600160a01b038d811691909117909255600680546004805484168d8616179055600780549093168b851617909255621e848060015560035f8190556102586002556104b09055918b166001600160c01b03199091161790558315610d2d57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b610d416114b7565b600654600160a01b900460ff1615610d63576006805460ff60a01b1916905550565b8062ffffff165f03610d88576040516358d620b360e01b815260040160405180910390fd5b6006805460ff60a01b1962ffffff8416600160a81b021663ffffffff60a01b1990911617600160a01b1790555b50565b610dc061152a565b610dc9826115ce565b610dd382826115d6565b5050565b5f610de061168e565b505f516020615f335f395f51905f5290565b610dfa6114b7565b6001600160a01b038116610e215760405163e6c4247b60e01b815260040160405180910390fd5b6006546001600160a01b03808316911603610e4f576040516369a7332160e01b815260040160405180910390fd5b6006546040516001600160a01b038084169216907f62f89c5f9ac38231a06486e252729814bf16bf7e1e766076dad77dcde9f41d7c905f90a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b610eb26114b7565b6001600160a01b038216610ed95760405163471b429560e11b815260040160405180910390fd5b6001600160a01b0382165f908152600a602052604090205460ff16610f115760405163601125a160e11b815260040160405180910390fd5b6001600160a01b038116610f38576040516322203f5960e01b815260040160405180910390fd5b60405163ccfc456960e01b81526001600160a01b0383169063ccfc456990610f64908490600401611a59565b5f604051808303815f87803b158015610f7b575f5ffd5b505af1158015610f8d573d5f5f3e3d5ffd5b50506040516001600160a01b038085169350851691507f1f2a1174c083e293cecbc3d063657f97b3d3fd1d84d1b6484d6cba850b6e671e905f90a35050565b610fd46114b7565b610fdd5f6116d7565b565b610fe76114b7565b6005546001600160a01b0316611010576040516387ac4dbf60e01b815260040160405180910390fd5b6005546001600160a01b0380831691160361103e5760405163c951884960e01b815260040160405180910390fd5b6005546040516001600160a01b038084169216907fafdafba178415f38a81e9ce31168ffa3ce22045e659b3dbb40405bf2ac3e7078905f90a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6110cf6114b7565b805f036110ef57604051632a9ffab760e21b815260040160405180910390fd5b5f54810361111057604051632a9ffab760e21b815260040160405180910390fd5b5f55565b61111c6114b7565b805f0361113c576040516358d620b360e01b815260040160405180910390fd5b600154810361115e576040516358d620b360e01b815260040160405180910390fd5b60015460408051918252602082018390527f1101e288596d8a4696e464d9b5a4074fba67926543c6db08820bb05051f2d6b0910160405180910390a1600155565b6111a76114b7565b6001600160a01b0381166111ce576040516322203f5960e01b815260040160405180910390fd5b6007546001600160a01b038083169116036111fc57604051634e7ec35760e01b815260040160405180910390fd5b6007546040516001600160a01b038084169216907f741ee0e619c436098dff0f2be43023c24aef6c4c3134ca5db37746bb1088d0df905f90a3600780546001600160a01b0319166001600160a01b0392909216919091179055565b61125f6114b7565b6001600160a01b0382166112865760405163471b429560e11b815260040160405180910390fd5b6001600160a01b0382165f908152600a602052604090205460ff166112be5760405163601125a160e11b815260040160405180910390fd5b6001600160a01b0381166112e5576040516387ac4dbf60e01b815260040160405180910390fd5b604051630ada4ef360e41b81526001600160a01b0383169063ada4ef3090611311908490600401611a59565b5f604051808303815f87803b158015611328575f5ffd5b505af115801561133a573d5f5f3e3d5ffd5b50506040516001600160a01b038085169350851691507fae03c08a3f7078bbdc6986e7f8f7fda4a75c215f0adda92c192919c27e9f92e2905f90a35050565b6113816114b7565b81158061138c575080155b156113aa57604051632a9ffab760e21b815260040160405180910390fd5b8160025414806113bb575080600354145b156113d957604051632a9ffab760e21b815260040160405180910390fd5b6113e482603c611e05565b600255610ac781603c611e05565b6113fa6114b7565b6001600160a01b03811661142c575f604051631e4fbdf760e01b81526004016114239190611a59565b60405180910390fd5b610db5816116d7565b5f620f42406114448385611e05565b61144e9190611d01565b90505b92915050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526114b1908590611747565b50505050565b336114c0611099565b6001600160a01b031614610fdd573360405163118cdaa760e01b81526004016114239190611a59565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00611451565b6115196117aa565b610db5816117cf565b610fdd6117aa565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806115b057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166115a45f516020615f335f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15610fdd5760405163703e46dd60e11b815260040160405180910390fd5b610db56114b7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611630575060408051601f3d908101601f1916820190925261162d91810190611e1c565b60015b61164f5781604051634c9c8ce360e01b81526004016114239190611a59565b5f516020615f335f395f51905f52811461167f57604051632a87526960e21b815260048101829052602401611423565b61168983836117d7565b505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdd5760405163703e46dd60e11b815260040160405180910390fd5b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f5f60205f8451602086015f885af180611766576040513d5f823e3d81fd5b50505f513d9150811561177d57806001141561178a565b6001600160a01b0384163b155b156114b15783604051635274afe760e01b81526004016114239190611a59565b6117b261182c565b610fdd57604051631afcd79f60e31b815260040160405180910390fd5b6113fa6117aa565b6117e082611845565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561182457611689828261189f565b610dd3611911565b5f6118356114e9565b54600160401b900460ff16919050565b806001600160a01b03163b5f036118715780604051634c9c8ce360e01b81526004016114239190611a59565b5f516020615f335f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b0316846040516118bb9190611e33565b5f60405180830381855af49150503d805f81146118f3576040519150601f19603f3d011682016040523d82523d5f602084013e6118f8565b606091505b5091509150611908858383611930565b95945050505050565b3415610fdd5760405163b398979f60e01b815260040160405180910390fd5b6060826119455761194082611986565b61197f565b815115801561195c57506001600160a01b0384163b155b1561197c5783604051639996b31560e01b81526004016114239190611a59565b50805b9392505050565b80511561199557805160208201fd5b60405163d6bda27560e01b815260040160405180910390fd5b6140e980611e4a83390190565b5f5f5f5f5f5f60a087890312156119d0575f5ffd5b86359550602087013580151581146119e6575f5ffd5b9450604087013593506060870135925060808701356001600160401b03811115611a0e575f5ffd5b8701601f81018913611a1e575f5ffd5b80356001600160401b03811115611a33575f5ffd5b896020828401011115611a44575f5ffd5b60208201935080925050509295509295509295565b6001600160a01b0391909116815260200190565b5f5f60408385031215611a7e575f5ffd5b50508035926020909101359150565b6001600160a01b0381168114610db5575f5ffd5b5f5f5f5f5f60a08688031215611ab5575f5ffd5b8535611ac081611a8d565b94506020860135611ad081611a8d565b93506040860135611ae081611a8d565b92506060860135611af081611a8d565b91506080860135611b0081611a8d565b809150509295509295909350565b5f60208284031215611b1e575f5ffd5b813562ffffff8116811461197f575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215611b55575f5ffd5b8235611b6081611a8d565b915060208301356001600160401b03811115611b7a575f5ffd5b8301601f81018513611b8a575f5ffd5b80356001600160401b03811115611ba357611ba3611b30565b604051601f8201601f19908116603f011681016001600160401b0381118282101715611bd157611bd1611b30565b604052818152828201602001871015611be8575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f60208284031215611c17575f5ffd5b813561197f81611a8d565b5f5f60408385031215611c33575f5ffd5b8235611c3e81611a8d565b91506020830135611c4e81611a8d565b809150509250929050565b5f60208284031215611c69575f5ffd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61144e6020830184611c70565b5f5f60408385031215611cc1575f5ffd5b8235611ccc81611a8d565b946020939093013593505050565b634e487b7160e01b5f52601160045260245ffd5b8082018082111561145157611451611cda565b5f82611d1b57634e487b7160e01b5f52601260045260245ffd5b500490565b60208152815160208201526020820151604082015260408201516060820152606082015160808201525f6080830151611d5d60a084018215159052565b5060a083015160c083015260c083015160e083015260e0830151610100830152610100830151610120830152610120830151610140830152610140830151610160830152610160830151610180830152610180830151611dc96101a08401826001600160a01b03169052565b506101a08301516101c080840152611de56101e0840182611c70565b949350505050565b5f60018201611dfe57611dfe611cda565b5060010190565b808202811582820484141761145157611451611cda565b5f60208284031215611e2c575f5ffd5b5051919050565b5f82518060208501845e5f92019182525091905056fe60e060405234801561000f575f5ffd5b506040516140e93803806140e983398101604081905261002e9161020c565b836001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6100658161018f565b506001600160a01b038a1661008d576040516387ac4dbf60e01b815260040160405180910390fd5b6001600160a01b0388166100b457604051630722152560e11b815260040160405180910390fd5b6001600160a01b0387166100db576040516322203f5960e01b815260040160405180910390fd5b855f036100fb5760405163d7ba92d360e01b815260040160405180910390fd5b600180546001600160a01b039b8c166001600160a01b031991821617909155978a1660805260038054998b16998916999099179098556002805496909916959096169490941790965560a09190915260c0526017805462ffffff909316600160a01b0262ffffff60a01b19921515600160b81b029290921663ffffffff60a01b1990931692909217179055601955506102c6565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101f2575f5ffd5b50565b805162ffffff81168114610207575f5ffd5b919050565b5f5f5f5f5f5f5f5f5f5f6101408b8d031215610226575f5ffd5b8a51610231816101de565b60208c0151909a50610242816101de565b60408c0151909950610253816101de565b60608c0151909850610264816101de565b60808c015160a08d015160c08e01519299509097509550610284816101de565b60e08c01519094508015158114610299575f5ffd5b92506102a86101008c016101f5565b91505f6101208c01519050809150509295989b9194979a5092959850565b60805160a05160c051613dac61033d5f395f81816112bd015261243b01525f8181612417015261247b01525f8181610ca101528181610dd101528181610e82015281816113370152818161168f01528181611b9101528181611c2901528181611d4401528181611dd601526131410152613dac5ff3fe608060405260043610610176575f3560e01c80639f10a50d116100c9578063db0fff3711610078578063db0fff371461044f578063e258ea3214610464578063e47a9d4614610483578063ea35e805146104a0578063f1545c0f146104b4578063f2fde38b146104d3578063fff097d0146104f2575f5ffd5b80639f10a50d14610372578063ada4ef3014610393578063b557478a146103b2578063b88a802f146103e0578063ccfc4569146103f4578063d5af196b14610413578063d76a09f414610432575f5ffd5b80637afbf480116101255780637afbf480146102a35780638a5fc0f9146102d75780638da5cb5b146102f05780638e7ea5b21461030c578063955d7b561461032057806398c079381461033e5780639b46a16414610353575f5ffd5b806309eef43e146101815780630e91bb1a146101c45780631973f028146101f057806356069c0a14610228578063590e1ae31461024b578063715018a61461026157806373b2e80e14610275575f5ffd5b3661017d57005b5f5ffd5b34801561018c575f5ffd5b506101af61019b366004613624565b601b6020525f908152604090205460ff1681565b60405190151581526020015b60405180910390f35b3480156101cf575f5ffd5b506101e36101de36600461363d565b610511565b6040516101bb9190613654565b3480156101fb575f5ffd5b50610204610539565b6040805193845260208401929092526001600160a01b0316908201526060016101bb565b348015610233575f5ffd5b5061023d60185481565b6040519081526020016101bb565b348015610256575f5ffd5b5061025f610a2d565b005b34801561026c575f5ffd5b5061025f610f09565b348015610280575f5ffd5b506101af61028f366004613624565b601f6020525f908152604090205460ff1681565b3480156102ae575f5ffd5b5061023d6102bd366004613624565b6001600160a01b03165f908152601c602052604090205490565b3480156102e2575f5ffd5b506015546101af9060ff1681565b3480156102fb575f5ffd5b505f546001600160a01b03166101e3565b348015610317575f5ffd5b5061023d610f1a565b34801561032b575f5ffd5b506015546101af90610100900460ff1681565b348015610349575f5ffd5b5061023d60135481565b34801561035e575f5ffd5b5061025f61036d3660046136ac565b610f46565b34801561037d575f5ffd5b50610386611787565b6040516101bb9190613721565b34801561039e575f5ffd5b5061025f6103ad366004613624565b611919565b3480156103bd575f5ffd5b506101af6103cc366004613624565b601e6020525f908152604090205460ff1681565b3480156103eb575f5ffd5b5061025f6119d1565b3480156103ff575f5ffd5b5061025f61040e366004613624565b611e4e565b34801561041e575f5ffd5b5061025f61042d366004613806565b611f06565b34801561043d575f5ffd5b506001546001600160a01b03166101e3565b34801561045a575f5ffd5b5061023d60045481565b34801561046f575f5ffd5b5061025f61047e366004613926565b612368565b34801561048e575f5ffd5b506002546001600160a01b03166101e3565b3480156104ab575f5ffd5b5061023d612814565b3480156104bf575f5ffd5b5061025f6104ce366004613a29565b612d72565b3480156104de575f5ffd5b5061025f6104ed366004613624565b6131d6565b3480156104fd575f5ffd5b506017546101e3906001600160a01b031681565b60168181548110610520575f80fd5b5f918252602090912001546001600160a01b0316905081565b5f5f5f601560019054906101000a900460ff161561056a57604051637d66929f60e01b815260040160405180910390fd5b604080516101c081018252600580548252600654602083015260075492820192909252600854606082015260095460ff1615156080820152600a5460a0820152600b5460c0820152600c5460e0820152600d54610100820152600e54610120820152600f546101408201526010546101608201526011546001600160a01b0316610180820152601280545f93916101a084019161060690613a6c565b80601f016020809104026020016040519081016040528092919081815260200182805461063290613a6c565b801561067d5780601f106106545761010080835404028352916020019161067d565b820191905f5260205f20905b81548152906001019060200180831161066057829003601f168201915b50505050508152505090505f5f5f5f73a12db630a09ab75de0840ef36cbe9050e7e1cf1863d494f49386602001516013546040518363ffffffff1660e01b81526004016106d4929190918252602082015260400190565b602060405180830381865af41580156106ef573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107139190613aa4565b9050801580156107265750600454600714155b156107445760405163907c5f1960e01b815260040160405180910390fd5b602085015160405163cb7e3a1360e01b81525f9173a12db630a09ab75de0840ef36cbe9050e7e1cf189163cb7e3a13916107849160040190815260200190565b602060405180830381865af415801561079f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107c39190613ac6565b90505f60015b8761010001518111610802575f818152601d602052604090205483116107f25760019150610802565b6107fb81613af1565b90506107c9565b508015801561081457508660e0015142105b1561083257604051633fc30bd160e11b815260040160405180910390fd5b5f5f8861010001516001600160401b0381111561085157610851613860565b60405190808252806020026020018201604052801561087a578160200160208202803683370190505b5090505f60015b8a61010001518111610912575f818152601d6020526040902054848111156108ce578094506001925081845f815181106108bd576108bd613b09565b602002602001018181525050610901565b84810361090157818484815181106108e8576108e8613b09565b6020908102919091010152826108fd81613af1565b9350505b5061090b81613af1565b9050610881565b5060018111156109b5575f195f805b838110156109ab575f85828151811061093c5761093c613b09565b6020908102919091018101515f818152918052604082205490925061096390600190613b1d565b5f8381526020805260408120805492935090918390811061098657610986613b09565b905f5260205f2001549050858110156109a0578095508294505b505050600101610921565b5098506109d29050565b815f815181106109c7576109c7613b09565b602002602001015197505b60166109df60018a613b1d565b815481106109ef576109ef613b09565b5f918252602090912001546101208b01516001600160a01b039091169750610a18908490613b30565b979d979c50959a509598505050505050505050565b610a3561321c565b604080516101c081018252600580548252600654602083015260075492820192909252600854606082015260095460ff1615156080820152600a5460a0820152600b5460c0820152600c5460e0820152600d54610100820152600e54610120820152600f546101408201526010546101608201526011546001600160a01b0316610180820152601280545f93916101a0840191610ad190613a6c565b80601f0160208091040260200160405190810160405280929190818152602001828054610afd90613a6c565b8015610b485780601f10610b1f57610100808354040283529160200191610b48565b820191905f5260205f20905b815481529060010190602001808311610b2b57829003601f168201915b5050509190925250505061018081015190915033906001600160a01b03168103610cce576001600160a01b0381165f908152601e602052604090205460ff1615610ba557604051630c8d9eab60e31b815260040160405180910390fd5b816101600151826101400151148015610bc15750600454600714155b15610bdf576040516345b4917560e11b815260040160405180910390fd5b60135415610c00576040516356ff330b60e11b815260040160405180910390fd5b600454600703610c2f578160e00151421015610c2f5760405163c492f0e760e01b815260040160405180910390fd5b8160c00151421015610c5457604051637c75aa6f60e11b815260040160405180910390fd5b601554610100900460ff16610c73576015805461ff0019166101001790555b6001600160a01b038082165f908152601e602052604090819020805460ff19166001179055830151610cc9917f000000000000000000000000000000000000000000000000000000000000000016908390613263565b610eac565b600454600714158015610ce95750601554610100900460ff16155b15610d07576040516361491ef960e11b815260040160405180910390fd5b60135415610d28576040516356ff330b60e11b815260040160405180910390fd5b601554610100900460ff16610d47576015805461ff0019166101001790555b6001600160a01b0381165f908152601e602052604090205460ff1615610d8057604051630c8d9eab60e31b815260040160405180910390fd5b6001600160a01b0381165f908152601a602052604090205460ff16610db857604051637c75aa6f60e11b815260040160405180910390fd5b6040516370a0823160e01b81525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190610e06903090600401613654565b602060405180830381865afa158015610e21573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e459190613ac6565b90505f610e568285604001516132bb565b6001600160a01b038085165f908152601e60205260409020805460ff19166001179055909150610ea9907f0000000000000000000000000000000000000000000000000000000000000000168483613263565b50505b806001600160a01b0316306001600160a01b03167f39bed68a008a68cbf907d7ff6bc3629912af6516cb837cfa3f871ad9f2b8a9448460400151604051610ef591815260200190565b60405180910390a35050610f076132cf565b565b610f116132e6565b610f075f613312565b6015545f9060ff16610f3f576040516349087aad60e01b815260040160405180910390fd5b5060185490565b610f4e61321c565b601554610100900460ff1615610f7757604051637d66929f60e01b815260040160405180910390fd5b604080516101c081018252600580548252600654602083015260075492820192909252600854606082015260095460ff1615156080820152600a5460a0820152600b5460c0820152600c5460e0820152600d54610100820152600e54610120820152600f546101408201526010546101608201526011546001600160a01b03166101808201526012805433935f939290916101a08401919061101890613a6c565b80601f016020809104026020016040519081016040528092919081815260200182805461104490613a6c565b801561108f5780601f106110665761010080835404028352916020019161108f565b820191905f5260205f20905b81548152906001019060200180831161107257829003601f168201915b5050505050815250509050845f14806110ac575080610100015185115b156110ca57604051632a71953160e01b815260040160405180910390fd5b8061018001516001600160a01b0316826001600160a01b03160361110157604051632d073dab60e21b815260040160405180910390fd5b8061016001518161014001511461112b576040516351c904c960e01b815260040160405180910390fd5b806020015160135410611151576040516356ff330b60e11b815260040160405180910390fd5b600254604051632f34148760e11b8152600481018790526001600160a01b03848116602483015273a12db630a09ab75de0840ef36cbe9050e7e1cf189263238a4d1e929116908390635e68290e90604401602060405180830381865af41580156111bd573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111e19190613ac6565b87876040518563ffffffff1660e01b81526004016112029493929190613b4f565b602060405180830381865af415801561121d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112419190613aa4565b61125e57604051638baa579f60e01b815260040160405180910390fd5b8060e00151421061128257604051637a19ed0560e01b815260040160405180910390fd5b6001600160a01b0382165f908152601b602052604090205460ff16156112bb57604051637c9a1cf960e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000060135411156112fe576040516356ff330b60e11b815260040160405180910390fd5b6013545f036116bd57620f424060145f82825461131b9190613b1d565b909155505060405163095ea7b360e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906113859073e592427a0aece92de3edee1f18e0157c0586156490620f424090600401613b96565b6020604051808303815f875af11580156113a1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c59190613aa4565b506040805160a08101825273fd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb960601b60c0820152607d60ea1b60d48201527382af49447d8a07e3bd95bd0d56f35241523fbab160601b60d7820152815160cb81830301815260eb8201835281523060208201525f91810161143c4261012c613baf565b8152620f424060208201525f6040918201819052905163c04b8d5960e01b81529192509073e592427a0aece92de3edee1f18e0157c058615649063c04b8d599061148a908590600401613bc2565b6020604051808303815f875af11580156114a6573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ca9190613ac6565b604051632e1a7d4d60e01b8152600481018290529091507382af49447d8a07e3bd95bd0d56f35241523fbab190632e1a7d4d906024015f604051808303815f87803b158015611517575f5ffd5b505af1158015611529573d5f5f3e3d5ffd5b50506003546040515f93506001600160a01b03909116915083908381818185875af1925050503d805f8114611579576040519150601f19603f3d011682016040523d82523d5f602084013e61157e565b606091505b50509050806115a0576040516371037f3160e01b815260040160405180910390fd5b601754600160b81b900460ff161561167b575f61161273fd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb97382af49447d8a07e3bd95bd0d56f35241523fbab173f3eec6bd2934e7c365912c7697876a0dca8c52c96014546101f4601760149054906101000a900462ffffff16613361565b604051630852cd8d60e31b81526004810182905290915073f3eec6bd2934e7c365912c7697876a0dca8c52c9906342966c68906024015f604051808303815f87803b15801561165f575f5ffd5b505af1158015611671573d5f5f3e3d5ffd5b50505050506116b9565b6001546014546116b9916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811692911690613263565b5050505b5f85815260208080526040808320805460018181018355918552838520429101556001600160a01b0386168452601b8352818420805460ff19169091179055601c8252808320889055878352601d909152812080549161171c83613af1565b909155505060138054905f61173083613af1565b9190505550816001600160a01b03167fd0e6c39f2e086dc49f1524b47725526a56945cd1ff661f37976f1725a1e569868660405161177091815260200190565b60405180910390a250506117826132cf565b505050565b6117f7604051806101c001604052805f81526020015f81526020015f81526020015f81526020015f151581526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6001600160a01b03168152602001606081525090565b604080516101c081018252600580548252600654602083015260075492820192909252600854606082015260095460ff1615156080820152600a5460a0820152600b5460c0820152600c5460e0820152600d54610100820152600e54610120820152600f546101408201526010546101608201526011546001600160a01b0316610180820152601280549192916101a08401919061189490613a6c565b80601f01602080910402602001604051908101604052809291908181526020018280546118c090613a6c565b801561190b5780601f106118e25761010080835404028352916020019161190b565b820191905f5260205f20905b8154815290600101906020018083116118ee57829003601f168201915b505050505081525050905090565b6119216132e6565b6001600160a01b038116611948576040516387ac4dbf60e01b815260040160405180910390fd5b6001546001600160a01b038083169116036119765760405163c951884960e01b815260040160405180910390fd5b6001546040516001600160a01b038084169216907fafdafba178415f38a81e9ce31168ffa3ce22045e659b3dbb40405bf2ac3e7078905f90a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6119d961321c565b601554610100900460ff1615611a0257604051637d66929f60e01b815260040160405180910390fd5b601554339060ff16611a1857611a16612814565b505b604080516101c081018252600580548252600654602083015260075492820192909252600854606082015260095460ff1615156080820152600a5460a0820152600b5460c0820152600c5460e0820152600d54610100820152600e54610120820152600f546101408201526010546101608201526011546001600160a01b0316610180820152601280545f93916101a0840191611ab490613a6c565b80601f0160208091040260200160405190810160405280929190818152602001828054611ae090613a6c565b8015611b2b5780601f10611b0257610100808354040283529160200191611b2b565b820191905f5260205f20905b815481529060010190602001808311611b0e57829003601f168201915b5050509190925250506017549192505f916001600160a01b0385811691161490508015611b59575081608001515b15611c9d576001600160a01b038084165f908152601f6020526040808220805460ff19166001179055516370a0823160e01b815290917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190611bc6903090600401613654565b602060405180830381865afa158015611be1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c059190613ac6565b90505f611c1582855f01516132bb565b601754909150611c52906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683613263565b60175484516040519081526001600160a01b03909116907f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f72419060200160405180910390a25050611e43565b6001600160a01b0383165f908152601f602052604090205460ff1680611cdc57506018546001600160a01b0384165f908152601c602052604090205414155b15611cfa57604051637c75aa6f60e11b815260040160405180910390fd5b8160200151826101200151611d0f9190613b30565b6001600160a01b038085165f908152601f6020526040808220805460ff19166001179055516370a0823160e01b8152929350917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190611d7b903090600401613654565b602060405180830381865afa158015611d96573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dba9190613ac6565b90505f611dc782846132bb565b9050611dfd6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168683613263565b846001600160a01b03167f106f923f993c2149d49b4255ff723acafa1f2d94393f561d3eda32ae348f724184604051611e3891815260200190565b60405180910390a250505b505050610f076132cf565b611e566132e6565b6001600160a01b038116611e7d576040516322203f5960e01b815260040160405180910390fd5b6002546001600160a01b03808316911603611eab57604051634e7ec35760e01b815260040160405180910390fd5b6002546040516001600160a01b038084169216907f741ee0e619c436098dff0f2be43023c24aef6c4c3134ca5db37746bb1088d0df905f90a3600280546001600160a01b0319166001600160a01b0392909216919091179055565b611f0e61321c565b601554610100900460ff1615611f3757604051637d66929f60e01b815260040160405180910390fd5b604080516101c081018252600580548252600654602083015260075492820192909252600854606082015260095460ff1615156080820152600a5460a0820152600b5460c0820152600c5460e0820152600d54610100820152600e54610120820152600f546101408201526010546101608201526011546001600160a01b0316610180820152601280545f93916101a0840191611fd390613a6c565b80601f0160208091040260200160405190810160405280929190818152602001828054611fff90613a6c565b801561204a5780601f106120215761010080835404028352916020019161204a565b820191905f5260205f20905b81548152906001019060200180831161202d57829003601f168201915b50505050508152505090508115801561206557506004546007145b156120835760405163c7eff8f760e01b815260040160405180910390fd5b81156120dd578060c001514210156120ae576040516338af65f760e01b815260040160405180910390fd5b806101600151816101400151036120d85760405163a91acdc360e01b815260040160405180910390fd5b612102565b8060e00151421015612102576040516338af65f760e01b815260040160405180910390fd5b428511612122576040516338af65f760e01b815260040160405180910390fd5b600254604051632f34148760e11b81526004810187905233602482015273a12db630a09ab75de0840ef36cbe9050e7e1cf189163238a4d1e916001600160a01b03909116908390635e68290e90604401602060405180830381865af415801561218d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121b19190613ac6565b87876040518563ffffffff1660e01b81526004016121d29493929190613b4f565b602060405180830381865af41580156121ed573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122119190613aa4565b61222e57604051638baa579f60e01b815260040160405180910390fd5b811561224e57600b8590556019546122469086613baf565b600c55612312565b602081015160135460405163d494f49360e01b8152600481019290925260248201525f9073a12db630a09ab75de0840ef36cbe9050e7e1cf189063d494f49390604401602060405180830381865af41580156122ac573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122d09190613aa4565b905080156122f157604051633102c16960e21b815260040160405180910390fd5b600c86905560048054600191905f9061230b908490613baf565b9091555050505b600b54600c5460405130927f1330a2b7f70d74408554b6e5d73c6aefa8d88e43a5cf2dde8220b95a7bb23e359261235192918252602082015260400190565b60405180910390a2506123626132cf565b50505050565b5f612371613509565b805490915060ff600160401b82041615906001600160401b03165f811580156123975750825b90505f826001600160401b031660011480156123b25750303b155b9050811580156123c0575080155b156123de5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561240857845460ff60401b1916600160401b1785555b6124106132e6565b60208601517f0000000000000000000000000000000000000000000000000000000000000000905f907f0000000000000000000000000000000000000000000000000000000000000000146124785760405163d9421b5560e01b815260040160405180910390fd5b5f7f00000000000000000000000000000000000000000000000000000000000000008961016001516124aa9190613c19565b9050886080015115612524575f6124c68a5f0151611388613531565b90505f8a6101600151826124da9190613b30565b90508015806124e7575081155b1561250557604051630b6de1b760e31b815260040160405180910390fd5b61250f8284613baf565b935061251b8186613baf565b9450505061252f565b809150886040015192505b5f6125398361354a565b90505f6125468285613b1d565b90505f620f424061255a6207a12088613c19565b6125649190613b30565b90505f8c60200151836125779190613b30565b9050831580612584575080155b8061258d575082155b156125ab57604051630b6de1b760e31b815260040160405180910390fd5b8c61014001516001146125d157604051630ccd021160e41b815260040160405180910390fd5b8c61014001516001146125f757604051633a77796d60e01b815260040160405180910390fd5b8160145f8282546126089190613baf565b92505081905550808d6060018181525050828d6101200181815250506001601a5f8f61018001516001600160a01b03166001600160a01b031681526020019081526020015f205f6101000a81548160ff02191690831515021790555060168d6101800151908060018154018082558091505060019003905f5260205f20015f9091909190916101000a8154816001600160a01b0302191690836001600160a01b031602179055508c60055f820151815f01556020820151816001015560408201518160020155606082015181600301556080820151816004015f6101000a81548160ff02191690831515021790555060a0820151816005015560c0820151816006015560e082015181600701556101008201518160080155610120820151816009015561014082015181600a015561016082015181600b015561018082015181600c015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055506101a082015181600d0190816127849190613c7b565b509050507f35a80f8f9b89c07e94f81e4c9b5797b6cb08e2593230376893e0fb482f784a7f8d6040516127b79190613721565b60405180910390a150505050505050831561280c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6015545f90610100900460ff161561283f57604051637d66929f60e01b815260040160405180910390fd5b604080516101c081018252600580548252600654602083015260075492820192909252600854606082015260095460ff1615156080820152600a5460a0820152600b5460c0820152600c5460e0820152600d54610100820152600e54610120820152600f546101408201526010546101608201526011546001600160a01b0316610180820152601280545f93916101a08401916128db90613a6c565b80601f016020809104026020016040519081016040528092919081815260200182805461290790613a6c565b80156129525780601f1061292957610100808354040283529160200191612952565b820191905f5260205f20905b81548152906001019060200180831161293557829003601f168201915b5050509190925250506015549192505060ff16156129835760405163025cfd3760e51b815260040160405180910390fd5b602081015160135460405163d494f49360e01b8152600481019290925260248201525f9073a12db630a09ab75de0840ef36cbe9050e7e1cf189063d494f49390604401602060405180830381865af41580156129e1573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a059190613aa4565b905080158015612a185750600454600714155b15612a365760405163907c5f1960e01b815260040160405180910390fd5b602082015160405163cb7e3a1360e01b81525f9173a12db630a09ab75de0840ef36cbe9050e7e1cf189163cb7e3a1391612a769160040190815260200190565b602060405180830381865af4158015612a91573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ab59190613ac6565b90505f60015b8461010001518111612af4575f818152601d60205260409020548311612ae45760019150612af4565b612aed81613af1565b9050612abb565b5080158015612b0657508360e0015142105b15612b2457604051633fc30bd160e11b815260040160405180910390fd5b5f5f8561010001516001600160401b03811115612b4357612b43613860565b604051908082528060200260200182016040528015612b6c578160200160208202803683370190505b5090505f60015b8761010001518111612c04575f818152601d602052604090205484811115612bc0578094506001925081845f81518110612baf57612baf613b09565b602002602001018181525050612bf3565b848103612bf35781848481518110612bda57612bda613b09565b602090810291909101015282612bef81613af1565b9350505b50612bfd81613af1565b9050612b73565b506001811115612ca7575f195f805b83811015612c9d575f858281518110612c2e57612c2e613b09565b6020908102919091018101515f8181529180526040822054909250612c5590600190613b1d565b5f83815260208052604081208054929350909183908110612c7857612c78613b09565b905f5260205f200154905085811015612c92578095508294505b505050600101612c13565b5060185550612cc8565b815f81518110612cb957612cb9613b09565b60200260200101516018819055505b60166001601854612cd99190613b1d565b81548110612ce957612ce9613b09565b5f91825260209091200154601780546001600160a01b0319166001600160a01b039092169190911790556015805460ff19166001179055600683905560185460405133917f56482e870a733859b0a577d9a75f12c17bd7754ab7b2723301bfc952988b3c7991612d5b91815260200190565b60405180910390a260185497505050505050505090565b612d7a61321c565b601554610100900460ff1615612da357604051637d66929f60e01b815260040160405180910390fd5b80515f03612dc4576040516309bde33960e01b815260040160405180910390fd5b604080516101c081018252600580548252600654602083015260075492820192909252600854606082015260095460ff1615156080820152600a5460a0820152600b5460c0820152600c5460e0820152600d54610100820152600e54610120820152600f546101408201526010546101608201526011546001600160a01b0316610180820152601280545f93916101a0840191612e6090613a6c565b80601f0160208091040260200160405190810160405280929190818152602001828054612e8c90613a6c565b8015612ed75780601f10612eae57610100808354040283529160200191612ed7565b820191905f5260205f20905b815481529060010190602001808311612eba57829003601f168201915b50505050508152505090505f3390508160c001514210612f0a57604051637c75aa6f60e11b815260040160405180910390fd5b6001600160a01b0381165f908152601a602052604090205460ff1615612f435760405163ca6a758f60e01b815260040160405180910390fd5b81610160015182610140015103612f6d5760405163a91acdc360e01b815260040160405180910390fd5b8160400151841015612f925760405163d7ba92d360e01b815260040160405180910390fd5b60168054600181019091557fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b51242890180546001600160a01b0319166001600160a01b0383169081179091555f908152602160205260409020612ff28482613c7b565b505f8260800151156130575761016083015183515f9161301191613b30565b61301b9087613b1d565b90506130268161354a565b9150801580613033575081155b1561305157604051630b6de1b760e31b815260040160405180910390fd5b50613082565b6130608561354a565b9050805f0361308257604051630b6de1b760e31b815260040160405180910390fd5b600f8054905f61309183613af1565b90915550506001600160a01b0382165f908152601a60205260408120805460ff19166001179055601480548392906130ca908490613baf565b9091555050610160830151600f54036131345742600b8190556019546130ef91613baf565b600c819055600b5460408051918252602082019290925230917f3a1f231bccfe439705e57917c7c259af2b42df6d2aba2fb1fd88ced89c5b5f86910160405180910390a25b6131696001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016833088613566565b816001600160a01b0316306001600160a01b03167fd4583664b538b78e47491467e74a0291e7bf66aa2074611363940cb534ddfb088686610140015160016131b19190613baf565b6040516131bf929190613d35565b60405180910390a35050506131d26132cf565b5050565b6131de6132e6565b6001600160a01b038116613210575f604051631e4fbdf760e01b81526004016132079190613654565b60405180910390fd5b61321981613312565b50565b5f516020613d575f395f51905f525c1561324957604051633ee5aeb560e01b815260040160405180910390fd5b610f0760015f516020613d575f395f51905f525b9061359f565b61178283846001600160a01b031663a9059cbb8585604051602401613289929190613b96565b604051602081830303815290604052915060e01b6020820180516001600160e01b0383818316178352505050506135a6565b5f8282188284100282185b90505b92915050565b610f075f5f516020613d575f395f51905f5261325d565b5f546001600160a01b03163314610f07573360405163118cdaa760e01b81526004016132079190613654565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60405163095ea7b360e01b81525f906001600160a01b0388169063095ea7b3906133a59073e592427a0aece92de3edee1f18e0157c05861564908890600401613b96565b6020604051808303815f875af11580156133c1573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906133e59190613aa4565b506040805160a081019091526bffffffffffffffffffffffff19606089811b821660c08401526001600160e81b031960e887811b821660d48601528a831b841660d786015286901b1660eb84015287901b1660ee8201525f9080610102810160408051601f198184030181529181529082523060208301520161346a4261012c613baf565b81526020018681526020015f81525090505f73e592427a0aece92de3edee1f18e0157c058615646001600160a01b031663c04b8d59836040518263ffffffff1660e01b81526004016134bc9190613bc2565b6020604051808303815f875af11580156134d8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906134fc9190613ac6565b9998505050505050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a006132c9565b5f620f42406135408385613c19565b6132c69190613b30565b5f620f424061355c6207a12084613c19565b6132c99190613b30565b6040516001600160a01b0384811660248301528381166044830152606482018390526123629186918216906323b872dd90608401613289565b80825d5050565b5f5f60205f8451602086015f885af1806135c5576040513d5f823e3d81fd5b50505f513d915081156135dc5780600114156135e9565b6001600160a01b0384163b155b156123625783604051635274afe760e01b81526004016132079190613654565b80356001600160a01b038116811461361f575f5ffd5b919050565b5f60208284031215613634575f5ffd5b6132c682613609565b5f6020828403121561364d575f5ffd5b5035919050565b6001600160a01b0391909116815260200190565b5f5f83601f840112613678575f5ffd5b5081356001600160401b0381111561368e575f5ffd5b6020830191508360208285010111156136a5575f5ffd5b9250929050565b5f5f5f604084860312156136be575f5ffd5b8335925060208401356001600160401b038111156136da575f5ffd5b6136e686828701613668565b9497909650939450505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b60208152815160208201526020820151604082015260408201516060820152606082015160808201525f608083015161375e60a084018215159052565b5060a083015160c083015260c083015160e083015260e08301516101008301526101008301516101208301526101208301516101408301526101408301516101608301526101608301516101808301526101808301516137ca6101a08401826001600160a01b03169052565b506101a08301516101c0808401526137e66101e08401826136f3565b949350505050565b8015158114613219575f5ffd5b803561361f816137ee565b5f5f5f5f60608587031215613819575f5ffd5b8435935060208501356001600160401b03811115613835575f5ffd5b61384187828801613668565b9094509250506040850135613855816137ee565b939692955090935050565b634e487b7160e01b5f52604160045260245ffd5b6040516101c081016001600160401b038111828210171561389757613897613860565b60405290565b5f82601f8301126138ac575f5ffd5b81356001600160401b038111156138c5576138c5613860565b604051601f8201601f19908116603f011681016001600160401b03811182821017156138f3576138f3613860565b60405281815283820160200185101561390a575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f60208284031215613936575f5ffd5b81356001600160401b0381111561394b575f5ffd5b82016101c0818503121561395d575f5ffd5b613965613874565b81358152602080830135908201526040808301359082015260608083013590820152613993608083016137fb565b608082015260a0828101359082015260c0808301359082015260e0808301359082015261010080830135908201526101208083013590820152610140808301359082015261016080830135908201526139ef6101808301613609565b6101808201526101a08201356001600160401b03811115613a0e575f5ffd5b613a1a8682850161389d565b6101a083015250949350505050565b5f5f60408385031215613a3a575f5ffd5b8235915060208301356001600160401b03811115613a56575f5ffd5b613a628582860161389d565b9150509250929050565b600181811c90821680613a8057607f821691505b602082108103613a9e57634e487b7160e01b5f52602260045260245ffd5b50919050565b5f60208284031215613ab4575f5ffd5b8151613abf816137ee565b9392505050565b5f60208284031215613ad6575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b5f60018201613b0257613b02613add565b5060010190565b634e487b7160e01b5f52603260045260245ffd5b818103818111156132c9576132c9613add565b5f82613b4a57634e487b7160e01b5f52601260045260245ffd5b500490565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301375f818301608090810191909152601f909201601f191601019392505050565b6001600160a01b03929092168252602082015260400190565b808201808211156132c9576132c9613add565b602081525f825160a06020840152613bdd60c08401826136f3565b905060018060a01b0360208501511660408401526040840151606084015260608401516080840152608084015160a08401528091505092915050565b80820281158282048414176132c9576132c9613add565b601f82111561178257805f5260205f20601f840160051c81016020851015613c555750805b601f840160051c820191505b81811015613c74575f8155600101613c61565b5050505050565b81516001600160401b03811115613c9457613c94613860565b613ca881613ca28454613a6c565b84613c30565b6020601f821160018114613cda575f8315613cc35750848201515b5f19600385901b1c1916600184901b178455613c74565b5f84815260208120601f198516915b82811015613d095787850151825560209485019460019092019101613ce9565b5084821015613d2657868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b604081525f613d4760408301856136f3565b9050826020830152939250505056fe9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00a264697066735822122091154d54056a854868e5846cc082720eca48d1cbcaa764761d031a19ea243c6a64736f6c634300081c0033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca264697066735822122042e8a9eb62278132fd8b571e43c47121f1ec0f2339db32312760d8a841f0572964736f6c634300081c0033