0 txs
7.3k calls
constructor
constructor()
functions
allowance
viewfunction allowance(address owner, address spender) view returns (uint256 result)
availableFunds
viewfunction availableFunds() view returns (uint256)
bagSize
viewfunction bagSize() view returns (uint256)
balanceOf
viewfunction balanceOf(address owner) view returns (uint256 result)
buyIncrement
viewfunction buyIncrement() view returns (uint256)
currentFees
viewfunction currentFees() view returns (uint256)
DEAD_ADDRESS
viewfunction DEAD_ADDRESS() view returns (address)
decimals
viewfunction decimals() view returns (uint8)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32 result)
ethToTwap
viewfunction ethToTwap() view returns (uint256)
factory
viewfunction factory() view returns (address)
getImplementation
viewfunction getImplementation() view returns (address result)
getMaxPriceForBuy
viewfunction getMaxPriceForBuy() view returns (uint256)
getTransferAllowance
viewfunction getTransferAllowance() view returns (uint256 transferAllowance)
GLOBAL_DISTRIBUTION_HANDLER
viewfunction GLOBAL_DISTRIBUTION_HANDLER() view returns (address)
hookAddress
viewfunction hookAddress() view returns (address)
isDistributor
viewfunction isDistributor(address) view returns (bool)
lastBagId
viewfunction lastBagId() view returns (uint256)
lastBuyBlock
viewfunction lastBuyBlock() view returns (uint256)
lastTwapBlock
viewfunction lastTwapBlock() view returns (uint256)
list
viewfunction list() view returns (uint256[] bags)
list
viewfunction list(uint256 startId, uint256 endId) view returns (uint256[] bags)
MAX_SUPPLY
viewfunction MAX_SUPPLY() view returns (uint256)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256 result)
onSale
viewfunction onSale(uint256) view returns (uint256)
owner
viewfunction owner() view returns (address result)
ownershipHandoverExpiresAt
viewfunction ownershipHandoverExpiresAt(address pendingOwner) view returns (uint256 result)
poolManager
viewfunction poolManager() view returns (address)
priceMultiplier
viewfunction priceMultiplier() view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
router
viewfunction router() view returns (address)
symbol
viewfunction symbol() view returns (string)
token
viewfunction token() view returns (address)
totalSupply
viewfunction totalSupply() view returns (uint256 result)
twapDelayInBlocks
viewfunction twapDelayInBlocks() view returns (uint256)
twapIncrement
viewfunction twapIncrement() view returns (uint256)
VERSION
purefunction VERSION() pure returns (uint256)
addFees
payablefunction addFees() payable
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
buyTokens
nonpayablefunction buyTokens()
cancelOwnershipHandover
payablefunction cancelOwnershipHandover() payable
completeOwnershipHandover
payablefunction completeOwnershipHandover(address pendingOwner) payable
increaseTransferAllowance
nonpayablefunction increaseTransferAllowance(uint256 amountAllowed)
initialize
nonpayablefunction initialize(address _token, uint256 _bagSize, address _hook, string _tokenName, string _tokenSymbol, uint256 _buyIncrement, address _owner)
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
processTokenTwap
nonpayablefunction processTokenTwap()
renounceOwnership
payablefunction renounceOwnership() payable
requestOwnershipHandover
payablefunction requestOwnershipHandover() payable
sellTokens
payablefunction sellTokens(uint256 bagId) payable
setDistributor
nonpayablefunction setDistributor(address distributor, bool status)
setPriceMultiplier
nonpayablefunction setPriceMultiplier(uint256 _newMultiplier)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
transferOwnership
payablefunction transferOwnership(address newOwner) payable
updateHookAddress
nonpayablefunction updateHookAddress(address _hookAddress)
updateName
nonpayablefunction updateName(string _tokenName)
updateSymbol
nonpayablefunction updateSymbol(string _tokenSymbol)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AllowanceIncreased
event AllowanceIncreased(uint256 amount)
AllowanceSpent
event AllowanceSpent(address indexed from, address indexed to, uint256 amount)
Approval
event Approval(address indexed owner, address indexed spender, uint256 amount)
ContractUpgraded
event ContractUpgraded(address indexed oldImplementation, address indexed newImplementation, uint256 version)
DistributorUpdated
event DistributorUpdated(address indexed distributor, bool status)
ERC20BoughtByProtocol
event ERC20BoughtByProtocol(uint256 indexed bagId, uint256 purchasePrice, uint256 listPrice)
ERC20SoldByProtocol
event ERC20SoldByProtocol(uint256 indexed bagId, uint256 price, address buyer)
Initialized
event Initialized(uint64 version)
OwnershipHandoverCanceled
event OwnershipHandoverCanceled(address indexed pendingOwner)
OwnershipHandoverRequested
event OwnershipHandoverRequested(address indexed pendingOwner)
OwnershipTransferred
event OwnershipTransferred(address indexed oldOwner, address indexed newOwner)
Transfer
event Transfer(address indexed from, address indexed to, uint256 amount)
Upgraded
event Upgraded(address indexed implementation)
errors
AllowanceOverflow
error AllowanceOverflow()
AllowanceUnderflow
error AllowanceUnderflow()
AlreadyInitialized
error AlreadyInitialized()
BalanceMismatch
error BalanceMismatch()
InputsError
error InputsError()
InsufficientAllowance
error InsufficientAllowance()
InsufficientBalance
error InsufficientBalance()
InvalidInitialization
error InvalidInitialization()
InvalidMultiplier
error InvalidMultiplier()
InvalidPermit
error InvalidPermit()
InvalidTransfer
error InvalidTransfer()
NewOwnerIsZeroAddress
error NewOwnerIsZeroAddress()
NoETHToTwap
error NoETHToTwap()
NoHandoverRequest
error NoHandoverRequest()
NotEnoughEth
error NotEnoughEth()
NotFactory
error NotFactory()
NotForSale
error NotForSale()
NotInitializing
error NotInitializing()
NoZeroBuys
error NoZeroBuys()
OnlyHook
error OnlyHook()
Permit2AllowanceIsFixedAtInfinity
error Permit2AllowanceIsFixedAtInfinity()
PermitExpired
error PermitExpired()
PriceTooHigh
error PriceTooHigh()
PriceTooLow
error PriceTooLow()
Reentrancy
error Reentrancy()
TotalSupplyOverflow
error TotalSupplyOverflow()
TwapDelayNotMet
error TwapDelayNotMet()
Unauthorized
error Unauthorized()
UnauthorizedCallContext
error UnauthorizedCallContext()
UpgradeFailed
error UpgradeFailed()
creation bytecode
0x60a080604052346099573060805263409feecd195460018116608c5760011c6002600160401b0319016048575b61292e908161009e823960805181818161180401526119840152f35b6002600160411b0363409feecd19556001600160401b0360209081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29080a1602c565b63f92ee8a95f526004601cfd5b5f80fdfe6080604052600436101561001a575b3615610018575f80fd5b005b5f5f3560e01c806306fdde031461227a57806308db85291461225d578063095ea7b3146121c15780630f560cd71461210d57806318160ddd146120e757806319d6150d146120a85780631db5275514611e805780632081c4ea14611e1557806323b2f39214611df757806323b872dd14611cf75780632569296214611cac578063313ce56714611c9057806332a3cf9614611c6757806332cb6b0c14611c405780633644e51514611bb7578063451d29d514611b7757806346fcff4c14611b5c57806347ccd96414611b3e5780634e6fd6c414611b215780634f1ef2861461192f57806350fd73671461184c57806352d1902d146117f0578063537f53121461167557806354d1f13d1461162f5780635d9644c4146116115780636c11bcd3146114ca57806370a0823114611497578063715018a61461144c5780637973bfd21461142e5780637ecebe00146113fb57806384da92a7146112595780638da5cb5b1461122c5780638f0c86fa146111ed57806395d89b41146111215780639866844414611106578063a718e20d146110e9578063a9059cbb1461104d578063a94b990814611030578063aaf10f4214610ffb578063af9e723914610f90578063b107a04b14610f61578063b43a76f114610f38578063c2fa867b14610f1a578063c45a015514610eff578063d0febe4c14610ca8578063d505accf14610ae0578063d50cb88b14610ac2578063d59ba0df14610a25578063dc4c90d314610a0a578063dd62ed3e146109d5578063e6c69313146109b7578063eaca4a3314610400578063ec078821146103e2578063f04e283e14610394578063f2fde38b14610355578063f887ea4014610328578063fc0c546a146102ff578063fee81cf4146102cc5763ffa1ad74146102ae575061000e565b346102c957806003193601126102c957602060405160018152f35b80fd5b50346102c95760203660031901126102c9576102e66122bf565b9063389a75e1600c5252602080600c2054604051908152f35b50346102c957806003193601126102c957603e546040516001600160a01b039091168152602090f35b50346102c957806003193601126102c9576020610343612661565b6040516001600160a01b039091168152f35b5060203660031901126102c95761036a6122bf565b61037261283f565b8060601b15610387576103849061285b565b80f35b637448fbae82526004601cfd5b5060203660031901126102c9576103a96122bf565b6103b161283f565b63389a75e1600c528082526020600c20805442116103d5579082610384925561285b565b636f5e881883526004601cfd5b50346102c957806003193601126102c9576020600754604051908152f35b50346102c95760e03660031901126102c95761041a6122bf565b6044356001600160a01b038116929190602435908490036109b3576064356001600160401b0381116109af57610454903690600401612359565b6084356001600160401b0381116109ab57610473903690600401612359565b9460c4356001600160a01b03811693908490036109a75763409feecd19948554806003885561097e575b506001600160a01b03168015610949578115610911576001600160601b0360a01b603e541617603e55603f558151156108df578551156108ab576001600160601b0360a01b60035416176003558051906001600160401b0382116108975781906105086001546123ae565b601f8111610825575b50602090601f83116001146107b65786926107ab575b50508160011b915f199060031b1c1916176001555b83516001600160401b038111610797576105576002546123ae565b601f811161072f575b50602094601f82116001146106c15794849582939495926106b6575b50508160011b915f199060031b1c1916176002555b43600a5560a435835580638b78c6d81955827f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a36104b0600455670de0b6b3a764000060075560016008556105e6612569565b6805345cdf77eb68f44c546b033b2e3c9fd0803ce800000081019081106106a9576805345cdf77eb68f44c556387a211a2600c5282526020600c206b033b2e3c9fd0803ce800000081540190556b033b2e3c9fd0803ce800000060205280600c5160601c837fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a3610678575080f35b6002905560016020527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2602080a180f35b63e5cfe95784526004601cfd5b015190505f8061057c565b60028552601f198216955f5160206128995f395f51905f5291865b888110610717575083600195969798106106ff575b505050811b01600255610591565b01515f1960f88460031b161c191690555f80806106f1565b919260206001819286850151815501940192016106dc565b60028552601f820160051c5f5160206128995f395f51905f52019060208310610782575b601f0160051c5f5160206128995f395f51905f5201905b8181106107775750610560565b85815560010161076a565b5f5160206128995f395f51905f529150610753565b634e487b7160e01b84526041600452602484fd5b015190505f80610527565b600187525f5160206128d95f395f51905f529250601f198416875b81811061080d57509084600195949392106107f5575b505050811b0160015561053c565b01515f1960f88460031b161c191690555f80806107e7565b929360206001819287860151815501950193016107d1565b90915060018652601f830160051c5f5160206128d95f395f51905f52019060208410610882575b90601f8493920160051c5f5160206128d95f395f51905f5201905b8181106108745750610511565b878155849350600101610867565b5f5160206128d95f395f51905f52915061084c565b634e487b7160e01b85526041600452602485fd5b60405162461bcd60e51b815260206004820152600c60248201526b115b5c1d1e481cde5b589bdb60a21b6044820152606490fd5b60405162461bcd60e51b815260206004820152600a602482015269456d707479206e616d6560b01b6044820152606490fd5b60405162461bcd60e51b815260206004820152601060248201526f496e76616c6964206261672073697a6560801b6044820152606490fd5b60405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606490fd5b600181819893981c14303b101561099a5760ff1b1b945f61049d565b63f92ee8a988526004601cfd5b8580fd5b8480fd5b8380fd5b8280fd5b50346102c957806003193601126102c9576020600954604051908152f35b50346102c95760403660031901126102c9576020610a026109f46122bf565b6109fc6122d5565b90612624565b604051908152f35b50346102c957806003193601126102c95760206103436125c5565b50346102c95760403660031901126102c957610a3f6122bf565b602435908115158092036109b3576001600160a01b03610a5d612569565b163303610ab35760207f19e1fee2e38695e60ad3ef8c81759c22d6d7ee56f9b8805363820a50da468a189160018060a01b031692838552600b82526040852060ff1981541660ff8316179055604051908152a280f35b631966391b60e11b8352600483fd5b50346102c957806003193601126102c9576020600454604051908152f35b50346102c95760e03660031901126102c957610afa6122bf565b610b026122d5565b604435606435906084359260ff841684036109a7576001600160a01b0316936e22d473030f116ddee9f6b43ac78ba385188219151715610c9b57610b446123e6565b6020815191012092804211610c8e576040519160018060a01b03169465383775081901600e5285885260c06020600c20938454937f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8252602082019788528460408301987fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc68a528b606085019a468c528c608087019330855260a08820602e527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988525252888a525260a082015220604e526042602c20885260ff1660205260a43560405260c43560605260208060808960015afa90853d5103610c81570190556303faf4f960a51b84176040526034602c20557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590602090a380f35b63ddafbaef88526004601cfd5b631a15a3cc87526004601cfd5b633f68539a86526004601cfd5b50346102c957806003193601126102c9573068929eee149b4bd212685414610ef2573068929eee149b4bd2126855610cde6124b7565b8015610ee3576041545f198114610ecf57600101908160415560018060a01b03603e54166040516370a0823160e01b8152306004820152602081602481855afa908115610e74578591610e9d575b50603f549160405192606052306040523360601b602c526323b872dd60601b600c526020866064601c82855af1908160018851141615610e7f575b5050846060528160405260208260248160018060a01b03603e54166370a0823160e01b82523060048301525afa918215610e74578592610e3a575b50603f54610daf9161248a565b03610e2b57604081610de47fd04c70175bc6ed2b8ec90b5130a4ade8bcfc9ed54b8928b88331a6393d82c508936005546124aa565b6005556103e8610df660045483612497565b0484865282602052808387205543600a55610e1182336126b7565b82519182526020820152a23868929eee149b4bd212685580f35b631947c14d60e31b8352600483fd5b9091506020813d602011610e6c575b81610e5660209383612324565b81010312610e68575190610daf610da2565b5f80fd5b3d9150610e49565b6040513d87823e3d90fd5b3b153d171015610e90575f80610d67565b637939f42485526004601cfd5b90506020813d602011610ec7575b81610eb860209383612324565b81010312610e6857515f610d2c565b3d9150610eab565b634e487b7160e01b83526011600452602483fd5b63cdbab9b360e01b8252600482fd5b63ab143c0690526004601cfd5b50346102c957806003193601126102c9576020610343612569565b50346102c957806003193601126102c9576020600854604051908152f35b50346102c95760203660031901126102c957604060209160043581528183522054604051908152f35b50346102c957806003193601126102c957602060405173df99bd1218e7eb288cffecf9775385167bb09b2d8152f35b50346102c95760203660031901126102c957600354600435906001600160a01b03163303610fec576020817f4787a6bf044f17bc03d6ea3466647203e665f4152b82c273d67f1427ff3966d192845c01845d604051908152a180f35b635a91834f60e01b8252600482fd5b50346102c957806003193601126102c9575f5160206128b95f395f51905f52546040516001600160a01b039091168152602090f35b50346102c957806003193601126102c95760209054604051908152f35b50346102c95760403660031901126102c9576110676122bf565b602435906387a211a2600c523383526020600c2080548084116110dc57938291846110d196039055526020600c2082815401905581602052600c5160601c337fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a3336126fc565b602060405160018152f35b63f4d678b885526004601cfd5b50346102c957806003193601126102c9576020905c604051908152f35b50346102c957806003193601126102c9576020610a02612503565b50346102c957806003193601126102c957604051908060025490611144826123ae565b80855291600181169081156111c6575060011461117c575b6111788461116c81860382612324565b60405191829182612295565b0390f35b600281525f5160206128995f395f51905f52939250905b8082106111ac5750909150810160200161116c8261115c565b919260018160209254838588010152019101909291611193565b60ff191660208087019190915292151560051b8501909201925061116c915083905061115c565b50346102c95760203660031901126102c95760209060ff906040906001600160a01b036112186122bf565b168152600b84522054166040519015158152f35b50346102c957806003193601126102c957638b78c6d819546040516001600160a01b039091168152602090f35b50346102c95760203660031901126102c9576004356001600160401b0381116113f75761128a903690600401612359565b906001600160a01b0361129b612569565b1633036113e85781516001600160401b0381116113d4576112bd6001546123ae565b601f811161136c575b50602092601f8211600114611302579282938293926112f7575b50508160011b915f199060031b1c19161760015580f35b015190505f806112e0565b60018352601f198216935f5160206128d95f395f51905f5291845b868110611354575083600195961061133c575b505050811b0160015580f35b01515f1960f88460031b161c191690555f8080611330565b9192602060018192868501518155019401920161131d565b60018352601f820160051c5f5160206128d95f395f51905f520190602083106113bf575b601f0160051c5f5160206128d95f395f51905f5201905b8181106113b457506112c6565b8381556001016113a7565b5f5160206128d95f395f51905f529150611390565b634e487b7160e01b82526041600452602482fd5b631966391b60e11b8152600490fd5b5080fd5b50346102c95760203660031901126102c9576114156122bf565b906338377508600c5252602080600c2054604051908152f35b50346102c957806003193601126102c9576020600a54604051908152f35b50806003193601126102c95761146061283f565b80638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380638b78c6d8195580f35b50346102c95760203660031901126102c9576114b16122bf565b906387a211a2600c5252602080600c2054604051908152f35b5060203660031901126102c9576004353068929eee149b4bd212685414611604573068929eee149b4bd21268558082526040602052604082205480156115f5578034036115e65782908282526040602052816040812055602060018060a01b03603e54166044603f54604051958693849263a9059cbb60e01b845233600485015260248401525af19081156115db577f2c00ecc202be520c641bec97a267972672ffb560557353ee5d44d1479166e44e926040926115ae575b506115908160065461248a565b6006558151908152336020820152a23868929eee149b4bd212685580f35b6115cf9060203d6020116115d4575b6115c78183612324565b8101906124eb565b611583565b503d6115bd565b6040513d86823e3d90fd5b636dddf41160e11b8352600483fd5b631d99ddbf60e01b8352600483fd5b63ab143c0682526004601cfd5b50346102c957806003193601126102c9576020600554604051908152f35b50806003193601126102c95763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b50346102c95760203660031901126102c9576004356001600160401b0381116113f7576116a6903690600401612359565b906001600160a01b036116b7612569565b1633036113e85781516001600160401b0381116113d4576116d96002546123ae565b601f8111611788575b50602092601f821160011461171e57928293829392611713575b50508160011b915f199060031b1c19161760025580f35b015190505f806116fc565b60028352601f198216935f5160206128995f395f51905f5291845b8681106117705750836001959610611758575b505050811b0160025580f35b01515f1960f88460031b161c191690555f808061174c565b91926020600181928685015181550194019201611739565b60028352601f820160051c5f5160206128995f395f51905f520190602083106117db575b601f0160051c5f5160206128995f395f51905f5201905b8181106117d057506116e2565b8381556001016117c3565b5f5160206128995f395f51905f5291506117ac565b50346102c957806003193601126102c957307f00000000000000000000000000000000000000000000000000000000000000000361183f5760206040515f5160206128b95f395f51905f528152f35b639f03a02690526004601cfd5b50346102c95760403660031901126102c957600435906024358281106119205782611876916124aa565b906001820180921161190c5761188b826124d4565b926118996040519485612324565b828452601f196118a8846124d4565b01366020860137815b8381106118c6576040518061117887826122eb565b6118d0818361248a565b83526040602052604083205485518210156118f857600582901b8601602001526001016118b1565b634e487b7160e01b84526032600452602484fd5b634e487b7160e01b81526011600452602490fd5b63ac273de560e01b8252600482fd5b5060403660031901126102c9576119446122bf565b602435906001600160401b0382116109b357366023830112156109b3578160040135906001600160401b0382116109af5736602483850101116109af57307f000000000000000000000000000000000000000000000000000000000000000014611b14576119b061283f565b6001600160a01b038116908115611ad6573b15611a915780604051600181527f81daf9335a6378204a43cc5467ad9282348d3864c1e3788e40b879f41b187aa560203092a33d84526352d1902d6001525f5160206128b95f395f51905f52602060016004601d855afa5103611a83578391817fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8480a280825f5160206128b95f395f51905f5255611a5f578280f35b806024604051950185378338925af415611a7a578181808280f35b903d90823e3d90fd5b6355299b496001526004601dfd5b60405162461bcd60e51b815260206004820152601f60248201527f496d706c656d656e746174696f6e206d75737420626520636f6e7472616374006044820152606490fd5b60405162461bcd60e51b815260206004820152601660248201527524b73b30b634b21034b6b83632b6b2b73a30ba34b7b760511b6044820152606490fd5b639f03a02684526004601cfd5b50346102c957806003193601126102c957602060405161dead8152f35b50346102c957806003193601126102c9576020603f54604051908152f35b50346102c957806003193601126102c9576020610a026124b7565b50346102c95760203660031901126102c957611b916122bf565b611b9961283f565b60018060a01b03166001600160601b0360a01b600354161760035580f35b50346102c957806003193601126102c957602060a0611bd46123e6565b828151910120604051907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8252838201527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6604082015246606082015230608082015220604051908152f35b50346102c957806003193601126102c95760206040516b033b2e3c9fd0803ce80000008152f35b50346102c957806003193601126102c9576003546040516001600160a01b039091168152602090f35b50346102c957806003193601126102c957602060405160128152f35b50806003193601126102c95763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b50346102c95760603660031901126102c957611d116122bf565b611d196122d5565b604435918060601b6e22d473030f116ddee9f6b43ac78ba33303611db0575b6387a211a217600c526020600c208054808511611da357948391856110d197039055526020600c2083815401905582602052600c5160601c60018060a01b0382167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef602080a36126fc565b63f4d678b886526004601cfd5b33602052637f5e9f208117600c526034600c2080548019611dd3575b5050611d38565b808611611dea5785900390556387a211a25f611dcc565b6313be252b87526004601cfd5b50346102c957806003193601126102c9576020600654604051908152f35b50346102c95760203660031901126102c9576004356001600160a01b03611e3a612569565b163303611e715761044c81108015611e66575b611e575760045580f35b631bc4bcf760e21b8252600482fd5b506127108111611e4d565b631966391b60e11b8252600482fd5b50346102c957806003193601126102c9573068929eee149b4bd212685414610ef2573068929eee149b4bd2126855600654801561209957611ec66009546008549061248a565b431061208a5760075490818110612082575b600582028281046005148315171561206e57611efc6103e8611f0d920480946124aa565b91611f07848461248a565b906124aa565b600655436009556003546040516001600160a01b039091169160a082018281106001600160401b0382111761205a5785602093926101849260405281845284840195308752604085019083825260608601603c81526080870191825262ffffff60018060a01b03611f7c612661565b60405163b1a0d57160e01b81526004810188905260248101989098526001604489015298516001600160a01b0390811660648901529a518b16608488015293511660a48601525160020b60c48501525190961660e4830152610160610104830152610164820188905261dead6101248301524261014483015290948593849291165af1801561204f57612024575b5061201590336126b7565b3868929eee149b4bd212685580f35b602090813d8311612048575b61203a8183612324565b810103126113f7575f61200a565b503d612030565b6040513d85823e3d90fd5b634e487b7160e01b86526041600452602486fd5b634e487b7160e01b84526011600452602484fd5b905080611ed8565b6353f77c5b60e01b8252600482fd5b631863d7fb60e01b8252600482fd5b50806003193601126102c9576003546001600160a01b031633036120d8576120d23460055461248a565b60055580f35b635a91834f60e01b8152600490fd5b50346102c957806003193601126102c95760206805345cdf77eb68f44c54604051908152f35b34610e68575f366003190112610e6857604154600181018091116121ad57612134816124d4565b906121426040519283612324565b808252601f19612151826124d4565b013660208401375f5b81811061216f576040518061117885826122eb565b805f52604060205260405f20549083518110156121995760019160208260051b860101520161215a565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b34610e68576040366003190112610e68576121da6122bf565b602435906001600160a01b0381166e22d473030f116ddee9f6b43ac78ba318821915171561225057602052637f5e9f20600c52335f52806034600c20555f52602c5160601c337f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560205fa3602060405160018152f35b633f68539a5f526004601cfd5b34610e68575f366003190112610e68576020604154604051908152f35b34610e68575f366003190112610e685761117861116c6123e6565b602060409281835280519182918282860152018484015e5f828201840152601f01601f1916010190565b600435906001600160a01b0382168203610e6857565b602435906001600160a01b0382168203610e6857565b60206040818301928281528451809452019201905f5b81811061230e5750505090565b8251845260209384019390920191600101612301565b90601f801991011681019081106001600160401b0382111761234557604052565b634e487b7160e01b5f52604160045260245ffd5b81601f82011215610e68578035906001600160401b038211612345576040519261238d601f8401601f191660200185612324565b82845260208383010111610e6857815f926020809301838601378301015290565b90600182811c921680156123dc575b60208310146123c857565b634e487b7160e01b5f52602260045260245ffd5b91607f16916123bd565b604051905f82600154916123f9836123ae565b808352926001811690811561246b575060011461241f575b61241d92500383612324565b565b5060015f90815290915f5160206128d95f395f51905f525b81831061244f57505090602061241d92820101612411565b6020919350806001915483858901015201910190918492612437565b6020925061241d94915060ff191682840152151560051b820101612411565b919082018092116121ad57565b818102929181159184041417156121ad57565b919082039182116121ad57565b6005546124c2612503565b90808210156124cf575090565b905090565b6001600160401b0381116123455760051b60200190565b90816020910312610e6857518015158103610e685790565b61250f600a54436124aa565b600181018091116121ad575f5461252591612497565b90565b9060208251920151916001600160601b031983169260148210612549575050565b6bffffffffffffffffffffffff1960149290920360031b82901b16169150565b61259b604051604060146034601d84303c8083015160ff16156125a1575b80835282015f602082015201604052612528565b60601c90565b303b90603d603c198301928360281c3d3d3e82030182821102900390151502612587565b61259b60405160146034604583303c601482015160ff16156125f9575b80604091835282015f602082015201604052612528565b506040303b6028603d603c1983019283831c3d3d3e603c030182603c110260140391110290506125e2565b906001600160a01b0381166e22d473030f116ddee9f6b43ac78ba31461265a57602052637f5e9f20600c525f526034600c205490565b50505f1990565b61259b604051604060146034603184303c8083015160ff16156126925780835282015f602082015201604052612528565b303b90603d603c198301928360281c3d3d3e6028030182602811028103911102612587565b8147106126ef575f3881808585620186a0f1156126d2575050565b601691600b915f526073825360ff602053f0156126eb57565b3838fd5b63b12d13eb5f526004601cfd5b6001600160a01b03169081156127fa5760405163acf3de8760e01b81526004810183905260208160248173df99bd1218e7eb288cffecf9775385167bb09b2d5afa908115612834575f91612815575b5080156127ff575b6127fa576001600160a01b036127676125c5565b16821480156127d8575b61278457632f35253160e01b5f5260045ffd5b5f5c8381106127c9577fa575fb45e6259a68f4974e75c94adc55a35f2c06eee07709e964a4407e7dcfeb9184602092035f5d6040519485526001600160a01b031693a3565b632f35253160e01b5f5260045ffd5b506001600160a01b036127e96125c5565b166001600160a01b03821614612771565b505050565b50815f52600b60205260ff60405f205416612753565b61282e915060203d6020116115d4576115c78183612324565b5f61274b565b6040513d5f823e3d90fd5b638b78c6d81954330361284e57565b6382b429005f526004601cfd5b60018060a01b031680638b78c6d819547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3638b78c6d8195556fe405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbcb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf6a2646970667358221220b51b15eb901e1c1254c5a1070d1293c0c7571394f23ddc4f4d79754b2d0de2f164736f6c634300081e0033