[ { "inputs": [], "name": "EmptyString", "type": "error" }, { "inputs": [], "name": "InvalidManager", "type": "error" }, { "inputs": [], "name": "ManagerDoesNotExist", "type": "error" }, { "inputs": [], "name": "ManagerRemoveBlocked", "type": "error" }, { "inputs": [], "name": "ManagerSwapBlocked", "type": "error" }, { "inputs": [], "name": "MintFrozen", "type": "error" }, { "inputs": [], "name": "MinterRegistrationInvalid", "type": "error" }, { "inputs": [], "name": "MismatchedArrayLengths", "type": "error" }, { "inputs": [], "name": "NotAContract", "type": "error" }, { "inputs": [], "name": "NotMinter", "type": "error" }, { "inputs": [], "name": "OperatorNotAllowed", "type": "error" }, { "inputs": [], "name": "OverLimitSupply", "type": "error" }, { "inputs": [], "name": "RoyaltyBPSInvalid", "type": "error" }, { "inputs": [], "name": "RoyaltySetBlocked", "type": "error" }, { "inputs": [], "name": "TokenDoesNotExist", "type": "error" }, { "inputs": [], "name": "TokenNotInRange", "type": "error" }, { "inputs": [], "name": "Unauthorized", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "approved", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "ApprovalForAll", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "oldBaseUri", "type": "string" }, { "indexed": false, "internalType": "string", "name": "newBaseURI", "type": "string" } ], "name": "BaseURISet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "recipientAddress", "type": "address" }, { "indexed": true, "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "name": "DefaultRoyaltySet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newDefaultTokenManager", "type": "address" } ], "name": "DefaultTokenManagerChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "indexed": false, "internalType": "struct IRoyaltyManager.Royalty[]", "name": "_newRoyalties", "type": "tuple[]" } ], "name": "GranularRoyaltiesSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" } ], "name": "GranularTokenManagersRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" }, { "indexed": false, "internalType": "address[]", "name": "_tokenManagers", "type": "address[]" } ], "name": "GranularTokenManagersSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "newLimitSupply", "type": "uint256" } ], "name": "LimitSupplySet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "minter", "type": "address" }, { "indexed": true, "internalType": "bool", "name": "registered", "type": "bool" } ], "name": "MinterRegistrationChanged", "type": "event" }, { "anonymous": false, "inputs": [], "name": "MintsFrozen", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newRoyaltyManager", "type": "address" } ], "name": "RoyaltyManagerChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "TokenURIsSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "defaultManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "freezeMints", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "creator", "type": "address" }, { "internalType": "string", "name": "_contractURI", "type": "string" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "defaultRoyalty", "type": "tuple" }, { "internalType": "address", "name": "_defaultTokenManager", "type": "address" }, { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "address", "name": "trustedForwarder", "type": "address" }, { "internalType": "address", "name": "initialMinter", "type": "address" }, { "internalType": "string", "name": "newBaseURI", "type": "string" }, { "internalType": "uint256", "name": "_limitSupply", "type": "uint256" }, { "internalType": "bool", "name": "useMarketplaceFiltererRegistry", "type": "bool" }, { "internalType": "address", "name": "_observability", "type": "address" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "creator", "type": "address" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "forwarder", "type": "address" } ], "name": "isTrustedForwarder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "limitSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintAmountToOneRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "recipients", "type": "address[]" } ], "name": "mintOneToMultipleRecipients", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" } ], "name": "mintOneToOneRecipient", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "recipients", "type": "address[]" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mintSameAmountToMultipleRecipients", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "mintSpecificTokenToOneRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "recipient", "type": "address" }, { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "name": "mintSpecificTokensToOneRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "minters", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "observability", "outputs": [ { "internalType": "contract IObservability", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "operatorFiltererRegistry", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "registerMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "removeDefaultTokenManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" } ], "name": "removeGranularTokenManagers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "removeRoyaltyManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_tokenGroupingId", "type": "uint256" }, { "internalType": "uint256", "name": "_salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint256", "name": "royaltyAmount", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "royaltyManager", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newBaseURI", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "newName", "type": "string" }, { "internalType": "string", "name": "newSymbol", "type": "string" }, { "internalType": "string", "name": "newContractUri", "type": "string" } ], "name": "setContractMetadata", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty", "name": "_royalty", "type": "tuple" } ], "name": "setDefaultRoyalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_defaultTokenManager", "type": "address" } ], "name": "setDefaultTokenManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "components": [ { "internalType": "address", "name": "recipientAddress", "type": "address" }, { "internalType": "uint16", "name": "royaltyPercentageBPS", "type": "uint16" } ], "internalType": "struct IRoyaltyManager.Royalty[]", "name": "_newRoyalties", "type": "tuple[]" } ], "name": "setGranularRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "_ids", "type": "uint256[]" }, { "internalType": "address[]", "name": "_tokenManagers", "type": "address[]" } ], "name": "setGranularTokenManagers", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_limitSupply", "type": "uint256" } ], "name": "setLimitSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newRegistry", "type": "address" }, { "internalType": "address", "name": "subscription", "type": "address" } ], "name": "setRegistryAndSubscription", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_royaltyManager", "type": "address" } ], "name": "setRoyaltyManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "setTokenURIs", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "supply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "tokenManager", "outputs": [ { "internalType": "address", "name": "manager", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "minter", "type": "address" } ], "name": "unregisterMinter", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
608060405234801561001057600080fd5b50615443806100206000396000f3fe608060405234801561001057600080fd5b50600436106102725760003560e01c806301ffc9a714610277578063047fc9aa1461029f578063063a7502146102b757806306fdde03146102c1578063081812fc146102d6578063095ea7b3146102f65780630d640e811461030957806318160ddd1461031c578063184a94d51461032557806318bae6c81461033857806323b872dd1461034b5780632a55205a1461035e5780632a5ac7641461037f5780632ddcb21f146103925780632fc3a8d91461039c5780633713c1a1146103af57806342842e0e146103c257806342966c68146103d557806347230dcb146103e85780634f58122a146103fb57806350cf5a311461040e578063548205411461042157806355f804b314610434578063572b6c05146104475780635be954481461045a5780636352211e1461046d5780636371fbe7146104805780636502abea146104935780636c0360eb146104a657806370a08231146104ae578063715018a6146104c1578063752d4cad146104c9578063834a20df146104dc5780638da5cb5b146104ef57806395d89b41146104f7578063a22cb465146104ff578063a305f5b214610512578063b0e5afe314610525578063b5c5801e14610539578063b88d4fde14610541578063bfb2995c14610554578063c2f5070114610567578063c87b56dd1461056f578063d1f5789414610582578063db3e4c8414610595578063e8a3d485146105a8578063e985e9c5146105b0578063eb872150146105c3578063ee295d62146105d6578063eeab0589146105e9578063ef60ceaf146105fc578063f2fde38b1461060f578063f7441c3a14610622578063f97b57ec14610635575b600080fd5b61028a610285366004614148565b61064a565b60405190151581526020015b60405180910390f35b6102a961016d5481565b604051908152602001610296565b6102bf61065b565b005b6102c961071b565b60405161029691906141bd565b6102e96102e43660046141d0565b6107ae565b60405161029691906141e9565b6102bf61030436600461421d565b6107d6565b6102bf61031736600461421d565b6107ef565b61016d546102a9565b6102a9610333366004614249565b610895565b60cb546102e9906001600160a01b031681565b6102bf610359366004614266565b61091e565b61037161036c3660046142a7565b61095f565b6040516102969291906142c9565b6102bf61038d36600461432a565b6109fa565b6102a961016e5481565b6102bf6103aa366004614407565b610a90565b6102bf6103bd3660046141d0565b610b73565b6102bf6103d0366004614266565b610c1f565b6102bf6103e33660046141d0565b610c3a565b6102bf6103f6366004614249565b610df6565b6102bf610409366004614452565b610eaa565b6102bf61041c366004614249565b6110c8565b6102bf61042f3660046145e9565b611227565b6102bf610442366004614731565b6112fe565b61028a610455366004614249565b6114a5565b6102bf61046836600461421d565b6114b9565b6102e961047b3660046141d0565b611555565b6102bf61048e366004614766565b611571565b6102e96104a13660046141d0565b61169f565b6102c96116ce565b6102a96104bc366004614249565b61175d565b6102bf6117ca565b6102bf6104d73660046147ba565b6117dc565b6102bf6104ea366004614249565b6117ee565b6102e961186c565b6102c961187b565b6102bf61050d3660046147f3565b61188b565b6102bf610520366004614249565b61189f565b61016b546102e9906001600160a01b031681565b6102bf611a03565b6102bf61054f366004614821565b611b57565b6102bf61056236600461488c565b611b96565b6102bf611eb6565b6102c961057d3660046141d0565b611fc7565b6102bf610590366004614925565b611fd2565b6102bf6105a336600461496a565b6120e4565b6102c9612217565b61028a6105be3660046147ba565b612225565b60d0546102e9906001600160a01b031681565b60cf546102e9906001600160a01b031681565b6102bf6105f736600461496a565b612254565b6102bf61060a3660046149d5565b61251e565b6102bf61061d366004614249565b61272c565b6102bf610630366004614452565b6127a2565b61063d612867565b60405161029691906149e7565b600061065582612878565b92915050565b6106636128c8565b61066b612937565b60cf805460ff60a01b1916600160a01b1790556040517f9d4b38394dff663b46f53f52ced584161b5021180321b381f6104325eecebf4990600090a160d060009054906101000a90046001600160a01b03166001600160a01b031663fd120bd26040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156106f757600080fd5b505af115801561070b573d6000803e3d6000fd5b505050506107196001609755565b565b6060610103805461072b90614a34565b80601f016020809104026020016040519081016040528092919081815260200182805461075790614a34565b80156107a45780601f10610779576101008083540402835291602001916107a4565b820191906000526020600020905b81548152906001019060200180831161078757829003601f168201915b5050505050905090565b60006107b982612998565b50600090815261010760205260409020546001600160a01b031690565b816107e0816129e8565b6107ea8383612a82565b505050565b6108026107fa612b92565b60c990612b9c565b61081657610816633e34a41b60e21b612bb8565b61081e612937565b60cf54600160a01b900460ff1660011415610843576108436345a9661760e01b612bb8565b61016d548061085181614a7f565b61016e5490925090508015610878578083111561087857610878633740d80b60e21b612bb8565b6108828484612bc1565b5061016d556108916001609755565b5050565b60006108a26107fa612b92565b6108b6576108b6633e34a41b60e21b612bb8565b6108be612937565b60cf54600160a01b900460ff16600114156108e3576108e36345a9661760e01b612bb8565b61016d54806108f181614a7f565b9150506108fd81612cd2565b6109078382612bc1565b61016d81905590506109196001609755565b919050565b61092f610929612b92565b82612cf9565b6109545760405162461bcd60e51b815260040161094b90614a9a565b60405180910390fd5b6107ea838383612d58565b600082815260ce602090815260408083208151808301909252546001600160a01b038116808352600160a01b90910461ffff169282019290925282916109ca57506040805180820190915260cd546001600160a01b0381168252600160a01b900461ffff1660208201525b80516020820151909350612710906109e69061ffff1686614acf565b6109f09190614aee565b9150509250929050565b610a026128c8565b610a0e86868686612ed8565b610a1b61016c8383613feb565b5060d054604051635bf57bc360e01b81526001600160a01b0390911690635bf57bc390610a5690899089908990899089908990600401614b39565b600060405180830381600087803b158015610a7057600080fd5b505af1158015610a84573d6000803e3d6000fd5b50505050505050505050565b610a9b6107fa612b92565b610aaf57610aaf633e34a41b60e21b612bb8565b610ab7612937565b60cf54600160a01b900460ff1660011415610adc57610adc6345a9661760e01b612bb8565b61016d54829060005b82811015610b5a5760005b84811015610b475782610b0281614a7f565b935050610b35878784818110610b1a57610b1a614b82565b9050602002016020810190610b2f9190614249565b84612bc1565b80610b3f81614a7f565b915050610af0565b5080610b5281614a7f565b915050610ae5565b50610b6481612cd2565b61016d55506107ea6001609755565b610b7b6128c8565b610b83612937565b61016e81905560405181907fad7735a1decc3db45c1eab757cc4a1cb4bff8e332877b55f6db4ea11d82320c690600090a260d054604051630941255b60e21b8152600481018390526001600160a01b0390911690632504956c90602401600060405180830381600087803b158015610bfa57600080fd5b505af1158015610c0e573d6000803e3d6000fd5b50505050610c1c6001609755565b50565b6107ea83838360405180602001604052806000815250611b57565b610c42612937565b6000610c4d8261169f565b90506000610c59612b92565b90506001600160a01b03821615801590610ce257506040516301ffc9a760e01b81526001600160a01b038316906301ffc9a790610ca19063129dae8b60e01b90600401614b98565b602060405180830381865afa158015610cbe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce29190614bb8565b15610d5d576000610cf284611555565b60405163129dae8b60e01b81529091506001600160a01b0384169063129dae8b90610d2590859085908990600401614bd5565b600060405180830381600087803b158015610d3f57600080fd5b505af1158015610d53573d6000803e3d6000fd5b5050505050610d7a565b610d678184612cf9565b610d7a57610d7a6282b42960e81b612bb8565b610d8383612ef3565b60d0546040516323de665160e01b81526001600160a01b03909116906323de665190610db89084906000908890600401614bd5565b600060405180830381600087803b158015610dd257600080fd5b505af1158015610de6573d6000803e3d6000fd5b505050505050610c1c6001609755565b610dfe6128c8565b610e0960c982612f35565b610e1d57610e1d63ea6eb5c360e01b612bb8565b6040516001906001600160a01b038316906000805160206153b783398151915290600090a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f90610e75908490600190600401614bf9565b600060405180830381600087803b158015610e8f57600080fd5b505af1158015610ea3573d6000803e3d6000fd5b5050505050565b610eb2612937565b6000610ebc612b92565b90508160005b8181101561101e57600060cc6000878785818110610ee257610ee2614b82565b60209081029290920135835250810191909152604001600020546001600160a01b0316905080610f1c57610f1c635f98be1560e11b612bb8565b806001600160a01b031663ce2003a585888886818110610f3e57610f3e614b82565b905060200201356040518363ffffffff1660e01b8152600401610f629291906142c9565b6020604051808303816000875af1158015610f81573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fa59190614bb8565b610fb957610fb963251c48e160e11b612bb8565b600060cc6000888886818110610fd157610fd1614b82565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050808061101690614a7f565b915050610ec2565b507f4d30c2588339a383e2c3092b5383924cf202ae9c377b76c5fe5208cd41d8d2aa8484604051611050929190614c4a565b60405180910390a160d0546040516320364dcd60e21b81526001600160a01b03909116906380d937349061108a9087908790600401614c4a565b600060405180830381600087803b1580156110a457600080fd5b505af11580156110b8573d6000803e3d6000fd5b5050505050506108916001609755565b6110d0612937565b6110d981612f4a565b6110ed576110ed631a7387bd60e11b612bb8565b60006110f7612b92565b60cf549091506001600160a01b03168061113f5761111361186c565b6001600160a01b0316826001600160a01b03161461113a5761113a6282b42960e81b612bb8565b6111c2565b60405163bcdbc94760e01b81526001600160a01b0382169063bcdbc9479061116d9086908690600401614c5e565b602060405180830381865afa15801561118a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ae9190614bb8565b6111c2576111c263e10a050560e01b612bb8565b60cf80546001600160a01b0319166001600160a01b03851690811790915560405160008051602061541783398151915290600090a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab42290610db89086906004016141e9565b600054610100900460ff16158080156112475750600054600160ff909116105b80611268575061125630612f66565b158015611268575060005460ff166001145b6112845760405162461bcd60e51b815260040161094b90614c78565b6000805460ff1916600117905580156112a7576000805461ff0019166101001790555b6112bb8d8d8d8d8d8d8d8d8d8d8d8d612f75565b80156112ef576000805461ff0019169055604051600181526000805160206153d78339815191529060200160405180910390a15b50505050505050505050505050565b611306612937565b8061131b5761131b63ecd7b0d160e01b612bb8565b60cb546001600160a01b0316806113675761133461186c565b6001600160a01b0316611345612b92565b6001600160a01b031614611362576113626282b42960e81b612bb8565b6113f7565b806001600160a01b0316633d820a4d61137e612b92565b600086866040518563ffffffff1660e01b81526004016113a19493929190614cc6565b6020604051808303816000875af11580156113c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113e49190614bb8565b6113f7576113f76282b42960e81b612bb8565b61143683838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061306092505050565b60d054604051632cfd654b60e11b81526001600160a01b03909116906359faca96906114689086908690600401614cf8565b600060405180830381600087803b15801561148257600080fd5b505af1158015611496573d6000803e3d6000fd5b50505050506108916001609755565b6065546001600160a01b0391821691161490565b6114c46107fa612b92565b6114d8576114d8633e34a41b60e21b612bb8565b6114e0612937565b60cf54600160a01b900460ff1660011415611505576115056345a9661760e01b612bb8565b61016d5460005b8281101561153d578161151e81614a7f565b92505061152b8483612bc1565b8061153581614a7f565b91505061150c565b5061154781612cd2565b61016d556108916001609755565b600090815261010560205260409020546001600160a01b031690565b61157c6107fa612b92565b61159057611590633e34a41b60e21b612bb8565b611598612937565b60cf54600160a01b900460ff16600114156115bd576115bd6345a9661760e01b612bb8565b61016d5461016e5482908061161f5760005b82811015611619576115f9878787848181106115ed576115ed614b82565b90506020020135612bc1565b8361160381614a7f565b945050808061161190614a7f565b9150506115cf565b50611692565b60005b82811015611690578186868381811061163d5761163d614b82565b90506020020135111561165a5761165a633740d80b60e21b612bb8565b611670878787848181106115ed576115ed614b82565b8361167a81614a7f565b945050808061168890614a7f565b915050611622565b505b5050506107ea6001609755565b60cb54600082815260cc60205260409020546001600160a01b03918216911680156116c8578091505b50919050565b61013980546116dc90614a34565b80601f016020809104026020016040519081016040528092919081815260200182805461170890614a34565b80156117555780601f1061172a57610100808354040283529160200191611755565b820191906000526020600020905b81548152906001019060200180831161173857829003601f168201915b505050505081565b60006001600160a01b0382166117ad5760405162461bcd60e51b815260206004820152601560248201527422a9219b99189d1024b73b30b634b21037bbb732b960591b604482015260640161094b565b506001600160a01b03166000908152610106602052604090205490565b6117d26128c8565b61071960006130af565b6117e46128c8565b6108918282613101565b6117f66128c8565b61180160c9826131a8565b6118155761181563ea6eb5c360e01b612bb8565b6040516000906001600160a01b038316906000805160206153b7833981519152908390a360d05460405163a9292a6f60e01b81526001600160a01b039091169063a9292a6f90610e75908490600090600401614bf9565b6033546001600160a01b031690565b6060610104805461072b90614a34565b81611895816129e8565b6107ea83836131bd565b6118a7612937565b6118b0816131cf565b6118c4576118c4631a7387bd60e11b612bb8565b60006118ce612b92565b60cb549091506001600160a01b031680611916576118ea61186c565b6001600160a01b0316826001600160a01b031614611911576119116282b42960e81b612bb8565b61199e565b6040516342f19adb60e11b81526001600160a01b038216906385e335b6906119479085906000908890600401614d0c565b6020604051808303816000875af1158015611966573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198a9190614bb8565b61199e5761199e63e10a050560e01b612bb8565b60cb80546001600160a01b0319166001600160a01b03851690811790915560405160008051602061539783398151915290600090a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd90610db89086906004016141e9565b611a0b612937565b6000611a15612b92565b60cb549091506001600160a01b031680611a3957611a39635f98be1560e11b612bb8565b60405163ce2003a560e01b81526001600160a01b0382169063ce2003a590611a689085906000906004016142c9565b6020604051808303816000875af1158015611a87573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611aab9190614bb8565b611abf57611abf63251c48e160e11b612bb8565b60cb80546001600160a01b0319169055604051600090600080516020615397833981519152908290a260d0546040516316365cdd60e01b81526001600160a01b03909116906316365cdd90611b19906000906004016141e9565b600060405180830381600087803b158015611b3357600080fd5b505af1158015611b47573d6000803e3d6000fd5b5050505050506107196001609755565b611b68611b62612b92565b83612cf9565b611b845760405162461bcd60e51b815260040161094b90614a9a565b611b90848484846131eb565b50505050565b611b9e612937565b6000611ba8612b92565b90506000611bb461186c565b60cf549091506001600160a01b03168581611cb557826001600160a01b0316846001600160a01b031614611bf157611bf16282b42960e81b612bb8565b60005b81811015611caf57611c37878783818110611c1157611c11614b82565b9050604002016020016020810190611c299190614d2f565b61271061ffff909116111590565b611c4b57611c4b633daf741f60e21b612bb8565b868682818110611c5d57611c5d614b82565b90506040020160ce60008b8b85818110611c7957611c79614b82565b9050602002013581526020019081526020016000208181611c9a9190614d4c565b50819050611ca781614a7f565b915050611bf4565b50611e03565b60005b81811015611e0157611cd5878783818110611c1157611c11614b82565b611ce957611ce9633daf741f60e21b612bb8565b826001600160a01b031663ad6e40c78a8a84818110611d0a57611d0a614b82565b90506020020135898985818110611d2357611d23614b82565b905060400201886040518463ffffffff1660e01b8152600401611d4893929190614dd9565b602060405180830381865afa158015611d65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d899190614bb8565b611d9d57611d9d63270e710760e21b612bb8565b868682818110611daf57611daf614b82565b90506040020160ce60008b8b85818110611dcb57611dcb614b82565b9050602002013581526020019081526020016000208181611dec9190614d4c565b50819050611df981614a7f565b915050611cb8565b505b7feaf422d1ab2d8f38856ab6be8378c08d2886463a33667e896ba3a6ebf2c6260c88888888604051611e389493929190614e06565b60405180910390a160d054604051632be18fef60e11b81526001600160a01b03909116906357c31fde90611e76908b908b908b908b90600401614e06565b600060405180830381600087803b158015611e9057600080fd5b505af1158015611ea4573d6000803e3d6000fd5b5050505050505050611b906001609755565b611ebe612937565b6000611ec8612b92565b60cf549091506001600160a01b031680611eec57611eec635f98be1560e11b612bb8565b60405163680c607d60e11b81526001600160a01b0382169063d018c0fa90611f189085906004016141e9565b602060405180830381865afa158015611f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f599190614bb8565b611f6d57611f6d63251c48e160e11b612bb8565b60cf80546001600160a01b0319169055604051600090600080516020615417833981519152908290a260d05460405163755d5a1160e11b81526001600160a01b039091169063eabab42290611b19906000906004016141e9565b60606106558261321e565b600054610100900460ff1615808015611ff25750600054600160ff909116105b80612013575061200130612f66565b158015612013575060005460ff166001145b61202f5760405162461bcd60e51b815260040161094b90614c78565b6000805460ff191660011790558015612052576000805461ff0019166101001790555b60008060008060008060008060008060008c8060200190518101906120779190614ee5565b9a509a509a509a509a509a509a509a509a509a509a506120a18e8c8c8c8c8c8c8c8c8c8c8c612f75565b505050505050505050505080156107ea576000805461ff0019169055604051600181526000805160206153d78339815191529060200160405180910390a1505050565b6120ec612937565b8281811461210457612104632b477e7160e11b612bb8565b60005b818110156121665761215486868381811061212457612124614b82565b9050602002013585858481811061213d5761213d614b82565b905060200281019061214f9190615018565b6132ea565b8061215e81614a7f565b915050612107565b507f2df7dd608aac5806395769062aca937bf08722cb45659d38c0cce82f5cd0cde38585858560405161219c949392919061505e565b60405180910390a160d0546040516374c1ace160e01b81526001600160a01b03909116906374c1ace1906121da90889088908890889060040161505e565b600060405180830381600087803b1580156121f457600080fd5b505af1158015612208573d6000803e3d6000fd5b5050505050611b906001609755565b61016c80546116dc90614a34565b6001600160a01b0391821660009081526101086020908152604080832093909416825291909152205460ff1690565b61225c612937565b6000612266612b92565b9050600061227261186c565b90508460005b8181101561246b576122af86868381811061229557612295614b82565b90506020020160208101906122aa9190614249565b6131cf565b6122c3576122c3631a7387bd60e11b612bb8565b60006122e68989848181106122da576122da614b82565b9050602002013561169f565b90506001600160a01b03811661232357836001600160a01b0316856001600160a01b03161461231e5761231e6282b42960e81b612bb8565b6123e1565b806001600160a01b03166385e335b6868b8b8681811061234557612345614b82565b600088815260cc60209081526040918290205491516001600160e01b031960e089901b16815261238a969591909302013592506001600160a01b031690600401614d0c565b6020604051808303816000875af11580156123a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123cd9190614bb8565b6123e1576123e163e10a050560e01b612bb8565b8686838181106123f3576123f3614b82565b90506020020160208101906124089190614249565b60cc60008b8b8681811061241e5761241e614b82565b90506020020135815260200190815260200160002060006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050808061246390614a7f565b915050612278565b507facc0f6922d8ccd133dbdaee1908d4d734f25a540223d55145e9fad2898471a4e878787876040516124a1949392919061510e565b60405180910390a160d0546040516315bd85bf60e01b81526001600160a01b03909116906315bd85bf906124df908a908a908a908a9060040161510e565b600060405180830381600087803b1580156124f957600080fd5b505af115801561250d573d6000803e3d6000fd5b50505050505050611b906001609755565b612526612937565b6125366040820160208301614d2f565b61271061ffff8216111561255457612554633daf741f60e21b612bb8565b600061255e612b92565b60cf549091506001600160a01b0316806125a65761257a61186c565b6001600160a01b0316826001600160a01b0316146125a1576125a16282b42960e81b612bb8565b612629565b60405163049a5c0f60e41b81526001600160a01b038216906349a5c0f0906125d49087908690600401615166565b602060405180830381865afa1580156125f1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126159190614bb8565b6126295761262963270e710760e21b612bb8565b8360cd6126368282614d4c565b5061264990506040850160208601614d2f565b61ffff1661265a6020860186614249565b6001600160a01b03167f2c5ea6e4103e78cb101e796fb2dace540362fc542cbff5145eaa24af7dd8fe4160405160405180910390a360d0546001600160a01b031663d10072c06126ad6020870187614249565b6126bd6040880160208901614d2f565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015261ffff166024820152604401600060405180830381600087803b15801561270757600080fd5b505af115801561271b573d6000803e3d6000fd5b50505050505050610c1c6001609755565b6127346128c8565b6001600160a01b0381166127995760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161094b565b610c1c816130af565b6127ad6107fa612b92565b6127c1576127c1633e34a41b60e21b612bb8565b6127c9612937565b60cf54600160a01b900460ff16600114156127ee576127ee6345a9661760e01b612bb8565b61016d54819060005b8281101561284e578161280981614a7f565b92505061283c85858381811061282157612821614b82565b90506020020160208101906128369190614249565b83612bc1565b8061284681614a7f565b9150506127f7565b5061285881612cd2565b61016d55506108916001609755565b606061287360c96133f5565b905090565b60006001600160e01b031982166380ac58cd60e01b14806128a957506001600160e01b03198216635b5e139f60e01b145b8061065557506301ffc9a760e01b6001600160e01b0319831614610655565b6128d0612b92565b6001600160a01b03166128e161186c565b6001600160a01b0316146107195760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161094b565b6002609754141561298a5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604482015260640161094b565b6002609755565b6001609755565b6129a181613402565b610c1c5760405162461bcd60e51b8152602060048201526018602482015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604482015260640161094b565b61016b546001600160a01b031615610c1c5761016b54604051633185c44d60e21b81526001600160a01b039091169063c617113490612a2d9030908590600401614c5e565b602060405180830381865afa158015612a4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6e9190614bb8565b610c1c57610c1c638a10919360e01b612bb8565b6000612a8d82611555565b9050806001600160a01b0316836001600160a01b03161415612ae85760405162461bcd60e51b81526020600482015260146024820152734552433732313a20616c7265616479206f776e7360601b604482015260640161094b565b806001600160a01b0316612afa612b92565b6001600160a01b03161480612b165750612b16816105be612b92565b612b885760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000606482015260840161094b565b6107ea8383613420565b600061287361348f565b6000612bb1836001600160a01b0384166134b1565b9392505050565b610c1c816134c9565b6001600160a01b038216612c0e5760405162461bcd60e51b81526020600482015260146024820152734552433732313a207a65726f206164647265737360601b604482015260640161094b565b612c1781613402565b15612c5b5760405162461bcd60e51b8152602060048201526014602482015273115490cdcc8c4e881d1bdad95b881b5a5b9d195960621b604482015260640161094b565b6001600160a01b038216600090815261010660205260408120805460019290612c8590849061518c565b90915550506000818152610105602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392906000805160206153f7833981519152908290a45050565b61016e548015801590612ce457508082115b156108915761089163be1a657d60e01b612bb8565b600080612d0583611555565b9050806001600160a01b0316846001600160a01b03161480612d2c5750612d2c8185612225565b80612d505750836001600160a01b0316612d45846107ae565b6001600160a01b0316145b949350505050565b826001600160a01b0316612d6b82611555565b6001600160a01b031614612dba5760405162461bcd60e51b815260206004820152601660248201527522a9219b99189d10333937b6903737ba1037bbb732b960511b604482015260640161094b565b6001600160a01b038216612e0e5760405162461bcd60e51b815260206004820152601b60248201527a4552433732313a20746f20746865207a65726f206164647265737360281b604482015260640161094b565b60008181526101076020908152604080832080546001600160a01b03191690556001600160a01b03861683526101069091528120805460019290612e539084906151a4565b90915550506001600160a01b038216600090815261010660205260408120805460019290612e8290849061518c565b90915550506000818152610105602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716916000805160206153f783398151915291a46107ea8383836134d3565b612ee56101038585613feb565b50610ea36101048383613feb565b612efc81613688565b6000818152610135602052604090208054612f1690614a34565b159050610c1c57600081815261013560205260408120610c1c9161406f565b6000612bb1836001600160a01b038416613726565b60006106556001600160a01b03831663440444c560e11b613770565b6001600160a01b03163b151590565b612f7d61378c565b612f888c8b8b6137b3565b612f918661388f565b612f9b88886138d8565b612fa660c986612f35565b508a51612fbb9061016c9060208e01906140a9565b50604051631222d4db60e11b81526001600160a01b03821690632445a9b690612fe89030906004016141e9565b600060405180830381600087803b15801561300257600080fd5b505af1158015613016573d6000803e3d6000fd5b505060d080546001600160a01b0319166001600160a01b03851617905550508351156130455761304584613060565b82156130525761016e8390555b505050505050505050505050565b7f2e0a5b969d96a99aee0b35787d9a60516a02ca6f528a5f66d3f936468d8f0382610139826040516130939291906151bb565b60405180910390a18051610891906101399060208401906140a9565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b61016b80546001600160a01b0319166001600160a01b03841690811790915515610891576001600160a01b0382163b613144576131446309ee12d560e01b612bb8565b604051633e9f1edf60e11b81526001600160a01b03831690637d3e3dbe906131729030908590600401614c5e565b600060405180830381600087803b15801561318c57600080fd5b505af11580156131a0573d6000803e3d6000fd5b505050505050565b6000612bb1836001600160a01b038416613909565b6108916131c8612b92565b83836139fc565b60006106556001600160a01b038316633b209e2f60e11b613770565b6131f6848484612d58565b61320284848484613ac8565b611b905760405162461bcd60e51b815260040161094b90615277565b606061322982613402565b61323d5761323d63677510db60e11b612bb8565b600082815261013560205260408120805461325790614a34565b80601f016020809104026020016040519081016040528092919081815260200182805461328390614a34565b80156132d05780601f106132a5576101008083540402835291602001916132d0565b820191906000526020600020905b8154815290600101906020018083116132b357829003601f168201915b5050505050905080516000141561065557612bb183613bd4565b60006132f58461169f565b90506000613301612b92565b9050600061330d61186c565b90506001600160a01b03831661334a57806001600160a01b0316826001600160a01b031614613345576133456282b42960e81b612bb8565b6133d2565b604051633d820a4d60e01b81526001600160a01b03841690633d820a4d9061337c9085908a908a908a90600401614cc6565b6020604051808303816000875af115801561339b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133bf9190614bb8565b6133d2576133d26282b42960e81b612bb8565b6000868152610135602052604090206133ec908686613feb565b50505050505050565b60606000612bb183613c3a565b600090815261010560205260409020546001600160a01b0316151590565b60008181526101076020526040902080546001600160a01b0319166001600160a01b038416908117909155819061345682611555565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061349a336114a5565b156134ac575060131936013560601c90565b503390565b60009081526001919091016020526040902054151590565b8060005260046000fd5b60006134dd612b92565b9050806001600160a01b0316846001600160a01b03161461350157613501816129e8565b600061350c8361169f565b90506001600160a01b0381161580159061359557506040516301ffc9a760e01b81526001600160a01b038216906301ffc9a79061355490637af46b4f60e11b90600401614b98565b602060405180830381865afa158015613571573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135959190614bb8565b1561361b57604051638af6791b60e01b81526001600160a01b038381166004830152868116602483015285811660448301526064820185905260a06084830152600060a4830152821690638af6791b9060c401600060405180830381600087803b15801561360257600080fd5b505af1158015613616573d6000803e3d6000fd5b505050505b60d0546040516323de665160e01b81526001600160a01b03909116906323de66519061364f90889088908890600401614bd5565b600060405180830381600087803b15801561366957600080fd5b505af115801561367d573d6000803e3d6000fd5b505050505050505050565b600061369382611555565b60008381526101076020908152604080832080546001600160a01b03191690556001600160a01b0384168352610106909152812080549293506001929091906136dd9084906151a4565b90915550506000828152610105602052604080822080546001600160a01b0319169055518391906001600160a01b038416906000805160206153f7833981519152908390a45050565b600061373283836134b1565b61376857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610655565b506000610655565b600061377b83613c96565b8015612bb15750612bb18383613cc9565b600054610100900460ff166107195760405162461bcd60e51b815260040161094b906152a9565b600054610100900460ff166137da5760405162461bcd60e51b815260040161094b906152a9565b602082015161271061ffff821611156137fd576137fd633daf741f60e21b612bb8565b613805613d5d565b61380d613d8c565b613816846130af565b82516001600160a01b03161561385d57825160cd8054602086015161ffff16600160a01b026001600160b01b03199091166001600160a01b03909316929092179190911790555b6001600160a01b03821615611b905760cb80546001600160a01b0384166001600160a01b031990911617905550505050565b600054610100900460ff166138b65760405162461bcd60e51b815260040161094b906152a9565b606580546001600160a01b0319166001600160a01b0392909216919091179055565b600054610100900460ff166138ff5760405162461bcd60e51b815260040161094b906152a9565b6108918282613dbb565b600081815260018301602052604081205480156139f257600061392d6001836151a4565b8554909150600090613941906001906151a4565b90508181146139a657600086600001828154811061396157613961614b82565b906000526020600020015490508087600001848154811061398457613984614b82565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806139b7576139b76152f4565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610655565b6000915050610655565b816001600160a01b0316836001600160a01b03161415613a5a5760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b604482015260640161094b565b6001600160a01b0383811660008181526101086020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6000613adc846001600160a01b0316612f66565b15613bc957836001600160a01b031663150b7a02613af8612b92565b8786866040518563ffffffff1660e01b8152600401613b1a949392919061530a565b6020604051808303816000875af1925050508015613b55575060408051601f3d908101601f19168201909252613b529181019061533d565b60015b613baf573d808015613b83576040519150601f19603f3d011682016040523d82523d6000602084013e613b88565b606091505b508051613ba75760405162461bcd60e51b815260040161094b90615277565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612d50565b506001949350505050565b6060613bdf82612998565b6000613be9613e0b565b90506000815111613c095760405180602001604052806000815250612bb1565b80613c1384613e1b565b604051602001613c2492919061535a565b6040516020818303038152906040529392505050565b606081600001805480602002602001604051908101604052809291908181526020018280548015613c8a57602002820191906000526020600020905b815481526020019060010190808311613c76575b50505050509050919050565b6000613ca9826301ffc9a760e01b613cc9565b80156106555750613cc2826001600160e01b0319613cc9565b1592915050565b6000806301ffc9a760e01b83604051602401613ce59190614b98565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b03838183161783525050505090506000806000602060008551602087018a617530fa92503d91506000519050828015613d46575060208210155b8015613d525750600081115b979650505050505050565b600054610100900460ff16613d845760405162461bcd60e51b815260040161094b906152a9565b610719613eb7565b600054610100900460ff16613db35760405162461bcd60e51b815260040161094b906152a9565b610719613eee565b600054610100900460ff16613de25760405162461bcd60e51b815260040161094b906152a9565b8151613df6906101039060208501906140a9565b5080516107ea906101049060208401906140a9565b6060610139805461072b90614a34565b60606000613e2883613f15565b60010190506000816001600160401b03811115613e4757613e47614493565b6040519080825280601f01601f191660200182016040528015613e71576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084613eaa57613eaf565b613e7b565b509392505050565b600054610100900460ff16613ede5760405162461bcd60e51b815260040161094b906152a9565b610719613ee9612b92565b6130af565b600054610100900460ff166129915760405162461bcd60e51b815260040161094b906152a9565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310613f545772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310613f7e576904ee2d6d415b85acef8160201b830492506020015b662386f26fc100008310613f9c57662386f26fc10000830492506010015b6305f5e1008310613fb4576305f5e100830492506008015b6127108310613fc857612710830492506004015b60648310613fda576064830492506002015b600a83106106555760010192915050565b828054613ff790614a34565b90600052602060002090601f016020900481019282614019576000855561405f565b82601f106140325782800160ff1982351617855561405f565b8280016001018555821561405f579182015b8281111561405f578235825591602001919060010190614044565b5061406b92915061411d565b5090565b50805461407b90614a34565b6000825580601f1061408b575050565b601f016020900490600052602060002090810190610c1c919061411d565b8280546140b590614a34565b90600052602060002090601f0160209004810192826140d7576000855561405f565b82601f106140f057805160ff191683800117855561405f565b8280016001018555821561405f579182015b8281111561405f578251825591602001919060010190614102565b5b8082111561406b576000815560010161411e565b6001600160e01b031981168114610c1c57600080fd5b60006020828403121561415a57600080fd5b8135612bb181614132565b60005b83811015614180578181015183820152602001614168565b83811115611b905750506000910152565b600081518084526141a9816020860160208601614165565b601f01601f19169290920160200192915050565b602081526000612bb16020830184614191565b6000602082840312156141e257600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b0381168114610c1c57600080fd5b8035610919816141fd565b6000806040838503121561423057600080fd5b823561423b816141fd565b946020939093013593505050565b60006020828403121561425b57600080fd5b8135612bb1816141fd565b60008060006060848603121561427b57600080fd5b8335614286816141fd565b92506020840135614296816141fd565b929592945050506040919091013590565b600080604083850312156142ba57600080fd5b50508035926020909101359150565b6001600160a01b03929092168252602082015260400190565b60008083601f8401126142f457600080fd5b5081356001600160401b0381111561430b57600080fd5b60208301915083602082850101111561432357600080fd5b9250929050565b6000806000806000806060878903121561434357600080fd5b86356001600160401b038082111561435a57600080fd5b6143668a838b016142e2565b9098509650602089013591508082111561437f57600080fd5b61438b8a838b016142e2565b909650945060408901359150808211156143a457600080fd5b506143b189828a016142e2565b979a9699509497509295939492505050565b60008083601f8401126143d557600080fd5b5081356001600160401b038111156143ec57600080fd5b6020830191508360208260051b850101111561432357600080fd5b60008060006040848603121561441c57600080fd5b83356001600160401b0381111561443257600080fd5b61443e868287016143c3565b909790965060209590950135949350505050565b6000806020838503121561446557600080fd5b82356001600160401b0381111561447b57600080fd5b614487858286016143c3565b90969095509350505050565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156144cb576144cb614493565b60405290565b604051601f8201601f191681016001600160401b03811182821017156144f9576144f9614493565b604052919050565b60006001600160401b0382111561451a5761451a614493565b50601f01601f191660200190565b600082601f83011261453957600080fd5b813561454c61454782614501565b6144d1565b81815284602083860101111561456157600080fd5b816020850160208301376000918101602001919091529392505050565b61ffff81168114610c1c57600080fd5b6000604082840312156145a057600080fd5b6145a86144a9565b905081356145b5816141fd565b815260208201356145c58161457e565b602082015292915050565b8015158114610c1c57600080fd5b8035610919816145d0565b6000806000806000806000806000806000806101a08d8f03121561460c57600080fd5b6146158d614212565b9b506001600160401b0360208e0135111561462f57600080fd5b61463f8e60208f01358f01614528565b9a5061464e8e60408f0161458e565b995061465c60808e01614212565b98506001600160401b0360a08e0135111561467657600080fd5b6146868e60a08f01358f01614528565b97506001600160401b0360c08e013511156146a057600080fd5b6146b08e60c08f01358f01614528565b96506146be60e08e01614212565b95506146cd6101008e01614212565b94506001600160401b036101208e013511156146e857600080fd5b6146f98e6101208f01358f01614528565b93506101408d013592506147106101608e016145de565b915061471f6101808e01614212565b90509295989b509295989b509295989b565b6000806020838503121561474457600080fd5b82356001600160401b0381111561475a57600080fd5b614487858286016142e2565b60008060006040848603121561477b57600080fd5b8335614786816141fd565b925060208401356001600160401b038111156147a157600080fd5b6147ad868287016143c3565b9497909650939450505050565b600080604083850312156147cd57600080fd5b82356147d8816141fd565b915060208301356147e8816141fd565b809150509250929050565b6000806040838503121561480657600080fd5b8235614811816141fd565b915060208301356147e8816145d0565b6000806000806080858703121561483757600080fd5b8435614842816141fd565b93506020850135614852816141fd565b92506040850135915060608501356001600160401b0381111561487457600080fd5b61488087828801614528565b91505092959194509250565b600080600080604085870312156148a257600080fd5b84356001600160401b03808211156148b957600080fd5b6148c5888389016143c3565b909650945060208701359150808211156148de57600080fd5b818701915087601f8301126148f257600080fd5b81358181111561490157600080fd5b8860208260061b850101111561491657600080fd5b95989497505060200194505050565b6000806040838503121561493857600080fd5b8235614943816141fd565b915060208301356001600160401b0381111561495e57600080fd5b6109f085828601614528565b6000806000806040858703121561498057600080fd5b84356001600160401b038082111561499757600080fd5b6149a3888389016143c3565b909650945060208701359150808211156149bc57600080fd5b506149c9878288016143c3565b95989497509550505050565b6000604082840312156116c857600080fd5b6020808252825182820181905260009190848201906040850190845b81811015614a285783516001600160a01b031683529284019291840191600101614a03565b50909695505050505050565b600181811c90821680614a4857607f821691505b602082108114156116c857634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415614a9357614a93614a69565b5060010190565b6020808252601b908201527a115490cdcc8c4e8818d85b1b195c881d5b985d5d1a1bdc9a5e9959602a1b604082015260600190565b6000816000190483118215151615614ae957614ae9614a69565b500290565b600082614b0b57634e487b7160e01b600052601260045260246000fd5b500490565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b606081526000614b4d60608301888a614b10565b8281036020840152614b60818789614b10565b90508281036040840152614b75818587614b10565b9998505050505050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160e01b031991909116815260200190565b8051610919816145d0565b600060208284031215614bca57600080fd5b8151612bb1816145d0565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b039290921682521515602082015260400190565b81835260006001600160fb1b03831115614c2d57600080fd5b8260051b8083602087013760009401602001938452509192915050565b602081526000612d50602083018486614c14565b6001600160a01b0392831681529116602082015260400190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b606082015260800190565b60018060a01b0385168152836020820152606060408201526000614cee606083018486614b10565b9695505050505050565b602081526000612d50602083018486614b10565b6001600160a01b0393841681526020810192909252909116604082015260600190565b600060208284031215614d4157600080fd5b8135612bb18161457e565b8135614d57816141fd565b81546001600160a01b031981166001600160a01b039290921691821783556020840135614d838161457e565b6001600160b01b03199190911690911760a09190911b61ffff60a01b1617905550565b8035614db1816141fd565b6001600160a01b031682526020810135614dca8161457e565b61ffff81166020840152505050565b83815260808101614ded6020830185614da6565b6001600160a01b03929092166060919091015292915050565b60006040808352614e1a8184018789614c14565b83810360208086019190915285825286910160005b86811015614e5157614e418284614da6565b9183019190830190600101614e2f565b5098975050505050505050565b600082601f830112614e6f57600080fd5b8151614e7d61454782614501565b818152846020838601011115614e9257600080fd5b612d50826020830160208701614165565b600060408284031215614eb557600080fd5b614ebd6144a9565b90508151614eca816141fd565b815260208201516145c58161457e565b8051610919816141fd565b60008060008060008060008060008060006101808c8e031215614f0757600080fd5b8b516001600160401b03811115614f1d57600080fd5b614f298e828f01614e5e565b9b5050614f398d60208e01614ea3565b9950614f4760608d01614eda565b60808d01519099506001600160401b03811115614f6357600080fd5b614f6f8e828f01614e5e565b60a08e015190995090506001600160401b03811115614f8d57600080fd5b614f998e828f01614e5e565b975050614fa860c08d01614eda565b9550614fb660e08d01614eda565b6101008d01519095506001600160401b03811115614fd357600080fd5b614fdf8e828f01614e5e565b9450506101208c01519250614ff76101408d01614bad565b91506150066101608d01614eda565b90509295989b509295989b9093969950565b6000808335601e1984360301811261502f57600080fd5b8301803591506001600160401b0382111561504957600080fd5b60200191503681900382131561432357600080fd5b604081526000615072604083018688614c14565b602083820381850152818583528183019050818660051b8401018760005b888110156150fe57858303601f190184528135368b9003601e190181126150b657600080fd5b8a0180356001600160401b038111156150ce57600080fd5b8036038c13156150dd57600080fd5b6150ea8582898501614b10565b958701959450505090840190600101615090565b50909a9950505050505050505050565b604081526000615122604083018688614c14565b8281036020848101919091528482528591810160005b86811015614e5157833561514b816141fd565b6001600160a01b031682529282019290820190600101615138565b606081016151748285614da6565b6001600160a01b039290921660409190910152919050565b6000821982111561519f5761519f614a69565b500190565b6000828210156151b6576151b6614a69565b500390565b60408152600080845481600182811c9150808316806151db57607f831692505b60208084108214156151fb57634e487b7160e01b86526022600452602486fd5b604088018490526060880182801561521a576001811461522b57615256565b60ff19871682528282019750615256565b60008c81526020902060005b8781101561525057815484820152908601908401615237565b83019850505b505087860381890152505050505061526e8185614191565b95945050505050565b60208082526018908201527722a9219b99189d1034b73b30b634b2103932b1b2b4bb32b960411b604082015260600190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b634e487b7160e01b600052603160045260246000fd5b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090614cee90830184614191565b60006020828403121561534f57600080fd5b8151612bb181614132565b6000835161536c818460208801614165565b602f60f81b908301908152835161538a816001840160208801614165565b0160010194935050505056fec407dfe559ca4a63d7cf8439b9fce2965d7a4c8c92eb5d5047f53bb9eec295fd73e05f4c0a27cbf60841afa4a2f8577f5e99db3e3e9c293800d6e6b1f7b8a7ab7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efe236d251e7da4ac8a3c275f80aebc9b74cbf356425fa04864da5043511a81219a164736f6c634300080a000a