1 tx
2 calls
constructor
constructor(address _platformWallet, address _usdc, uint256 _subscriptionId, address _vrfCoordinator, bytes32 _keyHash)
functions
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
freeEntryUsed
viewfunction freeEntryUsed(bytes32) view returns (bool)
getRaffle
viewfunction getRaffle(uint256 _raffleId) view returns (tuple raffle)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getWinners
viewfunction getWinners(uint256 _raffleId) view returns (tuple[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
OPERATOR_ROLE
viewfunction OPERATOR_ROLE() view returns (bytes32)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
platformWallet
viewfunction platformWallet() view returns (address)
raffles
viewfunction raffles(uint256) view returns (address owner, uint8 status, uint48 entryCount, uint16 platformPercentage, bool feesClaimed, bool isGated, uint128 fees, uint128 minimumFees)
rafflesCount
viewfunction rafflesCount() view returns (uint256)
randomnessLookup
viewfunction randomnessLookup(uint256) view returns (uint256)
randomnessRequestResetTime
viewfunction randomnessRequestResetTime() view returns (uint48)
randomnessRequests
viewfunction randomnessRequests(uint256) view returns (bool exists, bool manual, bool fulfilled, uint48 requestTime, uint80 raffleId, uint256 randomWord)
s_vrfCoordinator
viewfunction s_vrfCoordinator() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
tokenGates
viewfunction tokenGates(uint256) view returns (uint8 tokenType, address tokenAddress, uint88 tokenAmount)
usdc
viewfunction usdc() view returns (address)
acceptOwnership
nonpayablefunction acceptOwnership()
buyEntry
payablefunction buyEntry(uint256 _raffleId, uint256 _priceTierIndex, uint8 _brandId) payable
cancelRaffle
nonpayablefunction cancelRaffle(uint256 _raffleId)
createRaffle
nonpayablefunction createRaffle(tuple _params) returns (uint256)
drawWinners
nonpayablefunction drawWinners(uint256 _raffleId)
giveBatchEntriesForFree
nonpayablefunction giveBatchEntriesForFree(uint256 _raffleId, address[] _addresses, uint8 _brandId)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
onERC721Received
nonpayablefunction onERC721Received(address, address, uint256, bytes) returns (bytes4)
rawFulfillRandomWords
nonpayablefunction rawFulfillRandomWords(uint256 requestId, uint256[] randomWords)
recoverPrize
nonpayablefunction recoverPrize(uint256 _raffleId, uint8 _prizeId)
removeTokenGate
nonpayablefunction removeTokenGate(uint256 _raffleId)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
resetRandomnessRequest
nonpayablefunction resetRandomnessRequest(uint256 _raffleId)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setCoordinator
nonpayablefunction setCoordinator(address _vrfCoordinator)
setPlatformAddress
nonpayablefunction setPlatformAddress(address _newAddress)
setRandomnessRequestResetTime
nonpayablefunction setRandomnessRequestResetTime(uint48 _time)
setSubscriptionId
nonpayablefunction setSubscriptionId(uint256 _id)
setTokenGate
nonpayablefunction setTokenGate(uint256 _raffleId, uint8 _tokenType, address _tokenAddress, uint88 _tokenAmount)
setWinners
nonpayablefunction setWinners(uint256 _raffleId, bool _manual)
stake
payablefunction stake(uint256 _raffleId) payable
togglePaused
nonpayablefunction togglePaused()
transferFees
nonpayablefunction transferFees(uint256 _raffleId)
transferOwnership
nonpayablefunction transferOwnership(address to)
transferPrizes
nonpayablefunction transferPrizes(uint256 _raffleId)
events
CoordinatorSet
event CoordinatorSet(address vrfCoordinator)
EntrySold
event EntrySold(uint256 indexed raffleId, address indexed buyer, uint48 entriesCount, uint256 priceTierId, uint8 brandId)
FeesTransferred
event FeesTransferred(uint256 raffleId, uint256 platformFees, uint256 ownerFees)
FreeEntry
event FreeEntry(uint256 indexed raffleId, address[] buyer, uint256 amount, uint48 entriesCount, uint8 brandId)
OwnershipTransferred
event OwnershipTransferred(address indexed from, address indexed to)
OwnershipTransferRequested
event OwnershipTransferRequested(address indexed from, address indexed to)
PauseToggled
event PauseToggled(bool paused)
PrizeTransferFailed
event PrizeTransferFailed(uint256 raffleId, uint8 prizeId, address winner)
PrizeTransferred
event PrizeTransferred(uint256 raffleId, uint8 prizeId, address winner)
RaffleCancelled
event RaffleCancelled(uint256 indexed raffleId, uint256 amountRaised, uint256 timestamp)
RaffleClosed
event RaffleClosed(uint256 indexed raffleId, uint256 amountRaised, uint48 entries, uint256 timestamp)
RaffleCreated
event RaffleCreated(uint256 indexed raffleId, uint256 priceTierCount, uint256 prizeCount)
RaffleDrawn
event RaffleDrawn(uint256 indexed raffleId, address[] winners, uint256 timestamp)
RaffleStarted
event RaffleStarted(uint256 indexed raffleId, address indexed owner, uint256 timestamp)
RandomnessReceived
event RandomnessReceived(uint256 raffleId, uint256 requestId, uint256[] randomness)
RandomnessRequested
event RandomnessRequested(uint256 raffleId, uint256 requestId)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
EmergencyWithdrawalError
error EmergencyWithdrawalError()
FeesAlreadyClaimed
error FeesAlreadyClaimed()
GatingTokenBalanceTooLow
error GatingTokenBalanceTooLow()
InvalidCommissionPercentage
error InvalidCommissionPercentage()
InvalidFeeSupplied
error InvalidFeeSupplied()
InvalidFreeEntry
error InvalidFreeEntry()
InvalidGatingToken
error InvalidGatingToken()
InvalidNativeTokenAmountStaked
error InvalidNativeTokenAmountStaked()
InvalidPriceTier
error InvalidPriceTier()
InvalidPriceTiersCount
error InvalidPriceTiersCount()
InvalidPrize
error InvalidPrize()
InvalidPrizesCount
error InvalidPrizesCount()
InvalidStatus
error InvalidStatus()
NativeTokenTransferFailed
error NativeTokenTransferFailed()
NotEnoughFeesRaised
error NotEnoughFeesRaised()
OnlyCoordinatorCanFulfill
error OnlyCoordinatorCanFulfill(address have, address want)
OnlyOwnerOrCoordinator
error OnlyOwnerOrCoordinator(address have, address owner, address coordinator)
Paused
error Paused()
RandomnessRequestAlreadyFulfilled
error RandomnessRequestAlreadyFulfilled()
RandomnessRequestDoesNotExist
error RandomnessRequestDoesNotExist()
RandomnessRequestResetTooEarly
error RandomnessRequestResetTooEarly()
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
ZeroAddress
error ZeroAddress()
creation bytecode
0x60a06040526005805466ffffffffffffff60a01b1916604b60aa1b179055600980546001600160501b03191666010003002625a017905534801561004257600080fd5b5060405161636e38038061636e83398101604081905261006191610314565b600180558133806000816100bc5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600280546001600160a01b0319166001600160a01b03848116919091179091558116156100ec576100ec816101a2565b5050506001600160a01b0381166101165760405163d92e233d60e01b815260040160405180910390fd5b600480546001600160a01b03199081166001600160a01b0393841617909155600580548216888416179055858216608052600685905560078054909116918416919091179055600881905561016c60003361024c565b506101977f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c3361024c565b50505050505061036b565b336001600160a01b038216036101fa5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016100b3565b600380546001600160a01b0319166001600160a01b03838116918217909255600254604051919216907fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127890600090a350565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166102ee576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556102a63390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016102f2565b5060005b92915050565b80516001600160a01b038116811461030f57600080fd5b919050565b600080600080600060a0868803121561032c57600080fd5b610335866102f8565b9450610343602087016102f8565b935060408601519250610358606087016102f8565b9150608086015190509295509295909350565b608051615fd361039b600039600081816104f00152818161469e0152818161471501526147be0152615fd36000f3fe6080604052600436106102e75760003560e01c80638ea9811711610184578063bf19d77a116100d6578063dd7afbbd1161008a578063f5b541a611610064578063f5b541a614610af2578063f6f1306014610b26578063fa2af9da14610b4657600080fd5b8063dd7afbbd14610a85578063e4dafec914610aa5578063f2fde38b14610ad257600080fd5b8063cc03c342116100bb578063cc03c34214610a25578063d1d06b2e14610a45578063d547741f14610a6557600080fd5b8063bf19d77a146109e5578063c1e0d23614610a0557600080fd5b8063a217fddf11610138578063aa7029da11610112578063aa7029da14610922578063b09e66211461094f578063b5eb66661461096f57600080fd5b8063a217fddf146108ca578063a694fc3a146108df578063a942f56a146108f257600080fd5b806391d148541161016957806391d14854146108175780639eccacf61461085b5780639ff1d7181461087b57600080fd5b80638ea98117146107d7578063903978a5146107f757600080fd5b80633c0da92a1161023d5780635cb6dfff116101f15780636b1426a4116101cb5780636b1426a41461077757806379ba5097146107a45780638da5cb5b146107b957600080fd5b80635cb6dfff146105815780635d4bc0ce1461063f5780635fba31711461075757600080fd5b8063409f910311610222578063409f91031461052a5780634d2c53cd1461054a5780635c975abb1461056057600080fd5b80633c0da92a146104be5780633e413bee146104de57600080fd5b806328e7a8541161029f57806334d6b3661161027957806334d6b3661461047657806336566f061461048957806336568abe1461049e57600080fd5b806328e7a854146104165780632a1234fb146104365780632f2ff15d1461045657600080fd5b80631c556c17116102d05780631c556c17146103965780631fe543e3146103b8578063248a9ca3146103d857600080fd5b806301ffc9a7146102ec578063150b7a0214610321575b600080fd5b3480156102f857600080fd5b5061030c610307366004615139565b610b66565b60405190151581526020015b60405180910390f35b34801561032d57600080fd5b5061036561033c3660046151f0565b7f150b7a0200000000000000000000000000000000000000000000000000000000949350505050565b6040517fffffffff000000000000000000000000000000000000000000000000000000009091168152602001610318565b3480156103a257600080fd5b506103b66103b13660046152cf565b610bff565b005b3480156103c457600080fd5b506103b66103d33660046152fb565b610d61565b3480156103e457600080fd5b506104086103f336600461537c565b60009081526020819052604090206001015490565b604051908152602001610318565b34801561042257600080fd5b506103b661043136600461537c565b610dcb565b34801561044257600080fd5b506103b661045136600461537c565b610fc1565b34801561046257600080fd5b506103b6610471366004615395565b61102d565b6103b66104843660046153c5565b611058565b34801561049557600080fd5b506103b6611561565b3480156104aa57600080fd5b506103b66104b9366004615395565b61160d565b3480156104ca57600080fd5b506104086104d93660046153fa565b611659565b3480156104ea57600080fd5b506105127f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610318565b34801561053657600080fd5b506103b6610545366004615443565b611d08565b34801561055657600080fd5b50610408600c5481565b34801561056c57600080fd5b5060055461030c90600160a01b900460ff1681565b34801561058d57600080fd5b506105f761059c36600461537c565b600a602052600090815260409020805460019091015460ff808316926101008104821692620100008204909216916301000000820465ffffffffffff16916901000000000000000000900469ffffffffffffffffffff169086565b60408051961515875294151560208701529215159385019390935265ffffffffffff16606084015269ffffffffffffffffffff909116608083015260a082015260c001610318565b34801561064b57600080fd5b5061074361065a36600461537c565b600d60205260009081526040902080546001909101546001600160a01b0382169160ff600160a01b820481169265ffffffffffff75010000000000000000000000000000000000000000008404169261ffff7b01000000000000000000000000000000000000000000000000000000820416927d01000000000000000000000000000000000000000000000000000000000082048116927e0100000000000000000000000000000000000000000000000000000000000090920416906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041688565b6040516103189897969594939291906154ab565b34801561076357600080fd5b506103b661077236600461537c565b611e5c565b34801561078357600080fd5b5061079761079236600461537c565b612208565b604051610318919061551b565b3480156107b057600080fd5b506103b66122a3565b3480156107c557600080fd5b506002546001600160a01b0316610512565b3480156107e357600080fd5b506103b66107f2366004615583565b61238a565b34801561080357600080fd5b506103b66108123660046155a0565b6124c1565b34801561082357600080fd5b5061030c610832366004615395565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b34801561086757600080fd5b50600454610512906001600160a01b031681565b34801561088757600080fd5b506005546108b3907501000000000000000000000000000000000000000000900465ffffffffffff1681565b60405165ffffffffffff9091168152602001610318565b3480156108d657600080fd5b50610408600081565b6103b66108ed36600461537c565b612803565b3480156108fe57600080fd5b5061030c61090d36600461537c565b600e6020526000908152604090205460ff1681565b34801561092e57600080fd5b5061040861093d36600461537c565b600b6020526000908152604090205481565b34801561095b57600080fd5b506103b661096a36600461567b565b612c1d565b34801561097b57600080fd5b506109d661098a36600461537c565b600f6020526000908152604090205460ff81169061010081046001600160a01b031690750100000000000000000000000000000000000000000090046affffffffffffffffffffff1683565b604051610318939291906156ec565b3480156109f157600080fd5b506103b6610a0036600461537c565b612d8d565b348015610a1157600080fd5b506103b6610a2036600461537c565b612e7a565b348015610a3157600080fd5b506103b6610a40366004615583565b612e8b565b348015610a5157600080fd5b506103b6610a6036600461537c565b612ed1565b348015610a7157600080fd5b506103b6610a80366004615395565b612fb4565b348015610a9157600080fd5b506103b6610aa036600461573a565b612fd9565b348015610ab157600080fd5b50610ac5610ac036600461537c565b613037565b60405161031891906158e2565b348015610ade57600080fd5b506103b6610aed366004615583565b61344a565b348015610afe57600080fd5b506104087f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c81565b348015610b3257600080fd5b506103b6610b4136600461537c565b61345b565b348015610b5257600080fd5b50600554610512906001600160a01b031681565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b000000000000000000000000000000000000000000000000000000001480610bf957507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c610c298161353e565b600554600160a01b900460ff1615610c6d576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c75613548565b6000838152600d6020526040812060038101805491929160ff8616908110610c9f57610c9f615a13565b60009182526020918290206040805160a0810182526002938402909201805460ff80821685526101008204811615159685019690965292949093918501926201000090041690811115610cf457610cf4615468565b6002811115610d0557610d05615468565b81528154630100000090046001600160a01b031660208083019190915260019092015460409091015281015190915015610d51578154610d5190869083906001600160a01b031661358b565b5050610d5c60018055565b505050565b6004546001600160a01b03163314610dc057600480546040517f1cf993f400000000000000000000000000000000000000000000000000000000815233928101929092526001600160a01b031660248201526044015b60405180910390fd5b610d5c8383836138f2565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c610df58161353e565b610dfd613548565b6000828152600d60209081526040808320600b8352818420548452600a909252909120805460ff16610e5b576040517f1b71a84c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805462010000900460ff1615610e9d576040517f3975fee200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038254600160a01b900460ff166008811115610ebc57610ebc615468565b14610ef3576040517ff525e32000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60055481544291610f309165ffffffffffff7501000000000000000000000000000000000000000000909204821691630100000090910416615a71565b65ffffffffffff161115610f70576040517fad55303b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805460ff1916905580547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674020000000000000000000000000000000000000000179055505060018055565b5050565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c610feb8161353e565b506000908152600d6020908152604080832080547fff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff169055600f909152812055565b6000828152602081905260409020600101546110488161353e565b6110528383613a66565b50505050565b600554600160a01b900460ff161561109c576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110a4613548565b6000838152600d6020526040902060028154600160a01b900460ff1660088111156110d1576110d1615468565b14611108576040517ff525e32000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80547e01000000000000000000000000000000000000000000000000000000000000900460ff161561113e5761113e8433613b10565b600281015480841061117c576040517f1dbcf8aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082600201858154811061119357611193615a13565b600091825260209182902060408051606081018252929091015465ffffffffffff80821684526601000000000000820416938301939093526c010000000000000000000000009092046001600160a01b031691810182905291503414611225576040517fad80e5f700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80604001516001600160a01b03166000036112cc576040805133602082015290810187905260009060600160408051601f1981840301815291815281516020928301206000818152600e90935291205490915060ff16156112b2576040517fd72456a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000908152600e60205260409020805460ff191660011790555b82547501000000000000000000000000000000000000000000900465ffffffffffff1660000361139e57338360040160008154811061130d5761130d615a13565b9060005260206000200160000160066101000a8154816001600160a01b0302191690836001600160a01b0316021790555080602001518360040160008154811061135957611359615a13565b600091825260209091200180547fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001665ffffffffffff92909216919091179055611445565b6000604051806040016040528083602001518660000160159054906101000a900465ffffffffffff166113d19190615a71565b65ffffffffffff90811682523360209283015260048701805460018101825560009182529083902084519101805494909301516001600160a01b03166601000000000000027fffffffffffff0000000000000000000000000000000000000000000000000000909416911617919091179055505b60018301805434919060009061146e9084906fffffffffffffffffffffffffffffffff16615a8f565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555080602001518360000160158282829054906101000a900465ffffffffffff166114cd9190615a71565b82546101009290920a65ffffffffffff818102199093169183160217909155845460408051750100000000000000000000000000000000000000000090920490921681526020810188905260ff87169181019190915233915087907f0741232ab3faf4ebed1295982370d6148eb0ecbc8e76cf8a3492a337b84cff239060600160405180910390a3505050610d5c60018055565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c61158b8161353e565b6005805460ff600160a01b80830482161581027fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff90931692909217928390556040517f9077d36bc00859b5c3f320310707208543dd35092cb0a0fe117d0c6a558b148b936116029390049091161515815260200190565b60405180910390a150565b6001600160a01b038116331461164f576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d5c8282613d01565b60007f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c6116858161353e565b61168d613548565b600061169c6040850185615ab7565b9150600090506116af6060860186615b26565b90509050816000036116ed576040517f87a097f300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8015806116fa5750600a81115b15611731576040517fab13062d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127106117416020870187615b8d565b61ffff16111561177d576040517fb9d3a94500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600c6000815461178e90615bb1565b91829055506000818152600d6020908152604090912080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16600160a01b1781559192506117df90880188615b8d565b815461ffff919091167b01000000000000000000000000000000000000000000000000000000027fffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffffff90911617815561183d6040880160208901615be9565b6001820180546fffffffffffffffffffffffffffffffff92831670010000000000000000000000000000000002921691909117905560005b83811015611a2357600061188c60608a018a615b26565b8381811061189c5761189c615a13565b9050606002018036038101906118b29190615c1b565b90506002815160028111156118c9576118c9615468565b11806118f5575060408101511580156118f557506002815160028111156118f2576118f2615468565b14155b80611929575060008151600281111561191057611910615468565b14158015611929575060208101516001600160a01b0316155b15611960576040517f5f12e2ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60038301805460018101825560009182526020909120600291820201805460ff851660ff198216811783558451929384927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff001690911790620100009084908111156119cd576119cd615468565b0217905550602082015181546001600160a01b039091166301000000027fffffffffffffffffff0000000000000000000000000000000000000000ffffff90911617815560409091015160019182015501611875565b5060005b84811015611bf7576000611a3e60408a018a615ab7565b83818110611a4e57611a4e615a13565b905060400201803603810190611a649190615c86565b805190915065ffffffffffff161580611a92575060208101516001600160a01b0316158015611a9257508115155b15611ac9576040517f1dbcf8aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082118015611b24575060028301611ae3600184615ce5565b81548110611af357611af3615a13565b60009182526020918290200154908201516001600160a01b036c010000000000000000000000009092048216911611155b15611b5b576040517f1dbcf8aa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002830180546001818101835560009283526020928390209091018054845194909301516001600160a01b03166c01000000000000000000000000026bffffffffffffffffffffffff65ffffffffffff9586166601000000000000027fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009095169587169590951793909317939093169190911790915501611a27565b50604080518082019091526000808252602080830182815260048501805460018101825581855292842085519301805492516001600160a01b03166601000000000000027fffffffffffff000000000000000000000000000000000000000000000000000090931665ffffffffffff9490941693909317919091179091558054909190611c8657611c86615a13565b60009182526020918290200180547fffffffffffff00000000000000000000000000000000000000000000000000001690556040805187815291820186905284917f9aa2065fb625f0039ef34f9a9cb1fe8e45055c5aa4d830c016505ee55a598a84910160405180910390a250909450505050611d0260018055565b50919050565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c611d328161353e565b600554600160a01b900460ff1615611d76576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d7e613548565b6000838152600d6020526040902060028154600160a01b900460ff166008811115611dab57611dab615468565b14611de2576040517ff525e32000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018101546fffffffffffffffffffffffffffffffff7001000000000000000000000000000000008204811691161015611e48576040517f2cc7ed9d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e528484613d84565b50610d5c60018055565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c611e868161353e565b611e8e613548565b6000828152600d6020526040902060058154600160a01b900460ff166008811115611ebb57611ebb615468565b1480611ee3575060068154600160a01b900460ff166008811115611ee157611ee1615468565b145b80611f0a575060078154600160a01b900460ff166008811115611f0857611f08615468565b145b80611f31575060088154600160a01b900460ff166008811115611f2f57611f2f615468565b145b15611f68576040517ff525e32000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028154600160a01b900460ff166008811115611f8757611f87615468565b1480611faf575060038154600160a01b900460ff166008811115611fad57611fad615468565b145b1561216f5760005b6003820154811015612083576000826003018281548110611fda57611fda615a13565b60009182526020918290206040805160a0810182526002938402909201805460ff8082168552610100820481161515968501969096529294909391850192620100009004169081111561202f5761202f615468565b600281111561204057612040615468565b815281546001600160a01b03630100000090910481166020830152600190920154604090910152845491925061207a91879184911661358b565b50600101611fb7565b5060055460018201546040516000926001600160a01b0316916fffffffffffffffffffffffffffffffff16908381818185875af1925050503d80600081146120e7576040519150601f19603f3d011682016040523d82523d6000602084013e6120ec565b606091505b5050905080612127576040517f3022f2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5080547fffff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167d0100000000000000000000000000000000000000000000000000000000001781555b80547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740800000000000000000000000000000000000000001781556001810154604080516fffffffffffffffffffffffffffffffff9092168252426020830152805185927f50d7e951bb520133496ca2822d7c0578a201ff4bbbb79ed9a5e773fdc24ca10b92908290030190a250610fbd60018055565b6060600d6000838152602001908152602001600020600501805480602002602001604051908101604052809291908181526020016000905b828210156122985760008481526020908190206040805160608101825260028602909201805460ff8116845261010090046001600160a01b031683850152600190810154918301919091529083529092019101612240565b505050509050919050565b6003546001600160a01b03163314612317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610db7565b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000808216339081179093556003805490911690556040516001600160a01b03909116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a350565b6002546001600160a01b031633148015906123b057506004546001600160a01b03163314155b1561241b57336123c86002546001600160a01b031690565b600480546040517f061db9c10000000000000000000000000000000000000000000000000000000081526001600160a01b0394851692810192909252918316602482015291166044820152606401610db7565b6001600160a01b03811661245b576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fd1a6a14209a385a964d036e404cb5cfb71f4000cdb03c9366292430787261be690602001611602565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c6124eb8161353e565b600554600160a01b900460ff161561252f576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612537613548565b6000848152600d6020526040902060028154600160a01b900460ff16600881111561256457612564615468565b1461259b576040517ff525e32000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83516000805b8281101561274b5760008782815181106125bd576125bd615a13565b6020026020010151905060006040518060400160405280848860000160159054906101000a900465ffffffffffff1665ffffffffffff166125fe9190615cf8565b612609906001615cf8565b65ffffffffffff90811682526001600160a01b0385166020909201919091528754919250750100000000000000000000000000000000000000000090910416158015612653575082155b156126d157808660040160008154811061266f5761266f615a13565b600091825260209182902083519101805493909201516001600160a01b03166601000000000000027fffffffffffff000000000000000000000000000000000000000000000000000090931665ffffffffffff9091161791909117905561273d565b6004860180546001810182556000918252602091829020835191018054928401516001600160a01b03166601000000000000027fffffffffffff000000000000000000000000000000000000000000000000000090931665ffffffffffff909216919091179190911790555b5050600191820191016125a1565b508254819084906015906127819084907501000000000000000000000000000000000000000000900465ffffffffffff16615a71565b92506101000a81548165ffffffffffff021916908365ffffffffffff160217905550867f43b4167774874553cc57c1c23bbc4589ed22b35aba69867e65720bbabbd3c23c87848660000160159054906101000a900465ffffffffffff16896040516127ef9493929190615d46565b60405180910390a250505061105260018055565b61280b613548565b6000818152600d60205260409020600381015460018254600160a01b900460ff16600881111561283d5761283d615468565b14612874576040517ff525e32000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000036128ae576040517fab13062d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81547fffffffffffffffffffffffff000000000000000000000000000000000000000016331782556000805b82811015612b605760008460030182815481106128f9576128f9615a13565b60009182526020918290206040805160a0810182526002938402909201805460ff8082168552610100820481161515968501969096529294909391850192620100009004169081111561294e5761294e615468565b600281111561295f5761295f615468565b81528154630100000090046001600160a01b03166020820152600190910154604090910152905060008160400151600281111561299e5761299e615468565b036129b95760808101516129b29084615cf8565b9250612b57565b6001816040015160028111156129d1576129d1615468565b03612a7857606081015160808201516040517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101919091526001600160a01b03909116906323b872dd906064016020604051808303816000875af1158015612a4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a729190615d80565b50612b57565b600281604001516002811115612a9057612a90615468565b03612b2557606081015160808201516040517f42842e0e00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101919091526001600160a01b03909116906342842e0e90606401600060405180830381600087803b158015612b0857600080fd5b505af1158015612b1c573d6000803e3d6000fd5b50505050612b57565b6040517f5f12e2ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001016128da565b5082547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674020000000000000000000000000000000000000000178355348114612bd7576040517fd8bd2c2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604051428152339085907f8520a64b531077689214cabcfa489eef68e4b29ffcb6f1e22cd8fe4cffe706de9060200160405180910390a3505050612c1a60018055565b50565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c612c478161353e565b6000858152600d6020526040902080547fff00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e010000000000000000000000000000000000000000000000000000000000001781556001600160a01b0384161580612cbd57506affffffffffffffffffffff8316155b15612cf4576040517f8826122a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000868152600f6020526040902080548690829060ff19166001836002811115612d2057612d20615468565b021790555080546affffffffffffffffffffff90941675010000000000000000000000000000000000000000000274ffffffffffffffffffffffffffffffffffffffffff6001600160a01b03909616610100029590951660ff909416939093179390931790915550505050565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c612db78161353e565b600554600160a01b900460ff1615612dfb576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e03613548565b6000828152600d6020526040902060068154600160a01b900460ff166008811115612e3057612e30615468565b14612e67576040517ff525e32000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e7083613fa1565b50610fbd60018055565b6000612e858161353e565b50600655565b6000612e968161353e565b50600580547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c612efb8161353e565b600554600160a01b900460ff1615612f3f576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612f47613548565b6000828152600d6020526040902060048154600160a01b900460ff166008811115612f7457612f74615468565b14612fab576040517ff525e32000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e7083614210565b600082815260208190526040902060010154612fcf8161353e565b6110528383613d01565b6000612fe48161353e565b506005805465ffffffffffff9092167501000000000000000000000000000000000000000000027fffffffffff000000000000ffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6040805161018080820183526000808352602080840182905283850182905260608085018390526080850183905260a0850183905260c0850183905260e08501839052610100850181905261012085018190526101408501819052610160850152858252600d815290849020845192830190945283546001600160a01b03811683529293919290830190600160a01b900460ff1660088111156130dc576130dc615468565b60088111156130ed576130ed615468565b8152815465ffffffffffff750100000000000000000000000000000000000000000082041660208084019190915261ffff7b0100000000000000000000000000000000000000000000000000000083041660408085019190915260ff7d01000000000000000000000000000000000000000000000000000000000084048116151560608601527e010000000000000000000000000000000000000000000000000000000000009093049092161515608084015260018401546fffffffffffffffffffffffffffffffff80821660a08601527001000000000000000000000000000000009091041660c084015260028401805483518184028101840190945280845260e090940193909160009084015b82821015613263576000848152602090819020604080516060810182529185015465ffffffffffff80821684526601000000000000820416838501526c0100000000000000000000000090046001600160a01b0316908201528252600190920191016131fc565b50505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b828210156133395760008481526020908190206040805160a0810182526002808702909301805460ff80821684526101008204811615159684019690965291949093928501926201000090920416908111156132ee576132ee615468565b60028111156132ff576132ff615468565b81528154630100000090046001600160a01b0316602080830191909152600192830154604090920191909152918352929092019101613290565b50505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156133b7576000848152602090819020604080518082019091529084015465ffffffffffff81168252660100000000000090046001600160a01b031681830152825260019092019101613366565b50505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b8282101561343c5760008481526020908190206040805160608101825260028602909201805460ff8116845261010090046001600160a01b0316838501526001908101549183019190915290835290920191016133e4565b505050915250909392505050565b613452614a78565b612c1a81614aee565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c6134858161353e565b600554600160a01b900460ff16156134c9576040517f9e87fac800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6134d1613548565b6000828152600d6020526040902060058154600160a01b900460ff1660088111156134fe576134fe615468565b14613535576040517ff525e32000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612e7083614bca565b612c1a8133614e57565b600260015403613584576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600155565b600080836040015160028111156135a4576135a4615468565b1480156135b5575060008360800151115b1561368c5760808301516040516001600160a01b0384169190600081818185875af1925050503d8060008114613607576040519150601f19603f3d011682016040523d82523d6000602084013e61360c565b606091505b50508091505080613687576000848152600d60205260409020835160038201805460019260ff1690811061364257613642615a13565b600091825260209091206002909102018054911515610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff909216919091179055505b613846565b6001836040015160028111156136a4576136a4615468565b0361377157606083015160808401516040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038581166004830152602482019290925291169063a9059cbb906044016020604051808303816000875af1925050508015613738575060408051601f3d908101601f1916820190925261373591810190615d80565b60015b613767576000848152600d60205260409020835160038201805460019260ff1690811061364257613642615a13565b5060019050613846565b60028360400151600281111561378957613789615468565b0361384657606083015160808401516040517f42842e0e0000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03858116602483015260448201929092529116906342842e0e90606401600060405180830381600087803b15801561380257600080fd5b505af1925050508015613813575060015b613842576000848152600d60205260409020835160038201805460019260ff1690811061364257613642615a13565b5060015b801561389d5782516040805186815260ff90921660208301526001600160a01b03841682820152517f093c0e8b72bba93a9b348d23f07bdb7a9580015810b3e267daa431adf75a4ae99181900360600190a1611052565b82516040805186815260ff90921660208301526001600160a01b038416908201527f708a752d5a96615e830b607b8d5ffee8c131d33afa7699a5b571b952a93431b1906060015b60405180910390a150505050565b6000838152600a60205260409020805460ff16156110525780546901000000000000000000900469ffffffffffffffffffff166000818152600d60205260409081902090517f777b0ab3fa10335e90b469ef6a82310e1192541fc44fb3acaf2cc84a3dee474d9061396a908490899089908990615d9d565b60405180910390a160038154600160a01b900460ff16600881111561399157613991615468565b03613a5e5782547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff166201000017835584846000816139d2576139d2615a13565b602002919091013560018501555080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740400000000000000000000000000000000000000001781558254610100900460ff16158015613a3e5750600554600160a01b900460ff16155b15613a5e57613a4c82614210565b613a5582614bca565b613a5e82613fa1565b505050505050565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16613b08576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055613ac03390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610bf9565b506000610bf9565b6000828152600f60205260408082208151606081019092528054829060ff166002811115613b4057613b40615468565b6002811115613b5157613b51615468565b8152905461010081046001600160a01b03166020830152750100000000000000000000000000000000000000000090046affffffffffffffffffffff166040909101529050600181516002811115613bab57613bab615468565b03613c8657602081015160408083015190517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301526affffffffffffffffffffff909216918316906370a08231906024015b602060405180830381865afa158015613c2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c4e9190615dfd565b1015611052576040517fccb3bd8900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600281516002811115613c9b57613c9b615468565b03610d5c57602081015160408083015190517f70a082310000000000000000000000000000000000000000000000000000000081526001600160a01b0385811660048301526affffffffffffffffffffff909216918316906370a0823190602401613c0d565b6000828152602081815260408083206001600160a01b038516845290915281205460ff1615613b08576000838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610bf9565b6000828152600d6020908152604080832080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1674030000000000000000000000000000000000000000178155600454825160c08101845260085481526006548186015260095461ffff6401000000008204168286015263ffffffff808216606084015266010000000000009091041660808201528351948501909352600184529093926001600160a01b0390911691639b1c385e9160a0820190613e4990614ec3565b8152506040518263ffffffff1660e01b8152600401613e689190615e16565b6020604051808303816000875af1158015613e87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613eab9190615dfd565b6000818152600a60209081526040808320805460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009091166101008a15150217177fffffffffffffffffffffffffff00000000000000000000000000000000ffffff1663010000004265ffffffffffff16027fffffffffffffffffffffffffff00000000000000000000ffffffffffffffffff1617690100000000000000000069ffffffffffffffffffff8b1602179055878352600b82529182902083905581518781529081018390529192507f3d94fecedaa4f90b8bd459797adb95f5bb11426025c5541390d9ccc1ad1b60a191016138e4565b6000818152600d6020526040902080547d010000000000000000000000000000000000000000000000000000000000900460ff161561400c576040517f45a1ea2800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8054600182015460009161271091614059917b01000000000000000000000000000000000000000000000000000000900461ffff16906fffffffffffffffffffffffffffffffff16615eb2565b6140639190615f13565b60018301546fffffffffffffffffffffffffffffffff918216925060009161408d91849116615ce5565b6005546040519192506000916001600160a01b039091169084908381818185875af1925050503d80600081146140df576040519150601f19603f3d011682016040523d82523d6000602084013e6140e4565b606091505b505084546040519192506000916001600160a01b039091169084908381818185875af1925050503d8060008114614137576040519150601f19603f3d011682016040523d82523d6000602084013e61413c565b606091505b5050905081158061414b575080155b15614182576040517f3022f2e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffff00ffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167d010000000000000000070000000000000000000000000000000000000000178555604080518781526020810186905280820185905290517ff22c03b9832b79146cb366b733d5f9b0a1cf3feb2c8bba254fb91e33f278358f9181900360600190a1505050505050565b6000818152600b6020908152604080832054808452600a835292819020815160c081018352815460ff808216151580845261010083048216151596840196909652620100008204161515938201939093526301000000830465ffffffffffff166060820152690100000000000000000090920469ffffffffffffffffffff1660808301526001015460a0820152906142d4576040517f1b71a84c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000838152600d6020526040902060048154600160a01b900460ff16600881111561430157614301615468565b14614338576040517ff525e32000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600381015460048201805490600090614352600184615ce5565b8154811061436257614362615a13565b600091825260208220015465ffffffffffff8116925061438d9060081c64ffffffffff166001615cf8565b67ffffffffffffffff8111156143a5576143a5615190565b6040519080825280602002602001820160405280156143ce578160200160208202803683370190505b5060a08701519091506000808667ffffffffffffffff8111156143f3576143f3615190565b60405190808252806020026020018201604052801561441c578160200160208202803683370190505b5090506000805b888110156149f05760008a600301828154811061444257614442615a13565b60009182526020918290206040805160a0810182526002938402909201805460ff8082168552610100820481161515968501969096529294909391850192620100009004169081111561449757614497615468565b60028111156144a8576144a8615468565b81528154630100000090046001600160a01b03166020820152600190910154604090910152905087831061461b578a5484516001600160a01b03909116908590849081106144f8576144f8615a13565b60200260200101906001600160a01b031690816001600160a01b0316815250508a6005016040518060600160405280836000015160ff1681526020018d60000160009054906101000a90046001600160a01b03166001600160a01b0316815260200188815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600101555050816001019150856040516020016145fa91815260200190565b6040516020818303038152906040528051906020012060001c955050614423565b614626868989614f61565b985090965094508261463781615bb1565b93506000905060048c0161464b8188615031565b8154811061465b5761465b615a13565b600091825260209091200154660100000000000090046001600160a01b0316905060018260400151600281111561469457614694615468565b1480156146d657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031682606001516001600160a01b0316145b801561478057506040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fe575a8790602401602060405180830381865afa15801561475c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147809190615d80565b156148d0575b6040517ffe575a870000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063fe575a8790602401602060405180830381865afa158015614805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906148299190615d80565b156148d05788841061484657508a546001600160a01b03166148d0565b6040805160208101899052016040516020818303038152906040528051906020012060001c9650614878878a8a614f61565b995090975095508361488981615bb1565b94505060048c0161489a8188615031565b815481106148aa576148aa615a13565b600091825260209091200154660100000000000090046001600160a01b03169050614786565b808584815181106148e3576148e3615a13565b60200260200101906001600160a01b031690816001600160a01b0316815250508b6005016040518060600160405280846000015160ff168152602001836001600160a01b0316815260200189815250908060018154018082558091505060019003906000526020600020906002020160009091909190915060008201518160000160006101000a81548160ff021916908360ff16021790555060208201518160000160016101000a8154816001600160a01b0302191690836001600160a01b03160217905550604082015181600101555050866040516020016149c891815260200190565b6040516020818303038152906040528051906020012060001c96508260010192505050614423565b5088547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740500000000000000000000000000000000000000001789556040518c907f61f33e70c53ae655df89109e261f76ef392f32df37ef1525cb02378613f93de190614a629085904290615f53565b60405180910390a2505050505050505050505050565b6002546001600160a01b03163314614aec576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610db7565b565b336001600160a01b03821603614b60576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610db7565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03838116918217909255600254604051919216907fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae127890600090a350565b6000818152600d6020526040902060058154600160a01b900460ff166008811115614bf757614bf7615468565b14614c2e576040517ff525e32000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b6005820154811015614e16576000826005018281548110614c5457614c54615a13565b6000918252602091829020604080516060810182526002909302909101805460ff811684526001600160a01b036101009091041693830184905260010154908201529150614d5657614d518484600301836000015160ff1681548110614cbc57614cbc615a13565b60009182526020918290206040805160a0810182526002938402909201805460ff80821685526101008204811615159685019690965292949093918501926201000090041690811115614d1157614d11615468565b6002811115614d2257614d22615468565b815281546001600160a01b0363010000009091048116602083015260019092015460409091015286541661358b565b614e0d565b614e0d8484600301836000015160ff1681548110614d7657614d76615a13565b60009182526020918290206040805160a0810182526002938402909201805460ff80821685526101008204811615159685019690965292949093918501926201000090041690811115614dcb57614dcb615468565b6002811115614ddc57614ddc615468565b81528154630100000090046001600160a01b031660208083019190915260019092015460409091015284015161358b565b50600101614c31565b5080547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff167406000000000000000000000000000000000000000017905550565b6000828152602081815260408083206001600160a01b038516845290915290205460ff16610fbd576040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526001600160a01b038216600482015260248101839052604401610db7565b60607f92fd13387c7fe7befbc38d303d6468778fb9731bc4583f17d92989c6fcfdeaaa82604051602401614efc91511515815260200190565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009093169290921790915292915050565b600080606081614f718688615f75565b614f7c906001615cf8565b9050600881901c600160ff83161b5b80878381518110614f9e57614f9e615a13565b602002602001015116600014614ffe5760408051602081018b90520160408051601f1981840301815291905280516020909101209850614fde888a615f75565b614fe9906001615cf8565b92505050600881901c600160ff83161b614f8b565b8087838151811061501157615011615a13565b602090810291909101018051919091179052509697909650939450505050565b8154600090810361504457506000610bf9565b82546000905b808210156150a257600061505e8383615117565b90508486828154811061507357615073615a13565b60009182526020909120015465ffffffffffff1611156150955780915061509c565b8060010192505b5061504a565b6000821180156150e0575083856150ba600185615ce5565b815481106150ca576150ca615a13565b60009182526020909120015465ffffffffffff16145b1561510f57507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff019050610bf9565b509050610bf9565b60006151266002848418615f89565b61513290848416615cf8565b9392505050565b60006020828403121561514b57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461513257600080fd5b6001600160a01b0381168114612c1a57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156151e8576151e8615190565b604052919050565b6000806000806080858703121561520657600080fd5b84356152118161517b565b935060208501356152218161517b565b925060408501359150606085013567ffffffffffffffff81111561524457600080fd5b8501601f8101871361525557600080fd5b803567ffffffffffffffff81111561526f5761526f615190565b6152826020601f19601f840116016151bf565b81815288602083850101111561529757600080fd5b8160208401602083013760006020838301015280935050505092959194509250565b803560ff811681146152ca57600080fd5b919050565b600080604083850312156152e257600080fd5b823591506152f2602084016152b9565b90509250929050565b60008060006040848603121561531057600080fd5b83359250602084013567ffffffffffffffff81111561532e57600080fd5b8401601f8101861361533f57600080fd5b803567ffffffffffffffff81111561535657600080fd5b8660208260051b840101111561536b57600080fd5b939660209190910195509293505050565b60006020828403121561538e57600080fd5b5035919050565b600080604083850312156153a857600080fd5b8235915060208301356153ba8161517b565b809150509250929050565b6000806000606084860312156153da57600080fd5b83359250602084013591506153f1604085016152b9565b90509250925092565b60006020828403121561540c57600080fd5b813567ffffffffffffffff81111561542357600080fd5b82016080818503121561513257600080fd5b8015158114612c1a57600080fd5b6000806040838503121561545657600080fd5b8235915060208301356153ba81615435565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600981106154a7576154a7615468565b9052565b6001600160a01b038916815261010081016154c9602083018a615497565b65ffffffffffff97909716604082015261ffff959095166060860152921515608085015290151560a08401526fffffffffffffffffffffffffffffffff90811660c08401521660e09091015292915050565b602080825282518282018190526000918401906040840190835b81811015615578578351805160ff1684526020808201516001600160a01b0316908501526040908101519084015260608301602094909401939250600101615535565b509095945050505050565b60006020828403121561559557600080fd5b81356151328161517b565b6000806000606084860312156155b557600080fd5b83359250602084013567ffffffffffffffff8111156155d357600080fd5b8401601f810186136155e457600080fd5b803567ffffffffffffffff8111156155fe576155fe615190565b8060051b61560e602082016151bf565b9182526020818401810192908101908984111561562a57600080fd5b6020850194505b8385101561565857843592506156468361517b565b82825260209485019490910190615631565b80965050505050506153f1604085016152b9565b8035600381106152ca57600080fd5b6000806000806080858703121561569157600080fd5b843593506156a16020860161566c565b925060408501356156b18161517b565b915060608501356affffffffffffffffffffff811681146156d157600080fd5b939692955090935050565b600381106154a7576154a7615468565b606081016156fa82866156dc565b6001600160a01b03841660208301526affffffffffffffffffffff83166040830152949350505050565b803565ffffffffffff811681146152ca57600080fd5b60006020828403121561574c57600080fd5b61513282615724565b600081518084526020840193506020830160005b828110156157bc57815165ffffffffffff815116875265ffffffffffff60208201511660208801526001600160a01b03604082015116604088015250606086019550602082019150600181019050615769565b5093949350505050565b600081518084526020840193506020830160005b828110156157bc57815160ff8151168752602081015115156020880152604081015161580960408901826156dc565b506060818101516001600160a01b0316908801526080908101519087015260a090950194602091909101906001016157da565b600081518084526020840193506020830160005b828110156157bc578151805165ffffffffffff1687526020908101516001600160a01b03168188015260409096019590910190600101615850565b600081518084526020840193506020830160005b828110156157bc578151805160ff1687526020808201516001600160a01b031690880152604090810151908701526060860195506020919091019060010161589f565b602081526158fc6020820183516001600160a01b03169052565b600060208301516159106040840182615497565b50604083015165ffffffffffff8116606084015250606083015161ffff8116608084015250608083015180151560a08401525060a083015180151560c08401525060c08301516fffffffffffffffffffffffffffffffff811660e08401525060e08301516fffffffffffffffffffffffffffffffff8116610100840152506101008301516101806101208401526159ab6101a0840182615755565b9050610120840151601f19848303016101408501526159ca82826157c6565b915050610140840151601f19848303016101608501526159ea828261583c565b915050610160840151601f1984830301610180850152615a0a828261588b565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b65ffffffffffff8181168382160190811115610bf957610bf9615a42565b6fffffffffffffffffffffffffffffffff8181168382160190811115610bf957610bf9615a42565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615aec57600080fd5b83018035915067ffffffffffffffff821115615b0757600080fd5b6020019150600681901b3603821315615b1f57600080fd5b9250929050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615b5b57600080fd5b83018035915067ffffffffffffffff821115615b7657600080fd5b6020019150606081023603821315615b1f57600080fd5b600060208284031215615b9f57600080fd5b813561ffff8116811461513257600080fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203615be257615be2615a42565b5060010190565b600060208284031215615bfb57600080fd5b81356fffffffffffffffffffffffffffffffff8116811461513257600080fd5b60006060828403128015615c2e57600080fd5b506040516060810167ffffffffffffffff81118282101715615c5257615c52615190565b604052615c5e8361566c565b81526020830135615c6e8161517b565b60208201526040928301359281019290925250919050565b60006040828403128015615c9957600080fd5b506040805190810167ffffffffffffffff81118282101715615cbd57615cbd615190565b604052615cc983615724565b81526020830135615cd98161517b565b60208201529392505050565b81810381811115610bf957610bf9615a42565b80820180821115610bf957610bf9615a42565b600081518084526020840193506020830160005b828110156157bc5781516001600160a01b0316865260209586019590910190600101615d1f565b608081526000615d596080830187615d0b565b60208301959095525065ffffffffffff92909216604083015260ff16606090910152919050565b600060208284031215615d9257600080fd5b815161513281615435565b8481528360208201526060604082015281606082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff831115615de257600080fd5b8260051b808560808501379190910160800195945050505050565b600060208284031215615e0f57600080fd5b5051919050565b60208152815160208201526020820151604082015261ffff604083015116606082015263ffffffff606083015116608082015263ffffffff60808301511660a0820152600060a083015160c08084015280518060e085015260005b81811015615e8f576020818401810151610100878401015201615e71565b5060006101008286010152610100601f19601f8301168501019250505092915050565b6fffffffffffffffffffffffffffffffff8181168382160290811690818114615edd57615edd615a42565b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006fffffffffffffffffffffffffffffffff831680615f3557615f35615ee4565b806fffffffffffffffffffffffffffffffff84160491505092915050565b604081526000615f666040830185615d0b565b90508260208301529392505050565b600082615f8457615f84615ee4565b500690565b600082615f9857615f98615ee4565b50049056fea2646970667358221220b4fa9db85455ad6ab80d12f5094248f4414607ec7c3126fc35b0f05a1cff113264736f6c634300081c003300000000000000000000000013503b622abc0bd30a7e9687057df6e8c42fb928000000000000000000000000833589fcd6edb6e08f4c7c32d4f71b54bda02913d553fff2a4c0239eea3a1d23938c308e8626a50deff50a5f7b6f3fde43ba4694000000000000000000000000d5d517abe5cf79b7e95ec98db0f0277788aff634dc2f87677b01473c763cb0aee938ed3341512f6057324a584e5944e786144d70