0 txs
44.3k calls
constructor
constructor(address _mintFeeRecipient, address _upgradeGate, address _protocolRewards, address _timedSaleStrategy)
functions
assumeLastTokenIdMatches
viewfunction assumeLastTokenIdMatches(uint256 lastTokenId) view
balanceOf
viewfunction balanceOf(address account, uint256 id) view returns (uint256)
balanceOfBatch
viewfunction balanceOfBatch(address[] accounts, uint256[] ids) view returns (uint256[] batchBalances)
computeTotalReward
purefunction computeTotalReward(uint256 mintPrice, uint256 quantity) pure returns (uint256)
config
viewfunction config() view returns (address owner, uint96 __gap1, address fundsRecipient, uint96 __gap2, address transferHook, uint96 __gap3)
CONTRACT_BASE_ID
viewfunction CONTRACT_BASE_ID() view returns (uint256)
contractName
viewfunction contractName() view returns (string)
contractURI
viewfunction contractURI() view returns (string)
contractVersion
purefunction contractVersion() pure returns (string)
createReferrals
viewfunction createReferrals(uint256) view returns (address)
customRenderers
viewfunction customRenderers(uint256) view returns (address)
delegatedTokenId
viewfunction delegatedTokenId(uint32) view returns (uint256)
firstMinters
viewfunction firstMinters(uint256) view returns (address)
getCreatorRewardRecipient
viewfunction getCreatorRewardRecipient(uint256 tokenId) view returns (address)
getCustomRenderer
viewfunction getCustomRenderer(uint256 tokenId) view returns (address customRenderer)
getRoyalties
viewfunction getRoyalties(uint256 tokenId) view returns (tuple)
getTokenInfo
viewfunction getTokenInfo(uint256 tokenId) view returns (tuple)
implementation
viewfunction implementation() view returns (address)
isAdminOrRole
viewfunction isAdminOrRole(address user, uint256 tokenId, uint256 role) view returns (bool)
isApprovedForAll
viewfunction isApprovedForAll(address account, address operator) view returns (bool)
metadataRendererContract
viewfunction metadataRendererContract(uint256) view returns (address)
mintFee
viewfunction mintFee() view returns (uint256)
name
viewfunction name() view returns (string)
nextTokenId
viewfunction nextTokenId() view returns (uint256)
owner
viewfunction owner() view returns (address)
PERMISSION_BIT_ADMIN
viewfunction PERMISSION_BIT_ADMIN() view returns (uint256)
PERMISSION_BIT_FUNDS_MANAGER
viewfunction PERMISSION_BIT_FUNDS_MANAGER() view returns (uint256)
PERMISSION_BIT_METADATA
viewfunction PERMISSION_BIT_METADATA() view returns (uint256)
PERMISSION_BIT_MINTER
viewfunction PERMISSION_BIT_MINTER() view returns (uint256)
PERMISSION_BIT_SALES
viewfunction PERMISSION_BIT_SALES() view returns (uint256)
permissions
viewfunction permissions(uint256, address) view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
royalties
viewfunction royalties(uint256) view returns (uint32 royaltyMintSchedule, uint32 royaltyBPS, address royaltyRecipient)
royaltyInfo
viewfunction royaltyInfo(uint256 tokenId, uint256 salePrice) view returns (address receiver, uint256 royaltyAmount)
supportedPremintSignatureVersions
purefunction supportedPremintSignatureVersions() pure returns (string[])
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
symbol
purefunction symbol() pure returns (string)
uri
viewfunction uri(uint256 tokenId) view returns (string)
addPermission
nonpayablefunction addPermission(uint256 tokenId, address user, uint256 permissionBits)
adminMint
nonpayablefunction adminMint(address recipient, uint256 tokenId, uint256 quantity, bytes data)
burnBatch
nonpayablefunction burnBatch(address from, uint256[] tokenIds, uint256[] amounts)
callRenderer
nonpayablefunction callRenderer(uint256 tokenId, bytes data)
callSale
nonpayablefunction callSale(uint256 tokenId, address salesConfig, bytes data)
delegateSetupNewToken
nonpayablefunction delegateSetupNewToken(bytes premintConfig, bytes32 premintVersion, bytes signature, address firstMinter, address premintSignerContract) returns (uint256 newTokenId)
initialize
nonpayablefunction initialize(string contractName, string newContractURI, tuple defaultRoyaltyConfiguration, address defaultAdmin, bytes[] setupActions)
mint
payablefunction mint(address minter, uint256 tokenId, uint256 quantity, address[] rewardsRecipients, bytes minterArguments) payable
multicall
nonpayablefunction multicall(bytes[] data) returns (bytes[] results)
reduceSupply
nonpayablefunction reduceSupply(uint256 tokenId, uint256 newMaxSupply)
removePermission
nonpayablefunction removePermission(uint256 tokenId, address user, uint256 permissionBits)
safeBatchTransferFrom
nonpayablefunction safeBatchTransferFrom(address from, address to, uint256[] ids, uint256[] amounts, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes data)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setFundsRecipient
nonpayablefunction setFundsRecipient(address fundsRecipient)
setOwner
nonpayablefunction setOwner(address newOwner)
setTokenMetadataRenderer
nonpayablefunction setTokenMetadataRenderer(uint256 tokenId, address renderer)
setTransferHook
nonpayablefunction setTransferHook(address transferHook)
setupNewToken
nonpayablefunction setupNewToken(string newURI, uint256 maxSupply) returns (uint256)
setupNewTokenWithCreateReferral
nonpayablefunction setupNewTokenWithCreateReferral(string newURI, uint256 maxSupply, address createReferral) returns (uint256)
updateContractMetadata
nonpayablefunction updateContractMetadata(string _newURI, string _newName)
updateCreateReferral
nonpayablefunction updateCreateReferral(uint256 tokenId, address recipient)
updateRoyaltiesForToken
nonpayablefunction updateRoyaltiesForToken(uint256 tokenId, tuple newConfiguration)
updateTokenURI
nonpayablefunction updateTokenURI(uint256 tokenId, string _newURI)
upgradeTo
nonpayablefunction upgradeTo(address newImplementation)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdraw
nonpayablefunction withdraw()
events
AdminChanged
event AdminChanged(address previousAdmin, address newAdmin)
ApprovalForAll
event ApprovalForAll(address indexed account, address indexed operator, bool approved)
BeaconUpgraded
event BeaconUpgraded(address indexed beacon)
ConfigUpdated
event ConfigUpdated(address indexed updater, uint8 indexed updateType, (address owner, uint96 __gap1, address fundsRecipient, uint96 __gap2, address transferHook, uint96 __gap3) newConfig)
ContractMetadataUpdated
event ContractMetadataUpdated(address indexed updater, string uri, string name)
ContractRendererUpdated
event ContractRendererUpdated(address renderer)
ContractURIUpdated
event ContractURIUpdated()
CreatorAttribution
event CreatorAttribution(bytes32 structHash, string domainName, string version, address creator, bytes signature)
Initialized
event Initialized(uint8 version)
OwnershipTransferred
event OwnershipTransferred(address lastOwner, address newOwner)
Purchased
event Purchased(address indexed sender, address indexed minter, uint256 indexed tokenId, uint256 quantity, uint256 value)
RendererUpdated
event RendererUpdated(uint256 indexed tokenId, address indexed renderer, address indexed user)
SetupNewToken
event SetupNewToken(uint256 indexed tokenId, address indexed sender, string newURI, uint256 maxSupply)
TransferBatch
event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values)
TransferSingle
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value)
UpdatedPermissions
event UpdatedPermissions(uint256 indexed tokenId, address indexed user, uint256 indexed permissions)
UpdatedRoyalties
event UpdatedRoyalties(uint256 indexed tokenId, address indexed user, (uint32 royaltyMintSchedule, uint32 royaltyBPS, address royaltyRecipient) configuration)
UpdatedToken
event UpdatedToken(address indexed from, uint256 indexed tokenId, (string uri, uint256 maxSupply, uint256 totalMinted) tokenData)
Upgraded
event Upgraded(address indexed implementation)
URI
event URI(string value, uint256 indexed id)
errors
ADDRESS_DELEGATECALL_TO_NON_CONTRACT
error ADDRESS_DELEGATECALL_TO_NON_CONTRACT()
ADDRESS_LOW_LEVEL_CALL_FAILED
error ADDRESS_LOW_LEVEL_CALL_FAILED()
Burn_NotOwnerOrApproved
error Burn_NotOwnerOrApproved(address operator, address user)
Call_TokenIdMismatch
error Call_TokenIdMismatch()
CallerNotZoraCreator1155
error CallerNotZoraCreator1155()
CallFailed
error CallFailed(bytes reason)
CannotMintMoreTokens
error CannotMintMoreTokens(uint256 tokenId, uint256 quantity, uint256 totalMinted, uint256 maxSupply)
CannotReduceMaxSupplyBelowMinted
error CannotReduceMaxSupplyBelowMinted()
CanOnlyReduceMaxSupply
error CanOnlyReduceMaxSupply()
Config_TransferHookNotSupported
error Config_TransferHookNotSupported(address proposedAddress)
CREATOR_FUNDS_RECIPIENT_NOT_SET
error CREATOR_FUNDS_RECIPIENT_NOT_SET()
ERC1155_ACCOUNTS_AND_IDS_LENGTH_MISMATCH
error ERC1155_ACCOUNTS_AND_IDS_LENGTH_MISMATCH()
ERC1155_ADDRESS_ZERO_IS_NOT_A_VALID_OWNER
error ERC1155_ADDRESS_ZERO_IS_NOT_A_VALID_OWNER()
ERC1155_BURN_AMOUNT_EXCEEDS_BALANCE
error ERC1155_BURN_AMOUNT_EXCEEDS_BALANCE()
ERC1155_BURN_FROM_ZERO_ADDRESS
error ERC1155_BURN_FROM_ZERO_ADDRESS()
ERC1155_CALLER_IS_NOT_TOKEN_OWNER_OR_APPROVED
error ERC1155_CALLER_IS_NOT_TOKEN_OWNER_OR_APPROVED()
ERC1155_ERC1155RECEIVER_REJECTED_TOKENS
error ERC1155_ERC1155RECEIVER_REJECTED_TOKENS()
ERC1155_IDS_AND_AMOUNTS_LENGTH_MISMATCH
error ERC1155_IDS_AND_AMOUNTS_LENGTH_MISMATCH()
ERC1155_INSUFFICIENT_BALANCE_FOR_TRANSFER
error ERC1155_INSUFFICIENT_BALANCE_FOR_TRANSFER()
ERC1155_MINT_TO_ZERO_ADDRESS
error ERC1155_MINT_TO_ZERO_ADDRESS()
ERC1155_MINT_TO_ZERO_ADDRESS
error ERC1155_MINT_TO_ZERO_ADDRESS()
ERC1155_SETTING_APPROVAL_FOR_SELF
error ERC1155_SETTING_APPROVAL_FOR_SELF()
ERC1155_TRANSFER_TO_NON_ERC1155RECEIVER_IMPLEMENTER
error ERC1155_TRANSFER_TO_NON_ERC1155RECEIVER_IMPLEMENTER()
ERC1155_TRANSFER_TO_ZERO_ADDRESS
error ERC1155_TRANSFER_TO_ZERO_ADDRESS()
ERC1967_NEW_IMPL_NOT_CONTRACT
error ERC1967_NEW_IMPL_NOT_CONTRACT()
ERC1967_NEW_IMPL_NOT_UUPS
error ERC1967_NEW_IMPL_NOT_UUPS()
ERC1967_UNSUPPORTED_PROXIABLEUUID
error ERC1967_UNSUPPORTED_PROXIABLEUUID()
ETHWithdrawFailed
error ETHWithdrawFailed(address recipient, uint256 amount)
FirstMinterAddressZero
error FirstMinterAddressZero()
FUNCTION_MUST_BE_CALLED_THROUGH_ACTIVE_PROXY
error FUNCTION_MUST_BE_CALLED_THROUGH_ACTIVE_PROXY()
FUNCTION_MUST_BE_CALLED_THROUGH_DELEGATECALL
error FUNCTION_MUST_BE_CALLED_THROUGH_DELEGATECALL()
FundsWithdrawInsolvent
error FundsWithdrawInsolvent(uint256 amount, uint256 contractValue)
INITIALIZABLE_CONTRACT_ALREADY_INITIALIZED
error INITIALIZABLE_CONTRACT_ALREADY_INITIALIZED()
INITIALIZABLE_CONTRACT_IS_NOT_INITIALIZING
error INITIALIZABLE_CONTRACT_IS_NOT_INITIALIZING()
INVALID_ADDRESS_ZERO
error INVALID_ADDRESS_ZERO()
INVALID_ETH_AMOUNT
error INVALID_ETH_AMOUNT()
InvalidMerkleProof
error InvalidMerkleProof(address mintTo, bytes32[] merkleProof, bytes32 merkleRoot)
InvalidMintSchedule
error InvalidMintSchedule()
InvalidMintSchedule
error InvalidMintSchedule()
InvalidPremintVersion
error InvalidPremintVersion()
InvalidSignature
error InvalidSignature()
InvalidSignatureVersion
error InvalidSignatureVersion()
InvalidSigner
error InvalidSigner(bytes4 magicValue)
Mint_InsolventSaleTransfer
error Mint_InsolventSaleTransfer()
Mint_InvalidMintArrayLength
error Mint_InvalidMintArrayLength()
Mint_TokenIDMintNotAllowed
error Mint_TokenIDMintNotAllowed()
Mint_UnknownCommand
error Mint_UnknownCommand()
Mint_ValueTransferFail
error Mint_ValueTransferFail()
MinterContractAlreadyExists
error MinterContractAlreadyExists()
MinterContractDoesNotExist
error MinterContractDoesNotExist()
MintNotYetStarted
error MintNotYetStarted()
NewOwnerNeedsToBeAdmin
error NewOwnerNeedsToBeAdmin()
NonEthRedemption
error NonEthRedemption()
NoRendererForToken
error NoRendererForToken(uint256 tokenId)
ONLY_CREATE_REFERRAL
error ONLY_CREATE_REFERRAL()
OnlyAllowedForRegisteredMinter
error OnlyAllowedForRegisteredMinter()
OnlyAllowedForTimedSaleStrategy
error OnlyAllowedForTimedSaleStrategy()
OnlyTransfersFromZoraMints
error OnlyTransfersFromZoraMints()
PremintDeleted
error PremintDeleted()
premintSignerContractFailedToRecoverSigner
error premintSignerContractFailedToRecoverSigner()
premintSignerContractNotAContract
error premintSignerContractNotAContract()
ProtocolRewardsWithdrawFailed
error ProtocolRewardsWithdrawFailed(address caller, address recipient, uint256 amount)
Renderer_NotValidRendererContract
error Renderer_NotValidRendererContract()
RendererNotValid
error RendererNotValid(address renderer)
Sale_CannotCallNonSalesContract
error Sale_CannotCallNonSalesContract(address targetContract)
SaleEnded
error SaleEnded()
SaleHasNotStarted
error SaleHasNotStarted()
TokenIdMismatch
error TokenIdMismatch(uint256 expected, uint256 actual)
UserExceedsMintLimit
error UserExceedsMintLimit(address user, uint256 limit, uint256 requestedAmount)
UserMissingRoleForToken
error UserMissingRoleForToken(address user, uint256 tokenId, uint256 role)
UUPS_UPGRADEABLE_MUST_NOT_BE_CALLED_THROUGH_DELEGATECALL
error UUPS_UPGRADEABLE_MUST_NOT_BE_CALLED_THROUGH_DELEGATECALL()
WrongValueSent
error WrongValueSent()
creation bytecode
0x610140346200022457601f62005a8138819003918201601f1916830191906001600160401b0383118484101762000229578160809285926040958652833981010312620002245762000051826200023f565b9062000060602084016200023f565b926200007c6060620000748484016200023f565b92016200023f565b3060805261271060a052926001600160a01b039182168015801562000219575b620002085760e05260c0526000549360ff8560081c16159485801590620001fb575b80620001e1575b620001d05760ff19811660011760005585620001bd575b5016928315620001ac5761010093845261012092835262000171575b519061582c92836200025584396080518381816122980152818161232f0152612749015260a051836135ea015260c051838181612be4015281816131550152818161317e015281816131ba01526131e0015260e051838181612b630152612c230152518281816123a401526127bb015251816110130152f35b61ff0019600054166000557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986020825160018152a1620000f8565b8151632d87658960e01b8152600490fd5b61ffff19166101011760005538620000dc565b8351633d5c224160e11b8152600490fd5b50303b151580620000c55750600160ff82161415620000c5565b5060ff81161515620000be565b8351632d87658960e01b8152600490fd5b50828216156200009c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b0382168203620002245756fe6080604052600436101561001b575b361561001957600080fd5b005b6000803560e01c8062fdd58e14613bba5780630114420114613b9e57806301ffc9a714613a8857806306fdde03146139d55780630e89341c146139b557806310a7eb5d1461393457806313966db51461391257806313af4035146138aa57806317bd48bb1461383957806318711c7d1461381d57806318e97fd11461369057806323bd0386146136425780632a55205a146135ba5780632eb2c2d61461325f578063300ecdb91461321a578063359f13021461291b5780633659cfe6146127235780633ccfd60b146126635780634e1273f4146125635780634f1ef286146122f057806352d1902d146122855780635c60da1b1461224f5780635d0f6cba146120fc5780635e4e0404146120dd5780636661a9ba14611f82578063674cbae614611eff57806369a5b30214611ecb5780636b20c45414611c52578063709e537f14611bc957806375794a3c14611baa57806375d0c0dc14611b5857806379502c5514611afd5780637dafae4d14611ac95780637f2dc61c146119e85780637f77f574146119995780638a08eb4c146114bb5780638c7a63ae146114475780638da5cb5b1461141d5780638ec998a0146113bd578063929a7128146113a257806395d89b41146113445780639c5c63c9146112ab5780639ebb832414611277578063a0a8e46014611230578063a22cb46514611191578063a453eaf014611175578063a457c67314611153578063ac9650d8146110b7578063af80248014611001578063afed7e9e14610e63578063bb3bafd614610e37578063bdd864f214610dfd578063c046435614610de1578063c238d1ee14610d7d578063d258609a14610d14578063d904b94a14610b4e578063dd15e05f14610b1a578063e72878b414610ad4578063e74d86c214610aa3578063e8a3d48514610a6f578063e985e9c514610a1b578063ed788913146108b0578063ef71c82e1461061b578063f1b0d6bb146105ff5763f242432a146102f1575061000e565b346105fc5760a03660031901126105fc5761030a613be2565b610312613bf8565b906064356044356084356001600160401b0381116105f857610338903690600401613d48565b6001600160a01b039384169333851415806105d5575b6105c3578086169081156105b1576101cb54168061052f575b50828752602095609787526040882086600052875260406000205485811061051d578590858a526097895260408a2088600052895203604060002055838852609787526040882082600052875260406000206103c4868254614055565b90558186604051868152878a8201527fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6260403392a43b610402578680f35b61044693600087946040519687958694859363f23a6e6160e01b9b8c865233600487015260248601526044850152606484015260a0608484015260a4830190613c31565b03925af1600091816104ee575b506104cb5750506001906104656140bd565b6308c379a014610492575b50610480575b3880808080808680f35b6040516377d5b49160e11b8152600490fd5b61049a6140db565b90816104a65750610470565b6104c760405192839262461bcd60e51b845260048401526024830190613c31565b0390fd5b6001600160e01b03191614905061047657604051633fbfe7f560e21b8152600490fd5b61050f919250843d8611610516575b6105078183613cd5565b81019061409d565b9038610453565b503d6104fd565b604051636eaa1ea960e11b8152600490fd5b803b156105ac576000604051809263417b2f9760e11b82523060048301523360248301528860448301528460648301528660848301528760a483015260e060c483015281838161058260e482018a613c31565b03925af180156105a057156103675761059a90613ca7565b38610367565b6040513d6000823e3d90fd5b600080fd5b604051631c53f61160e21b8152600490fd5b604051633e2ea01560e21b8152600490fd5b508487526098602052604087203360005260205260ff604060002054161561034e565b8580fd5b80fd5b50346105fc57806003193601126105fc57602060405160048152f35b50346105fc5760403660031901126105fc576001600160401b036004358181116108ac5761064d903690600401613d48565b6024358281116108a857610665903690600401613d48565b3360009081526000805160206157d7833981519152602090815260409091205491939091601216158015906101fe90610884575b501561085e578480526101c682526040852090835190811161084a576106bf8254614185565b601f8111610807575b5082601f821160011461077e57927f74b7c2afa3f89c562b59674a101e2c48bceeb27cdb620afefa14446f1ffa487b9492826107499361073a968a91610773575b508160011b916000199060031b1c19161790555b610726866142bb565b604051938493604085526040850190613c31565b90838203908401523395613c31565b0390a27fa5d4097edda6d87cb9329af83fb3712ef77eeb13738ffe43cc35a4ce305ad9628180a180f35b905085015138610709565b82875283872090601f198316885b8181106107f057508361073a96937f74b7c2afa3f89c562b59674a101e2c48bceeb27cdb620afefa14446f1ffa487b98969361074996600194106107d7575b5050811b01905561071d565b87015160001960f88460031b161c1916905538806107cb565b91928660018192868b01518155019401920161078c565b828752838720601f830160051c810191858410610840575b601f0160051c01905b81811061083557506106c8565b878155600101610828565b909150819061081f565b634e487b7160e01b86526041600452602486fd5b604051634baa2a4d60e01b81523360048201526000602482015260106044820152606490fd5b90506000805282526040600020336000528252601260406000205416151538610699565b8380fd5b8280fd5b50346105fc57806003193601126105fc5760405163ed78891360e01b8152818160048173bac8241717c8622a579691db9f94c6c5a012fab95af4908115610a10578291610958575b5060405190602092838301848452825180915260408401948060408360051b870101940192955b82871061092c5785850386f35b909192938280610948600193603f198a82030186528851613c31565b960192019601959291909261091f565b90503d8083833e6109698183613cd5565b810160209081838203126108a85782516001600160401b03938482116105f857019080601f83011215610a0c578151906109a282613d7c565b946109b06040519687613cd5565b828652848087019360051b85010193828511610a0857858101935b8585106109df5750505050505050386108f8565b8451838111610a045787916109f9868480948701016148ce565b8152019401936109cb565b8980fd5b8780fd5b8480fd5b6040513d84823e3d90fd5b50346105fc5760403660031901126105fc57610a35613be2565b6040610a3f613bf8565b9260018060a01b0380931681526098602052209116600052602052602060ff604060002054166040519015158152f35b50346105fc57806003193601126105fc57610a9f610a8b614cfd565b604051918291602083526020830190613c31565b0390f35b50346105fc5760203660031901126105fc576020610ac2600435615503565b6040516001600160a01b039091168152f35b50346105fc5760203660031901126105fc576004356000196101c85401818103610afc578280f35b6044925060405191634fa09b3f60e01b835260048301526024820152fd5b50346105fc5760203660031901126105fc57602090600435815261012d8252604060018060a01b0391205416604051908152f35b50346105fc5760603660031901126105fc57600435610b6b613bf8565b906044356001600160401b0381116108a857610b8b903690600401613e2c565b91806000526101fe936020948086526040600020336000528652600a604060002054161590811591610cf0575b5015610cca576001600160a01b031690610bd28183614453565b6040516301ffc9a760e01b8152636890e5b360e01b60048201528581602481865afa908115610cbf578791610c92575b5015610c7957836024116105f857600483013503610c6757828580949381946040519384928337810182815203925af190610c3b613fbc565b9115610c45578280f35b6104c760405192839263a5fa8d2b60e01b845260048401526024830190613c31565b60405163fe486c2b60e01b8152600490fd5b6040516370adc70360e11b815260048101839052602490fd5b610cb29150863d8811610cb8575b610caa8183613cd5565b8101906149d3565b38610c02565b503d610ca0565b6040513d89823e3d90fd5b604051634baa2a4d60e01b81523360048201526024810183905260086044820152606490fd5b90506000805285526040600020336000528552600a60406000205416151538610bb8565b50346105fc5760403660031901126105fc57600435906001600160401b0382116105fc576020610d70610d4a3660048601613e2c565b610d53336144da565b610d5b614265565b610d6b3392602435923691613d11565b614555565b6001606555604051908152f35b50346105fc5760803660031901126105fc57610d97613be2565b602435606435916001600160401b0383116108a857610dbd610dd9933690600401613d48565b91610dc6614265565b610dd08133614453565b604435916149eb565b600160655580f35b50346105fc57806003193601126105fc57602060405160028152f35b50346105fc5760203660031901126105fc5760043563ffffffff81168091036105ac57816040916020935261023383522054604051908152f35b50346105fc5760203660031901126105fc57610a9f610e57600435615538565b60405191829182613f44565b50346105fc5760803660031901126105fc5760043560603660231901126105ac5760405190610e9182613c71565b63ffffffff60243581811681036105ac57835260443581811681036105ac576020848101918252606435906001600160a01b0380831683036105ac5760408701928352856000526101fe80835260406000203360005283526022604060002054161590811591610fdd575b5015610fb95784875116610fb0575b8251161580610fa4575b610f925784600052610160815263ffffffff60201b6040600020948751169185549451901b1691600160401b600160e01b03905160401b169263ffffffff60e01b1617171790557f5837d55897cfc337f160a71d7b63a047abd50a3a8834f1c5d70f338846358c6d60405180610f8c339582613f44565b0390a380f35b604051630d9b92f160e01b8152600490fd5b50838351161515610f15565b60008752610f0b565b6064868360405191634baa2a4d60e01b835233600484015260248301526044820152fd5b90506000805282526040600020336000528252602260406000205416151538610efc565b50346105fc5761101036613d66565b907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633036110a5578083526101fe6020526040832033600052602052600460406000205416156110935782526101c66020526040822060028101548210611081576001015580f35b6040516393a76ea360e01b8152600490fd5b6040516322ecd3ff60e21b8152600490fd5b604051636fa2ab9f60e11b8152600490fd5b50346105fc5760208060031936011261114f576004356001600160401b0381116108ac576110f36110ed84923690600401613dfc565b90615600565b60405191838301848452825180915260408401948060408360051b870101940192955b8287106111235785850386f35b90919293828061113f600193603f198a82030186528851613c31565b9601920196019592919092611116565b5080fd5b50346105fc57602061116d61116736613d66565b90614172565b604051908152f35b50346105fc57806003193601126105fc57602060405160108152f35b50346105fc5760403660031901126105fc576111ab613be2565b602435908115158092036108ac576001600160a01b03169033821461121e5733835260986020526040832082600052602052604060002060ff1981541660ff83161790556040519081527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3160203392a380f35b604051636b3fa0d960e11b8152600490fd5b50346105fc57806003193601126105fc57610a9f60405161125081613c56565b600681526519171899971960d11b6020820152604051918291602083526020830190613c31565b50346105fc5760203660031901126105fc5760209060043581526102328252604060018060a01b0391205416604051908152f35b50346105fc5760403660031901126105fc57806024356004356001600160401b038211611340576112e183923690600401613d48565b906112ec81336143cc565b6001600160a01b03906112fe90615503565b1682602083519301915af1611311613fbc565b901561131b575080f35b60405163a5fa8d2b60e01b8152602060048201529081906104c7906024830190613c31565b5050fd5b50346105fc57806003193601126105fc5760405160208082528160605191828183015260005b83811061138c5750508160006040809484010152601f80199101168101030190f35b608081015185820160400152849250810161136a565b50346105fc57806003193601126105fc576020604051818152f35b50346105fc576113cc36613eeb565b916113d7813361486c565b60008181526101fe602090815260408083206001600160a01b0395909516808452949091528120805494909417938490556000805160206157778339815191529080a480f35b50346105fc57806003193601126105fc576101c9546040516001600160a01b039091168152602090f35b50346105fc5760203660031901126105fc57604081610a9f9282805161146c81613c71565b60608152826020820152015260043581526101c66020522060026040519161149383613c71565b61149c816141bf565b8352600181015460208401520154604082015260405191829182613f15565b50346105fc5760e03660031901126105fc576004356001600160401b03811161114f576114ec903690600401613d48565b6024356001600160401b0381116108ac5761150b903690600401613d48565b60603660431901126105ac5760405161152381613c71565b60443563ffffffff811681036105ac57815260643563ffffffff811681036105ac5760208201526084356001600160a01b03811681036105ac57604082015260a4356001600160a01b03811690036105ac5760c4356001600160401b038111610a0c57611594903690600401613dfc565b909161159e614265565b855493600885901c60ff161580159061198d575b80611975575b61196357600160ff19861617875560ff8560081c1615611952575b60ff875460081c16156119415760016065556115f960a4356001600160a01b03166154c0565b6101c8908154916001830190556040519061161382613c71565b81526000602082015260006040820152816000526101c6602052604060002081518051906001600160401b03821161192b5781906116518454614185565b601f81116118db575b50602090601f831160011461186f57600092611864575b50508160011b916000199060031b1c19161781555b60208201516001820155600260408301519101557f5086d1bcea28999da9875111e3592688fbfa821db63214c695ca35768080c2fe604051806116ca339482613f15565b0390a363ffffffff81511661185b575b60408101516001600160a01b03161580611848575b610f925760ff946117a29160008052610160602052604060002063ffffffff82511681549063ffffffff60201b602085015160201b1690600160401b600160e01b03604086015160401b169263ffffffff60e01b16171717905560007f5837d55897cfc337f160a71d7b63a047abd50a3a8834f1c5d70f338846358c6d6040518061177b339582613f44565b0390a361179260a4356001600160a01b0316614ec6565b61179d60a435614f42565b6142bb565b806117f4575b505060081c16156117bb57600160655580f35b61ff001981541681557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160018152a1610dd9565b61180691611801336154c0565b615600565b503360008181526000805160206157d7833981519152602052604081208054600219169081905591906000805160206157778339815191528180a438806117a8565b5063ffffffff60208201511615156116ef565b600081526116da565b015190503880611671565b9250836000526020600020906000935b601f19841685106118c0576001945083601f198116106118a7575b505050811b018155611686565b015160001960f88460031b161c1916905538808061189a565b8181015183556020948501946001909301929091019061187f565b909150836000526020600020601f840160051c810160208510611924575b90849392915b601f830160051c8201811061191557505061165a565b600081558594506001016118ff565b50806118f9565b634e487b7160e01b600052604160045260246000fd5b6040516296bfb160e81b8152600490fd5b61ffff1985166101011787556115d3565b604051633d5c224160e11b8152600490fd5b50303b1515806115b85750600160ff861614156115b8565b5060ff851615156115b2565b50346105fc5760203660031901126105fc576040606091600435815261016060205220546040519063ffffffff80821683528160201c16602083015260018060a01b039060401c166040820152f35b50346105fc5760203660031901126105fc576004356001600160a01b0381169081900361114f57611a18336147e6565b80611a54575b6101cb80546001600160a01b031916909117905560405160029033906000805160206157578339815191529080610f8c81614c92565b6040516301ffc9a760e01b815262123aaf60e51b6004820152602081602481855afa908115611abe578391611aa0575b50611a1e576024906040519062be74ab60e51b82526004820152fd5b611ab8915060203d8111610cb857610caa8183613cd5565b38611a84565b6040513d85823e3d90fd5b50346105fc5760203660031901126105fc5760209060043581526102318252604060018060a01b0391205416604051908152f35b50346105fc57806003193601126105fc5760c06101c9546101ca54906101cb54906040519260018060a01b0391828116855260a01c6020850152818116604085015260a01c60608401528116608083015260a01c60a0820152f35b50346105fc57806003193601126105fc57610a9f604051611b7881613c56565b6011815270436f6f702043726561746f72203131353560781b6020820152604051918291602083526020830190613c31565b50346105fc57806003193601126105fc5760206101c854604051908152f35b50346105fc5760a03660031901126105fc576001600160401b036004358181116108ac57611bfb903690600401613d48565b916044359182116105fc5750611c15903690600401613e2c565b9091906001600160a01b03906064359082821682036105ac5760843592831683036105ac57602094610d7094611c49614265565b6024359061501f565b50346105fc57600319906060368301126105fc57611c6e613be2565b6001600160401b036024358181116108a857611c8e903690600401613dfc565b949091604435908111610a0c57611ca9903690600401613dfc565b6001600160a01b0396858816959194913387141580611ea8575b611e8a5750611ce09291611cd8913691613d93565b933691613d93565b948315611e785782519186518303611e665760405191611cff83613cba565b8683526101cb54169182611dcd575b505050835b818110611d645750507f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb611d508495604051918291339583614078565b0390a480604051611d6081613cba565b5280f35b611d6e818461402b565b5190611d7a818861402b565b51828752609760208181526040892088600052815260406000205491838310611dbb576001958a528152604089209088600052520360406000205501611d13565b604051632fc4b76160e11b8152600490fd5b823b156105ac57879285600088611e418296611e2296611e326040519a8b998a988997634058856760e11b89523060048a01523360248a0152604489015288606489015260e0608489015260e4880190613eb7565b90848783030160a4880152613eb7565b918483030160c4850152613c31565b03925af180156105a057611e57575b8080611d0e565b611e6090613ca7565b38611e50565b60405163f9532c3960e01b8152600490fd5b6040516345d40ad560e01b8152600490fd5b6040516341ce11f960e11b81529081906104c7903360048401614c78565b508688526098602052604088203360005260205260ff6040600020541615611cc3565b50346105fc5760203660031901126105fc5760209060043581526101c78252604060018060a01b0391205416604051908152f35b50346105fc5760603660031901126105fc576004356001600160401b03811161114f57611f30903690600401613e2c565b91906044356001600160a01b03811691908290036105ac57611f5a604091602095610d53336144da565b8084526102318552922080546001600160a01b03191690911790556001606555604051908152f35b50346105fc5760403660031901126105fc576004356024356001600160a01b038116908190036108ac57611fb4614265565b611fbe82336143cc565b81835261012d60209081526040842080546001600160a01b031916831790559080612068575b6040513382857f5010f780a0de79bcfb9f3d6fec3cfe29758ef5c5800d575af709bc590bd78ade8880a484846120485750507f56e810c8cae84731149f628981d25769a084570b9ba6eebf3c32879e3dce56099250604051908152a1600160655580f35b6040925083600080516020615797833981519152948352820152a2610dd9565b6040516301ffc9a760e01b8152633de3f32360e11b60048201528281602481855afa9081156120d25785916120b5575b50611fe4576024906040519063da755beb60e01b82526004820152fd5b6120cc9150833d8511610cb857610caa8183613cd5565b38612098565b6040513d87823e3d90fd5b50346105fc5760203660031901126105fc576020610ac260043561495c565b50346105fc5761210b36613eeb565b6001600160a01b0392909183163381148061222b575b1561221c575b60008281526101fe6020818152604080842085855282528320805496199096169586905594909391839083906000805160206157778339815191529080a415918261220d575b826121ea575b505061217d578280f35b7f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09160006040926101c99283549360018060a01b031985169055845193168352820152a160006040516000805160206157578339815191523391806121e181614c92565b0390a338808280f35b909150848052825260408420906000528152600260406000205416153880612173565b6101c95485168214925061216d565b612226823361486c565b612127565b508185526101fe602052604085203360005260205282806040600020541614612121565b50346105fc57806003193601126105fc576000805160206157b7833981519152546040516001600160a01b039091168152602090f35b50346105fc57806003193601126105fc577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031630036122de5760206040516000805160206157b78339815191528152f35b604051635e4c25f160e01b8152600490fd5b5060403660031901126105fc57612305613be2565b6024356001600160401b0381116108ac57612324903690600401613d48565b906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811690308214612551576000805160206157b7833981519152908082541692830361253f57839261237e336147e6565b604051906321f7434760e01b8252818061239f602097889460048401614c78565b0381857f0000000000000000000000000000000000000000000000000000000000000000165afa908115610cbf578791612522575b50156105f8577f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612414575050506124119150613f75565b80f35b8316906040516352d1902d60e01b81528381600481865afa600091816124f3575b5061244c5760405163e5ec176960e01b8152600490fd5b036124e15761245a83613f75565b604051907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28351158015906124d9575b61249a575b5050505080f35b823b156124ca57508260009283926124c095519201905af46124ba613fbc565b90614149565b5038808080612493565b63369891e760e01b8152600490fd5b50600161248e565b6040516308373ebf60e41b8152600490fd5b90918582813d831161251b575b61250a8183613cd5565b810103126105fc5750519038612435565b503d612500565b6125399150843d8611610cb857610caa8183613cd5565b386123d4565b6040516364cd8d1960e01b8152600490fd5b604051631932df4560e01b8152600490fd5b50346105fc5760403660031901126105fc576001600160401b036004358181116108ac57366023820112156108ac576125a6903690602481600401359101613e59565b906024359081116108ac576125bf903690600401613de1565b81519181518303612651576125d383613d7c565b936125e16040519586613cd5565b838552601f196125f085613d7c565b013660208701375b8381106126155760405160208082528190610a9f90820188613eb7565b6001906126406001600160a01b0361262d838661402b565b5116612639838761402b565b5190613fec565b61264a828861402b565b52016125f8565b60405163133933f760e21b8152600490fd5b50346105fc57806003193601126105fc5761267d33615466565b80156126fb575b156126d5574760018060a01b036101ca8380808086868654166204baf0f16126aa613fbc565b50156126b4578380f35b604493505416906040519163292264c360e21b835260048301526024820152fd5b604051634baa2a4d60e01b81523360048201526000602482015260206044820152606490fd5b503360009081526000805160206157d783398151915260205260409020546022161515612684565b50346105fc5760208060031936011261114f5761273e613be2565b6001600160a01b03917f00000000000000000000000000000000000000000000000000000000000000008316308114612551576000805160206157b7833981519152908482541690810361253f5782846127b69261279b336147e6565b6040516321f7434760e01b8152938492839260048401614c78565b0381887f0000000000000000000000000000000000000000000000000000000000000000165afa9081156129105786916128f3575b5015610a0c57604051936127fe85613cba565b8585527f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615612838575050506124119150613f75565b8316906040516352d1902d60e01b81528381600481865afa600091816128c4575b506128705760405163e5ec176960e01b8152600490fd5b036124e15761287e83613f75565b604051907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a28351158015906128bc5761249a575050505080f35b50600061248e565b90918582813d83116128ec575b6128db8183613cd5565b810103126105fc5750519038612859565b503d6128d1565b61290a9150833d8511610cb857610caa8183613cd5565b386127eb565b6040513d88823e3d90fd5b5060a03660031901126105fc57612930613be2565b906064356001600160401b03811161114f57612950903690600401613dfc565b6084356001600160401b0381116108a857612972612984913690600401613e2c565b93909261297d614265565b3691613e59565b9161299a6024356001600160a01b038716614453565b66016bcc41e90000928360443581020460443503613206576024358552610231602052604085205485946001600160a01b039091169182156131de575b805115806131b6576131a257602001516001600160a01b03165b6001600160a01b0381161561317b575b612a0c60243561495c565b916001600160a01b03831615613153575b602435885261023260205260408820546001600160a01b031691821561314b575b612a46614931565b506044358202341015612a6557604051633b78763760e21b8152600490fd5b3460443583020361304957612a78614931565b50612a81614931565b63047868c0808252602082018b8152604083019062bebc20825260608401928d845269065a4da25d3016c000006044350290604435880282041460443588021517156130355791612b20612b2092612b2895946305f5e100809104885280612aee83516044358d02614172565b04825280612b0185516044358d02614172565b048452612b1386516044358c02614172565b0485528651905190614055565b905190614055565b60443584029081039081116130215760808201525b8051948561301b575089935b6020820151604083015160608401516080909401519490917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b15612fdc5760405163faa3516f60e01b81526001600160a01b03988916600482015260248101999099529887166044808a019190915260648901999099528616608488015260a4870152841660c486015260e48501527f00000000000000000000000000000000000000000000000000000000000000008316610104850152610124840152919287928492610144928492903502907f0000000000000000000000000000000000000000000000000000000000000000165af180156120d257612fe8575b50612c969184916040519384928392636890e5b360e01b84523360048501526024356024850152604435604485015287606485015260a0608485015260a4840191614910565b0381836001600160a01b0389165af1908115611abe578391612e6a575b5051825b8151811015612e1c57612cca818361402b565b5151612cd58161499f565b612cde8161499f565b60018103612d7357506020612cf3828461402b565b510151604081805181010312610a0c576040612d11602083016149bf565b91015190818511612d615785918291829182916001600160a01b03166204baf0f1612d3a613fbc565b5015612d4f57612d4a905b614990565b612cb7565b6040516338dcead760e21b8152600490fd5b604051631913cf3760e21b8152600490fd5b80612d7f60029261499f565b03612e13576020612d90828461402b565b51015190606082805181010312610a0c57612dad602083016149bf565b91606060408201519101519060243515159081612e06575b50612df457612d4a92612d459160405191612ddf83613cba565b888352602435906001600160a01b03166149eb565b604051634cdcfbf960e01b8152600490fd5b9050602435141538612dc5565b612d4a90614990565b6040805160443581523460208201528591602435916001600160a01b0389169133917fb362243af1e2070d7d5bf8d713f2e0fab64203f1b71462afbe20572909788c5e9190a4600160655580f35b3d91508184823e612e7b8282613cd5565b60208183810103126108a8578051906001600160401b038211610a0c5760408282018483010312610a0c5760405192612eb384613c56565b828201516001600160401b038111612fe457818301601f8286860101011215612fe45780848401015190612ee682613d7c565b92612ef46040519485613cd5565b828452602084019181860160208560051b838a8a0101010111610a04576020818888010101925b60208560051b838a8a010101018410612f4857505050505090602092918452010151602082015238612cb3565b83516001600160401b038111612fe0576040888a0184018201858a0103601f190112612fe05760405190612f7b82613c56565b602081858c8c01010101516003811015612fdc578252604081858c8c0101010151906001600160401b038211612fdc579260209392612fcb8b868096958f968a83988d86019501010101016148ce565b838201528152019401939050612f1b565b8d80fd5b8b80fd5b8680fd5b6001600160401b03819592939511613007576040529290612c96612c50565b634e487b7160e01b82526041600452602482fd5b93612b49565b634e487b7160e01b8b52601160045260248bfd5b634e487b7160e01b8e52601160045260248efd5b9650613053614931565b5061305c614931565b88815288602082015263017d7840604082015288606082015260016044358302151715613137578881526305f5e1008061309e60208401516044358602614172565b046020830152806130b760408401516044358602614172565b0460408301526130cf60608301516044358502614172565b0460608201526131016130f66130eb8351602085015190614055565b604084015190614055565b606083015190614055565b6044358302908103908111613123576080820152966044358202340397612b3d565b634e487b7160e01b8a52601160045260248afd5b634e487b7160e01b89526011600452602489fd5b839250612a3e565b7f00000000000000000000000000000000000000000000000000000000000000009250612a1d565b507f0000000000000000000000000000000000000000000000000000000000000000612a01565b634e487b7160e01b87526032600452602487fd5b50507f00000000000000000000000000000000000000000000000000000000000000006129f1565b7f000000000000000000000000000000000000000000000000000000000000000092506129d7565b634e487b7160e01b85526011600452602485fd5b50346105fc5760403660031901126105fc576040602091613239613bf8565b60043582526101fe84528282206001600160a01b03909116825283522054604051908152f35b50346105fc5760a03660031901126105fc57613279613be2565b613281613bf8565b6001600160401b0390604435828111610a0c576132a2903690600401613de1565b916064358181116105f8576132bb903690600401613de1565b906084359081116105f8576132d4903690600401613d48565b926001600160a01b039085821633141580613597575b6105c35780518351810361265157828516156105b157826101cb5416806134f2575b50875b81811061347557505060405182851690838816907f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb339180613352898883614078565b0390a4833b61335f578680f35b60405163bc197c8160e01b808252336004830152968316602482015260a0604482015294859384926133959060a4850190613eb7565b8381036003190160648501526133aa91613eb7565b8281036003190160848401526133bf91613c31565b0392169181865a94602095f1839181613455575b5061343457505060016133e46140bd565b6308c379a0146133fd575b610480573880808080808680f35b6134056140db565b8061341057506133ef565b60405162461bcd60e51b8152602060048201529081906104c7906024830190613c31565b6001600160e01b0319161461047657604051633fbfe7f560e21b8152600490fd5b61346e91925060203d8111610516576105078183613cd5565b90386133d3565b61347f818461402b565b519061348b818761402b565b51828b5260978060205260408c20878c168d5260205260408c20549082821061051d578460408e6001978152836020528c8b83832091168252602052206134d3858254614055565b90558d5260205260408c20878c168d526020520360408b20550161330f565b803b1561359357604051634058856760e11b81523060048201523360248201528885166044820152868516606482015260e06084820152908990829081838161356a8d6135588d61354660e486018e613eb7565b8581036003190160a487015290613eb7565b8381036003190160c485015290613c31565b03925af18015613588571561330c5761358290613ca7565b3861330c565b6040513d8b823e3d90fd5b8880fd5b50818616875260986020526040872033885260205260ff604088205416156132ea565b50346105fc576135d66135e76135cf36613d66565b9290615538565b9163ffffffff602084015116614172565b907f000000000000000000000000000000000000000000000000000000000000000090811561362e57604080945060018060a01b0391015116918351928352046020820152f35b634e487b7160e01b84526012600452602484fd5b50346105fc5760603660031901126105fc5760209061365f613be2565b60243582526101fe8352604082209060018060a01b0316825282526040604435600217912054161515604051908152f35b50346105fc5760403660031901126105fc576001600160401b03906004356024358381116108ac576136c6903690600401613d48565b926136d182336143cc565b81156108ac576040519180600080516020615797833981519152602094858152806136fe8782018a613c31565b0390a283526101c6825260408320918451918211613809576137208354614185565b601f81116137c6575b5080601f83116001146137645750839482939492613759575b50508160011b916000199060031b1c191617905580f35b015190503880613742565b90601f198316958486528286209286905b8882106137ae57505083600195969710613795575b505050811b01905580f35b015160001960f88460031b161c1916905538808061378a565b80600185968294968601518155019501930190613775565b838552818520601f840160051c8101918385106137ff575b601f0160051c01905b8181106137f45750613729565b8581556001016137e7565b90915081906137de565b634e487b7160e01b84526041600452602484fd5b50346105fc57806003193601126105fc57602060405160088152f35b50346105fc5760403660031901126105fc57600435613856613bf8565b8183526102316020819052604084205491926001600160a01b0392831633036138985784526020526040832080546001600160a01b0319169190921617905580f35b604051632afb0ecf60e01b8152600490fd5b50346105fc5760203660031901126105fc576138c4613be2565b6138cd336147e6565b8180526101fe602090815260408084206001600160a01b0384168552909152822054600216156139005761241190614ec6565b60405163131dd3a760e31b8152600490fd5b50346105fc57806003193601126105fc57602060405166016bcc41e900008152f35b50346105fc5760203660031901126105fc5761394e613be2565b61395733615466565b8015613992575b1561396c5761241190614f42565b604051634baa2a4d60e01b81523360048201526024810183905260206044820152606490fd5b508180526101fe602052604082203383526020526022604083205416151561395e565b50346105fc5760203660031901126105fc57610a9f610a8b600435614e48565b50346105fc57806003193601126105fc576040518161019380546139f881614185565b80855291600191808316908115613a5d5750600114613a22575b610a9f85610a8b81890382613cd5565b835260208084209095505b828410613a4a5750505081610a9f93610a8b928201019338613a12565b8054858501870152928501928101613a2d565b9050610a9f9650610a8b9450602092508593915060ff191682840152151560051b8201019338613a12565b50346105fc5760203660031901126105fc5760043563ffffffff60e01b811680910361114f5760209063152a902d60e11b8114908115613b8d575b8115613b4d575b8115613b3c575b8115613b2b575b8115613b1a575b8115613b09575b8115613af8575b506040519015158152f35b63015f004960e71b14905082613aed565b631acf898160e11b81149150613ae6565b63709e537f60e01b81149150613adf565b63ed78891360e01b81149150613ad8565b631d74303760e21b81149150613ad1565b9050636cdb3d1360e11b81148015613b7d575b8015613b6d575b90613aca565b506301ffc9a760e01b8114613b67565b506303a24d0760e21b8114613b60565b633b076a1160e21b81149150613ac3565b50346105fc57806003193601126105fc57602090604051908152f35b50346105fc5760403660031901126105fc57602061116d613bd9613be2565b60243590613fec565b600435906001600160a01b03821682036105ac57565b602435906001600160a01b03821682036105ac57565b60005b838110613c215750506000910152565b8181015183820152602001613c11565b90602091613c4a81518092818552858086019101613c0e565b601f01601f1916010190565b604081019081106001600160401b0382111761192b57604052565b606081019081106001600160401b0382111761192b57604052565b60a081019081106001600160401b0382111761192b57604052565b6001600160401b03811161192b57604052565b602081019081106001600160401b0382111761192b57604052565b90601f801991011681019081106001600160401b0382111761192b57604052565b6001600160401b03811161192b57601f01601f191660200190565b929192613d1d82613cf6565b91613d2b6040519384613cd5565b8294818452818301116105ac578281602093846000960137010152565b9080601f830112156105ac57816020613d6393359101613d11565b90565b60409060031901126105ac576004359060243590565b6001600160401b03811161192b5760051b60200190565b9291613d9e82613d7c565b91613dac6040519384613cd5565b829481845260208094019160051b81019283116105ac57905b828210613dd25750505050565b81358152908301908301613dc5565b9080601f830112156105ac57816020613d6393359101613d93565b9181601f840112156105ac578235916001600160401b0383116105ac576020808501948460051b0101116105ac57565b9181601f840112156105ac578235916001600160401b0383116105ac57602083818601950101116105ac57565b9291613e6482613d7c565b91613e726040519384613cd5565b829481845260208094019160051b81019283116105ac57905b828210613e985750505050565b81356001600160a01b03811681036105ac578152908301908301613e8b565b90815180825260208080930193019160005b828110613ed7575050505090565b835185529381019392810192600101613ec9565b60609060031901126105ac57600435906024356001600160a01b03811681036105ac579060443590565b6020815260606040613f3284518360208601526080850190613c31565b93602081015182850152015191015290565b9190916040606082019363ffffffff80825116845260208201511660208401528160018060a01b0391015116910152565b803b15613faa576000805160206157b783398151915280546001600160a01b0319166001600160a01b03909216919091179055565b60405163529880eb60e01b8152600490fd5b3d15613fe7573d90613fcd82613cf6565b91613fdb6040519384613cd5565b82523d6000602084013e565b606090565b6001600160a01b031690811561401957600052609760205260406000209060005260205260406000205490565b604051632188330d60e21b8152600490fd5b805182101561403f5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b9190820180921161406257565b634e487b7160e01b600052601160045260246000fd5b909161408f613d6393604084526040840190613eb7565b916020818403910152613eb7565b908160209103126105ac57516001600160e01b0319811681036105ac5790565b60009060033d116140ca57565b905060046000803e60005160e01c90565b600060443d10613d6357604051600319913d83016004833e81516001600160401b03918282113d60248401111761413857818401948551938411614140573d850101602084870101116141385750613d6392910160200190613cd5565b949350505050565b50949350505050565b156141515790565b80511561416057805190602001fd5b6040516350a28c9b60e11b8152600490fd5b8181029291811591840414171561406257565b90600182811c921680156141b5575b602083101461419f57565b634e487b7160e01b600052602260045260246000fd5b91607f1691614194565b90604051918260008254926141d384614185565b90818452600194858116908160001461424257506001146141ff575b50506141fd92500383613cd5565b565b9093915060005260209081600020936000915b81831061422a5750506141fd935082010138806141ef565b85548884018501529485019487945091830191614212565b9150506141fd94506020925060ff191682840152151560051b82010138806141ef565b600260655414614276576002606555565b60405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606490fd5b9081516001600160401b03811161192b57610193906142da8254614185565b601f8111614384575b50602080601f8311600114614320575081929394600092614315575b50508160011b916000199060031b1c1916179055565b0151905038806142ff565b90601f198316958460005282600020926000905b88821061436c57505083600195969710614353575b505050811b019055565b015160001960f88460031b161c19169055388080614349565b80600185968294968601518155019501930190614334565b600083815260208120601f840160051c810192602085106143c2575b601f0160051c01915b8281106143b75750506142e3565b8181556001016143a9565b90925082906143a0565b9060008181526101fe9081602052604081209360018060a01b03169384825260205260126040822054161591821592614430575b50501561440b575050565b6064925060405191634baa2a4d60e01b83526004830152602482015260106044820152fd5b601292509060409181805260205281812085825260205220541615153880614400565b9060008181526101fe9081602052604081209360018060a01b031693848252602052600660408220541615918215926144b7575b505015614492575050565b6064925060405191634baa2a4d60e01b83526004830152602482015260046044820152fd5b600692509060409181805260205281812085825260205220541615153880614487565b6144e381615493565b8015614524575b156144f25750565b604051634baa2a4d60e01b81526001600160a01b03909116600480830191909152600060248301526044820152606490fd5b506001600160a01b03811660009081526000805160206157d7833981519152602052604090205460061615156144ea565b9092916101c8918254926001840190556040519461457286613c71565b81865280602087015260006040870152836000526101c660205260406000209580519687516001600160401b03811161192b576145af8254614185565b98601f8a1161479e575b87989950600097969750602090601f831160011461470857928288937f1b944478023872bf91b25a13fdba3a686fdb1bf4dbb872f850240fad4b8cc0689896936146c498966000926146fd575b50508160011b916000199060031b1c19161781555b60208201516001820155600260408301519101557f5086d1bcea28999da9875111e3592688fbfa821db63214c695ca35768080c2fe6040518061465f339482613f15565b0390a360008581526101fe602090815260408083206001600160a01b039990991680845298909152812080546002179081905590879087906000805160206157778339815191529080a481516146d0575b604051928392604084526040840190613c31565b9060208301520390a390565b8460008051602061579783398151915260405160208152806146f56020820187613c31565b0390a26146b0565b015190503880614606565b908360005260206000209160005b601f19851681106147835750837f1b944478023872bf91b25a13fdba3a686fdb1bf4dbb872f850240fad4b8cc0689896936146c49896936001938c97601f1981161061476a575b505050811b01815561461b565b015160001960f88460031b161c1916905538808061475d565b8183015184558b995060019093019260209283019201614716565b826000526020600020601f830160051c81019a602084106147dc575b601f0160051c01995b8a81106147d057506145b9565b600081556001016147c3565b909a508a906147ba565b6001600160a01b031660008181526000805160206157d78339815191526020526040812054600216158015906101fe9061484a575b5015614825575050565b6064925060405191634baa2a4d60e01b83526004830152602482015260026044820152fd5b905081805260205260408120828252602052600260408220541615153861481b565b9060008181526101fe9081602052604081209360018060a01b031693848252602052600260408220541615918215926148ab575b505015614825575050565b6002925090604091818052602052818120858252602052205416151538806148a0565b81601f820112156105ac5780516148e481613cf6565b926148f26040519485613cd5565b818452602082840101116105ac57613d639160208085019101613c0e565b908060209392818452848401376000828201840152601f01601f1916010190565b6040519061493e82613c8c565b60006080838281528260208201528260408201528260608201520152565b6001600160a01b0390819060409061497390615538565b0151168061498b57506101ca541680613d6357503090565b905090565b60001981146140625760010190565b600311156149a957565b634e487b7160e01b600052602160045260246000fd5b51906001600160a01b03821682036105ac57565b908160209103126105ac575180151581036105ac5790565b909291926000918183526101c69460209486865260409687862060028101546001614a168683614055565b920154809211614c4f5750508486528652600287862001614a38838254614055565b90556001600160a01b0383811693908415614c3e576101cb541680614bc5575b50848652609787528786208487528752878620614a76848254614055565b905583868951878152858a8201527fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628b3392a43b614ab8575b50505050505050565b614afa92869286895180968195829463f23a6e6160e01b9a8b85523360048601528560248601526044850152606484015260a0608484015260a4830190613c31565b03925af1839181614ba6575b50614b7d575050600191614b186140bd565b6308c379a014614b47575b5050614b3757505b38808080808080614aaf565b516377d5b49160e11b8152600490fd5b614b4f6140db565b9182614b5b5750614b23565b846104c791505192839262461bcd60e51b845260048401526024830190613c31565b6001600160e01b031916039150614b9690505750614b2b565b51633fbfe7f560e21b8152600490fd5b614bbe919250853d8711610516576105078183613cd5565b9038614b06565b803b15612fe457868951809263417b2f9760e11b82523060048301523360248301528260448301528760648301528860848301528660a483015260e060c4830152818381614c1660e482018a613c31565b03925af18015614c345715614a5857614c2e90613ca7565b38614a58565b89513d89823e3d90fd5b88516310227bb960e31b8152600490fd5b6084918791868c5193631255c8fd60e01b85526004850152602484015260448301526064820152fd5b6001600160a01b0391821681529116602082015260400190565b6101c9546001600160a01b03808216835260a091821c60208401526101ca548082166040850152821c60608401526101cb549081166080840152811c9082015260c00190565b906020828203126105ac5781516001600160401b0381116105ac57613d6392016148ce565b6000805261012d6020527fa581b17bfc4d6578e300cafbf34fd2dc1fef0270d8c73f88a99dcde2859a6639546001600160a01b039081168015614d8f575b1680614d4a5750613d63614d9d565b60006004916040519283809263e8a3d48560e01b82525afa9081156105a057600091614d74575090565b613d63913d8091833e614d878183613cd5565b810190614cd8565b508060406000205416614d3b565b60008080526101c69081602052604091614db983832054614185565b614e38575080805261012d602052818120546001600160a01b039190819083168015614e2c575b60248551809581936303a24d0760e21b8352856004840152165afa928315614e2257508092614e0e57505090565b613d6392503d8091833e614d878183613cd5565b51903d90823e3d90fd5b50828482205416614de0565b81805260205220613d63906141bf565b6000908082526101c680602052614e626040842054614185565b614eb35750816001600160a01b03614e7983615503565b16916024604051809481936303a24d0760e21b835260048301525afa918215614ea7578092614e0e57505090565b604051903d90823e3d90fd5b91613d63926040928252602052206141bf565b6101c980546001600160a01b038381166001600160a01b03198316179092556040517f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09390928392614f1a92911683614c78565b0390a16000604051600080516020615757833981519152339180614f3d81614c92565b0390a3565b6101ca80546001600160a01b0319166001600160a01b0390921691909117905560405160019033906000805160206157578339815191529080614f3d81614c92565b91909160a0818403126105ac57604051906001600160401b039060a083018281118482101761192b5760405282948151845260208201518381116105ac5781614fce9184016148ce565b602085015260408201518381116105ac5781614feb9184016148ce565b6040850152614ffc606083016149bf565b606085015260808201519283116105ac5760809261501a92016148ce565b910152565b91956001600160a01b03949093908516918215615454576150679661507e87926101c8549460409b8c519b8c99630f09500f60e31b8b5260c060048c015260c48b0190613c31565b9260248a01526003198984030160448a0152614910565b9230606487015260848601521660a4840152826000968792038173bac8241717c8622a579691db9f94c6c5a012fab95af493841561544a578592869087966152ee575b506020928385019163ffffffff808451168a52610233918287528b8b20546152d9578b7f06c5a80e592816bd4f60093568e69affa68b5e378a189b2f59a1121703de47de88836151628a9551918381015161514f8783015197606084019861514260808c8c51169601519460a084519a8b9a8b528a015260a0890190613c31565b9187830390880152613c31565b9160608501528382036080850152613c31565b0390a151169461517186615493565b80156152ba575b156152965760806151928d8a015160608b01513391614555565b9801511693878b5261023187528b8b2060018060a01b0319958682541617905551168952845284898920558488526102328452888820918254161790556151d985516155b6565b96865b865181101561521d57806151fd6151f6615218938a61402b565b5130615682565b615207828c61402b565b52615212818b61402b565b50614990565b6151dc565b5091945092955081948281526101fe808652828220338352865260021983832054169284835281875280832033845287528381842055600080516020615777833981519152933386868680a48483528187528083208684528752600281842054179687928685528152818420908785525282205580a490565b6064868c8e5191634baa2a4d60e01b83526004830152602482015260046044820152fd5b508a80526101fe87528b8b20868c52875260068c8c2054161515615178565b50969998975050509250505051168152205490565b93505093503d8086843e6153028184613cd5565b8201936060838603126105f8578251946001600160401b0395868111610a0857840160a081830312610a085788519161533a83613c8c565b8151888111610a04578161534f918401614f84565b83526020918281015163ffffffff8116810361544657838501528a81015189811161544657816153868460809361539a95016148ce565b8d87015260608101516060870152016149bf565b608084015281860151888111610a0457816153b6918801614f84565b958a8101519089821161544657019080601f83011215610a04578151906153dc82613d7c565b996153e98d519b8c613cd5565b828b5284808c019360051b8501019382851161544257858101935b858510615419575050505050505092386150c1565b845183811161543e578791615433868480948701016148ce565b815201940193615404565b8e80fd5b8c80fd5b8a80fd5b86513d87823e3d90fd5b6040516329e96fa360e01b8152600490fd5b6001600160a01b031660009081526000805160206157d78339815191526020526040902054602216151590565b6001600160a01b031660009081526000805160206157d78339815191526020526040902054600616151590565b6001600160a01b031660008181526000805160206157d78339815191526020526040812080546002179081905591906000805160206157778339815191528180a4565b600090815261012d60205260409020546001600160a01b03908116919082156155295750565b60008080526040902054169150565b604080519161554683613c71565b6000908184528183602095828782015201528152816101609182855260018060a01b03928383832054841c166155a7578180528552209282519361558985613c71565b549063ffffffff808316865282821c1690850152821c169082015290565b50209282519361558985613c71565b906155c082613d7c565b6155cd6040519182613cd5565b82815280926155de601f1991613d7c565b019060005b8281106155ef57505050565b8060606020809385010152016155e3565b919061560b816155b6565b9260005b82811061561b57505050565b8060051b820135601e19833603018112156105ac578201908135916001600160401b0383116105ac5760200182360381136105ac576156626156689161567d943691613d11565b30615682565b615672828861402b565b52615212818761402b565b61560f565b90613d63916000806040519361569785613c71565b602785527f416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c6020860152660819985a5b195960ca1b6040860152602081519101845af46156e2613fbc565b92901561574357508151156156f5575090565b3b156156fe5790565b60405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606490fd5b8251909150156134105750805190602001fdfe3be6d3a1d957610f7e900c66889b874cdc9f0c22901aa8be6ec3d2d04c14ca0f35fb03d0d293ef5b362761900725ce891f8f766b5a662cdd445372355448e7ca6bb7ff708619ba0610cba295a58592e0451dee2622938c8755667688daf3529b360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5f4301e3e862ad13c0503d3de32ba4e2e40c90733d1da23c9df4d0addbcf6508a2646970667358221220e584b2e7c62bdb6fb6e03c31d43b34a1b78edb3783d94722622da0b1101d129d64736f6c6343000811003300000000000000000000000058be4b98fec63651287a2741665e7a200de43916000000000000000000000000bc50029836a59a4e5e1bb8988272f46eba0f99000000000000000000000000007777777f279eba3d3ad8f4e708545291a6fdba8b000000000000000000000000633b528311ed1deecd622863717d1a29b1b02bcb