[ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "AdminApproved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "AdminRevoked", "type": "event" }, { "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": "address", "name": "extension", "type": "address" } ], "name": "ApproveTransferUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "DefaultRoyaltiesUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": false, "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "ExtensionApproveTransferUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "ExtensionBlacklisted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "ExtensionRegistered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": false, "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "ExtensionRoyaltiesUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "ExtensionUnregistered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint8", "name": "version", "type": "uint8" } ], "name": "Initialized", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "extension", "type": "address" }, { "indexed": true, "internalType": "address", "name": "permissions", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "MintPermissionsUpdated", "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": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "indexed": false, "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "RoyaltiesUpdated", "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": [], "name": "VERSION", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "admin", "type": "address" } ], "name": "approveAdmin", "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": [ { "internalType": "address", "name": "extension", "type": "address" } ], "name": "blacklistExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getAdmins", "outputs": [ { "internalType": "address[]", "name": "admins", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getApproveTransfer", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getExtensions", "outputs": [ { "internalType": "address[]", "name": "extensions", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getFeeBps", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getFeeRecipients", "outputs": [ { "internalType": "address payable[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getFees", "outputs": [ { "internalType": "address payable[]", "name": "", "type": "address[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getRoyalties", "outputs": [ { "internalType": "address payable[]", "name": "", "type": "address[]" }, { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "admin", "type": "address" } ], "name": "isAdmin", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "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": "to", "type": "address" } ], "name": "mintBase", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "mintBase", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "mintBaseBatch", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint16", "name": "count", "type": "uint16" } ], "name": "mintBaseBatch", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "mintExtension", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint80", "name": "data", "type": "uint80" } ], "name": "mintExtension", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "mintExtension", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "mintExtensionBatch", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint80[]", "name": "data", "type": "uint80[]" } ], "name": "mintExtensionBatch", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint16", "name": "count", "type": "uint16" } ], "name": "mintExtensionBatch", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "extension", "type": "address" }, { "internalType": "string", "name": "baseURI", "type": "string" } ], "name": "registerExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "extension", "type": "address" }, { "internalType": "string", "name": "baseURI", "type": "string" }, { "internalType": "bool", "name": "baseURIIdentical", "type": "bool" } ], "name": "registerExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "admin", "type": "address" } ], "name": "revokeAdmin", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "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": "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": "address", "name": "extension", "type": "address" } ], "name": "setApproveTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "enabled", "type": "bool" } ], "name": "setApproveTransferExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setBaseTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setBaseTokenURIExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "uri", "type": "string" }, { "internalType": "bool", "name": "identical", "type": "bool" } ], "name": "setBaseTokenURIExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "extension", "type": "address" }, { "internalType": "address", "name": "permissions", "type": "address" } ], "name": "setMintPermissions", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "setRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "setRoyalties", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "extension", "type": "address" }, { "internalType": "address payable[]", "name": "receivers", "type": "address[]" }, { "internalType": "uint256[]", "name": "basisPoints", "type": "uint256[]" } ], "name": "setRoyaltiesExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "setTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" }, { "internalType": "string[]", "name": "uris", "type": "string[]" } ], "name": "setTokenURIExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "uri", "type": "string" } ], "name": "setTokenURIExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "prefix", "type": "string" } ], "name": "setTokenURIPrefix", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "prefix", "type": "string" } ], "name": "setTokenURIPrefixExtension", "outputs": [], "stateMutability": "nonpayable", "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": "tokenId", "type": "uint256" } ], "name": "tokenData", "outputs": [ { "internalType": "uint80", "name": "", "type": "uint80" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenExtension", "outputs": [ { "internalType": "address", "name": "extension", "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": [ { "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": "extension", "type": "address" } ], "name": "unregisterExtension", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040526000606e553480156200001657600080fd5b506001606555620000266200002c565b620000ee565b600054610100900460ff1615620000995760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000ec576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b615e8280620000fe6000396000f3fe608060405234801561001057600080fd5b50600436106103af5760003560e01c80636d73e669116101f4578063b0fe87c91161011a578063d5a06d4c116100ad578063f0cdc4991161007c578063f0cdc499146108a6578063f2fde38b146108b9578063fe2e1f58146108cc578063ffa1ad74146108df57600080fd5b8063d5a06d4c146107ea578063e00aab4b14610844578063e92a89f614610857578063e985e9c51461086a57600080fd5b8063bb3bafd6116100e9578063bb3bafd6146107ea578063c87b56dd1461080b578063ce8aee9d1461081e578063d39737191461083157600080fd5b8063b0fe87c914610753578063b4b5b48f14610766578063b88d4fde146107b7578063b9c4d9fb146107ca57600080fd5b806383b7db6311610192578063a22cb46511610161578063a22cb46514610707578063aafb2d441461071a578063ac0c8cfa1461072d578063ad2d0ddd1461074057600080fd5b806383b7db63146106d35780638da5cb5b146106db57806395d89b41146106ec57806399e0dd7c146106f457600080fd5b806372ff03d3116101ce57806372ff03d3146106875780637884af441461069a5780637aa15f16146106ad57806382dcc0c8146106c057600080fd5b80636d73e6691461065957806370a082311461066c578063715018a61461067f57600080fd5b806330176e13116102d95780634278330e11610277578063596798ad11610246578063596798ad1461060d57806361e5bc6b146106205780636352211e1461063357806366d1e9d01461064657600080fd5b80634278330e146105c157806342842e0e146105d457806342966c68146105e75780634cd88b76146105fa57600080fd5b8063332dd1ae116102b3578063332dd1ae1461057557806338e52e78146105885780633e6134b81461059b5780633f0f37f6146105ae57600080fd5b806330176e131461053a5780633071a0f91461054d57806331ae450b1461056057600080fd5b806320e4afe21161035157806324d7806c1161032057806324d7806c146104c15780632928ca58146104d45780632a55205a146104f55780632d3456701461052757600080fd5b806320e4afe21461047757806322f374d01461048a578063239be3171461049b57806323b872dd146104ae57600080fd5b8063081812fc1161038d578063081812fc14610406578063095ea7b3146104315780630ebd4c7f14610444578063162094c41461046457600080fd5b806301ffc9a7146103b457806302e7afb7146103dc57806306fdde03146103f1575b600080fd5b6103c76103c2366004614ed4565b6108e7565b60405190151581526020015b60405180910390f35b6103ef6103ea366004614f06565b610916565b005b6103f961099b565b6040516103d39190614f73565b610419610414366004614f86565b610a2d565b6040516001600160a01b0390911681526020016103d3565b6103ef61043f366004614f9f565b610a54565b610457610452366004614f86565b610ba3565b6040516103d39190615006565b6103ef61047236600461505b565b610c07565b6103ef6104853660046150ec565b610c86565b606f546001600160a01b0316610419565b6104196104a9366004614f86565b610d66565b6103ef6104bc366004615166565b610e7c565b6103c76104cf366004614f06565b610ef3565b6104e76104e2366004614f06565b610f2c565b6040519081526020016103d3565b6105086105033660046151a7565b610f66565b604080516001600160a01b0390931683526020830191909152016103d3565b6103ef610535366004614f06565b610fd6565b6103ef6105483660046151c9565b611033565b6103ef61055b36600461520b565b6110b1565b61056861113b565b6040516103d39190615247565b6103ef610583366004615294565b6111ea565b610457610596366004615300565b611272565b6103ef6105a93660046151c9565b6113a7565b6103ef6105bc366004615356565b6113bb565b6104576105cf366004615300565b611444565b6103ef6105e2366004615166565b61153e565b6103ef6105f5366004614f86565b611559565b6103ef61060836600461548b565b6115f1565b6103ef61061b366004614f06565b61171c565b6103ef61062e366004615294565b611799565b610419610641366004614f86565b611838565b6103ef6106543660046151c9565b61189d565b6103ef610667366004614f06565b6118af565b6104e761067a366004614f06565b611907565b6103ef6119a1565b6104e7610695366004614f06565b6119b5565b6104e76106a836600461520b565b611a4e565b6104576106bb366004615300565b611b18565b6103ef6106ce3660046154ef565b611ca7565b610568611cba565b6033546001600160a01b0316610419565b6103f9611d5b565b6103ef6107023660046151c9565b611d6a565b6103ef610715366004615546565b611de8565b6103ef610728366004615294565b611df3565b6103ef61073b36600461557f565b611efe565b61045761074e36600461559c565b611f10565b6103ef6107613660046155d1565b612066565b61079c610774366004614f86565b6000908152606a6020526040902054600160a01b900460101c69ffffffffffffffffffff1690565b60405169ffffffffffffffffffff90911681526020016103d3565b6103ef6107c5366004615611565b6120e7565b6107dd6107d8366004614f86565b61215f565b6040516103d391906156ca565b6107fd6107f8366004614f86565b6121c3565b6040516103d39291906156dd565b6103f9610819366004614f86565b612239565b6103ef61082c366004614f06565b61229d565b6104e761083f366004615725565b61231a565b61045761085236600461559c565b612354565b6103ef61086536600461505b565b612434565b6103c761087836600461575a565b6001600160a01b039182166000908152606d6020908152604080832093909416825291909152205460ff1690565b6103ef6108b436600461575a565b612447565b6103ef6108c7366004614f06565b6124c5565b6104e76108da36600461520b565b612552565b6104e7600381565b60006108f2826125a6565b80610901575061090182612618565b80610910575061091082612685565b92915050565b336109296033546001600160a01b031690565b6001600160a01b0316148061094457506109446066336126d3565b61098f5760405162461bcd60e51b815260206004820152602480820152600080516020615e2d8339815191526044820152633236b4b760e11b60648201526084015b60405180910390fd5b610998816126f5565b50565b6060606880546109aa90615788565b80601f01602080910402602001604051908101604052809291908181526020018280546109d690615788565b8015610a235780601f106109f857610100808354040283529160200191610a23565b820191906000526020600020905b815481529060010190602001808311610a0657829003601f168201915b5050505050905090565b6000610a3882612805565b506000908152606c60205260409020546001600160a01b031690565b6000610a5f82611838565b9050806001600160a01b0316836001600160a01b031603610ae85760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f72000000000000000000000000000000000000000000000000000000000000006064820152608401610986565b336001600160a01b0382161480610b2257506001600160a01b0381166000908152606d6020908152604080832033845290915290205460ff165b610b945760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610986565b610b9e8383612869565b505050565b6000818152606a60205260409020546060906001600160a01b0316610bfe5760405162461bcd60e51b81526020600482015260116024820152702737b732bc34b9ba32b73a103a37b5b2b760791b6044820152606401610986565b610910826128d7565b33610c1a6033546001600160a01b031690565b6001600160a01b03161480610c355750610c356066336126d3565b610c7b5760405162461bcd60e51b815260206004820152602480820152600080516020615e2d8339815191526044820152633236b4b760e11b6064820152608401610986565b610b9e8383836128e2565b33610c996033546001600160a01b031690565b6001600160a01b03161480610cb45750610cb46066336126d3565b610cfa5760405162461bcd60e51b815260206004820152602480820152600080516020615e2d8339815191526044820152633236b4b760e11b6064820152608401610986565b6000858152606a60205260409020546001600160a01b0316610d525760405162461bcd60e51b81526020600482015260116024820152702737b732bc34b9ba32b73a103a37b5b2b760791b6044820152606401610986565b610d5f8585858585612966565b5050505050565b6000818152606a60205260408120546001600160a01b0316610dbe5760405162461bcd60e51b81526020600482015260116024820152702737b732bc34b9ba32b73a103a37b5b2b760791b6044820152606401610986565b610dc7826129ed565b90506001600160a01b038116610e1f5760405162461bcd60e51b815260206004820152601660248201527f4e6f20657874656e73696f6e20666f7220746f6b656e000000000000000000006044820152606401610986565b610e2a6072826126d3565b15610e775760405162461bcd60e51b815260206004820152601560248201527f457874656e73696f6e20626c61636b6c697374656400000000000000000000006044820152606401610986565b919050565b610e863382612a48565b610ee85760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b6064820152608401610986565b610b9e838383612ac7565b6000816001600160a01b0316610f116033546001600160a01b031690565b6001600160a01b0316148061091057506109106066836126d3565b6000610f36612c9c565b610f3e612cf5565b610f5a8260405180602001604052806000815250600080612d4c565b9050610e776001606555565b6000828152606a602052604081205481906001600160a01b0316610fc05760405162461bcd60e51b81526020600482015260116024820152702737b732bc34b9ba32b73a103a37b5b2b760791b6044820152606401610986565b610fca8484612dd5565b915091505b9250929050565b610fde612eac565b610fe96066826126d3565b156109985760405133906001600160a01b038316907f7c0c3c84c67c85fcac635147348bfe374c24a1a93d0366d1cfe9d8853cbf89d590600090a361102f606682612f06565b5050565b336110466033546001600160a01b031690565b6001600160a01b0316148061106157506110616066336126d3565b6110a75760405162461bcd60e51b815260206004820152602480820152600080516020615e2d8339815191526044820152633236b4b760e11b6064820152608401610986565b61102f8282612f1b565b336110c46033546001600160a01b031690565b6001600160a01b031614806110df57506110df6066336126d3565b6111255760405162461bcd60e51b815260206004820152602480820152600080516020615e2d8339815191526044820152633236b4b760e11b6064820152608401610986565b61112e83612f50565b610b9e8383836000612fa8565b606061114760666130af565b67ffffffffffffffff81111561115f5761115f6153be565b604051908082528060200260200182016040528015611188578160200160208202803683370190505b50905060005b61119860666130af565b8110156111e6576111aa6066826130b9565b8282815181106111bc576111bc6157bc565b6001600160a01b0390921660209283029190910190910152806111de816157e8565b91505061118e565b5090565b336111fd6033546001600160a01b031690565b6001600160a01b0316148061121857506112186066336126d3565b61125e5760405162461bcd60e51b815260206004820152602480820152600080516020615e2d8339815191526044820152633236b4b760e11b6064820152608401610986565b61126c6000858585856130c5565b50505050565b606061127c612c9c565b611284612cf5565b8167ffffffffffffffff81111561129d5761129d6153be565b6040519080825280602002602001820160405280156112c6578160200160208202803683370190505b5090506000606e5460016112da9190615801565b905083839050606e60008282546112f19190615801565b90915550600090505b838110156113945761136f86868684818110611318576113186157bc565b905060200281019061132a9190615814565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250925061136a915086905087615801565b612d4c565b838281518110611381576113816157bc565b60209081029190910101526001016112fa565b50506113a06001606555565b9392505050565b6113af612cf5565b61102f828260006131b2565b336113ce6033546001600160a01b031690565b6001600160a01b031614806113e957506113e96066336126d3565b61142f5760405162461bcd60e51b815260206004820152602480820152600080516020615e2d8339815191526044820152633236b4b760e11b6064820152608401610986565b61143884612f50565b61126c84848484612fa8565b606061144e612c9c565b611456612cf5565b8167ffffffffffffffff81111561146f5761146f6153be565b604051908082528060200260200182016040528015611498578160200160208202803683370190505b5090506000606e5460016114ac9190615801565b905083839050606e60008282546114c39190615801565b90915550600090505b838110156113945761151986604051806020016040528060008152508787858181106114fa576114fa6157bc565b905060200201602081019061150f919061585b565b61136a8587615801565b83828151811061152b5761152b6157bc565b60209081029190910101526001016114cc565b610b9e838383604051806020016040528060008152506120e7565b611561612c9c565b61156b3382612a48565b6115b75760405162461bcd60e51b815260206004820152601f60248201527f43616c6c6572206973206e6f74206f776e6572206f7220617070726f766564006044820152606401610986565b60006115c282611838565b905060006115cf836129ed565b90506115da836131ef565b6115e58284836132ae565b50506109986001606555565b600054610100900460ff16158080156116115750600054600160ff909116105b8061162b5750303b15801561162b575060005460ff166001145b61169d5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610986565b6000805460ff1916600117905580156116c0576000805461ff0019166101001790555b6116ca838361336d565b6116d26133e2565b8015610b9e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b3361172f6033546001600160a01b031690565b6001600160a01b0316148061174a575061174a6066336126d3565b6117905760405162461bcd60e51b815260206004820152602480820152600080516020615e2d8339815191526044820152633236b4b760e11b6064820152608401610986565b61099881613455565b6117a1612cf5565b8281146117e05760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081a5b9c1d5d609a1b6044820152606401610986565b60005b83811015610d5f57611830858583818110611800576118006157bc565b90506020020135848484818110611819576118196157bc565b905060200281019061182b9190615814565b6134a9565b6001016117e3565b6000818152606a60205260408120546001600160a01b0316806109105760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610986565b6118a5612cf5565b61102f82826134b3565b6118b7612eac565b6118c26066826126d3565b6109985760405133906001600160a01b038316907f7e1a1a08d52e4ba0e21554733d66165fd5151f99460116223d9e3a608eec5cb190600090a361102f6066826134cd565b60006001600160a01b0382166119855760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610986565b506001600160a01b03166000908152606b602052604090205490565b6119a9612eac565b6119b360006134e2565b565b60006119bf612c9c565b336119d26033546001600160a01b031690565b6001600160a01b031614806119ed57506119ed6066336126d3565b611a335760405162461bcd60e51b815260206004820152602480820152600080516020615e2d8339815191526044820152633236b4b760e11b6064820152608401610986565b610f5a82604051806020016040528060008152506000613534565b6000611a58612c9c565b33611a6b6033546001600160a01b031690565b6001600160a01b03161480611a865750611a866066336126d3565b611acc5760405162461bcd60e51b815260206004820152602480820152600080516020615e2d8339815191526044820152633236b4b760e11b6064820152608401610986565b611b0c8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250613534915050565b90506113a06001606555565b6060611b22612c9c565b33611b356033546001600160a01b031690565b6001600160a01b03161480611b505750611b506066336126d3565b611b965760405162461bcd60e51b815260206004820152602480820152600080516020615e2d8339815191526044820152633236b4b760e11b6064820152608401610986565b8167ffffffffffffffff811115611baf57611baf6153be565b604051908082528060200260200182016040528015611bd8578160200160208202803683370190505b5090506000606e546001611bec9190615801565b905083839050606e6000828254611c039190615801565b90915550600090505b8381101561139457611c8286868684818110611c2a57611c2a6157bc565b9050602002810190611c3c9190615814565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611c7d9250869150879050615801565b613534565b838281518110611c9457611c946157bc565b6020908102919091010152600101611c0c565b611caf612cf5565b610b9e8383836131b2565b6060611cc660706130af565b67ffffffffffffffff811115611cde57611cde6153be565b604051908082528060200260200182016040528015611d07578160200160208202803683370190505b50905060005b611d1760706130af565b8110156111e657611d296070826130b9565b828281518110611d3b57611d3b6157bc565b6001600160a01b0390921660209283029190910190910152600101611d0d565b6060606980546109aa90615788565b33611d7d6033546001600160a01b031690565b6001600160a01b03161480611d985750611d986066336126d3565b611dde5760405162461bcd60e51b815260206004820152602480820152600080516020615e2d8339815191526044820152633236b4b760e11b6064820152608401610986565b61102f828261358b565b61102f3383836135c0565b33611e066033546001600160a01b031690565b6001600160a01b03161480611e215750611e216066336126d3565b611e675760405162461bcd60e51b815260206004820152602480820152600080516020615e2d8339815191526044820152633236b4b760e11b6064820152608401610986565b828114611ea65760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081a5b9c1d5d609a1b6044820152606401610986565b60005b83811015610d5f57611ef6858583818110611ec657611ec66157bc565b90506020020135848484818110611edf57611edf6157bc565b9050602002810190611ef19190615814565b6128e2565b600101611ea9565b611f06612cf5565b610998338261368e565b6060611f1a612c9c565b33611f2d6033546001600160a01b031690565b6001600160a01b03161480611f485750611f486066336126d3565b611f8e5760405162461bcd60e51b815260206004820152602480820152600080516020615e2d8339815191526044820152633236b4b760e11b6064820152608401610986565b8161ffff1667ffffffffffffffff811115611fab57611fab6153be565b604051908082528060200260200182016040528015611fd4578160200160208202803683370190505b5090506000606e546001611fe89190615801565b90508261ffff16606e60008282546120009190615801565b90915550600090505b8361ffff1681101561205a5761203585604051806020016040528060008152508385611c7d9190615801565b838281518110612047576120476157bc565b6020908102919091010152600101612009565b50506109106001606555565b336120796033546001600160a01b031690565b6001600160a01b0316148061209457506120946066336126d3565b6120da5760405162461bcd60e51b815260206004820152602480820152600080516020615e2d8339815191526044820152633236b4b760e11b6064820152608401610986565b610d5f85858585856130c5565b6120f13383612a48565b6121535760405162461bcd60e51b815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201526c1c881bdc88185c1c1c9bdd9959609a1b6064820152608401610986565b61126c8484848461371c565b6000818152606a60205260409020546060906001600160a01b03166121ba5760405162461bcd60e51b81526020600482015260116024820152702737b732bc34b9ba32b73a103a37b5b2b760791b6044820152606401610986565b610910826137a5565b6060806121e7836000908152606a60205260409020546001600160a01b0316151590565b6122275760405162461bcd60e51b81526020600482015260116024820152702737b732bc34b9ba32b73a103a37b5b2b760791b6044820152606401610986565b612230836137ac565b91509150915091565b6000818152606a60205260409020546060906001600160a01b03166122945760405162461bcd60e51b81526020600482015260116024820152702737b732bc34b9ba32b73a103a37b5b2b760791b6044820152606401610986565b61091082613b5c565b336122b06033546001600160a01b031690565b6001600160a01b031614806122cb57506122cb6066336126d3565b6123115760405162461bcd60e51b815260206004820152602480820152600080516020615e2d8339815191526044820152633236b4b760e11b6064820152608401610986565b61099881613e48565b6000612324612c9c565b61232c612cf5565b6123488360405180602001604052806000815250846000612d4c565b90506109106001606555565b606061235e612c9c565b612366612cf5565b8161ffff1667ffffffffffffffff811115612383576123836153be565b6040519080825280602002602001820160405280156123ac578160200160208202803683370190505b5090506000606e5460016123c09190615801565b90508261ffff16606e60008282546123d89190615801565b90915550600090505b8361ffff1681101561205a5761240f85604051806020016040528060008152506000848661136a9190615801565b838281518110612421576124216157bc565b60209081029190910101526001016123e1565b61243c612cf5565b610b9e8383836134a9565b3361245a6033546001600160a01b031690565b6001600160a01b0316148061247557506124756066336126d3565b6124bb5760405162461bcd60e51b815260206004820152602480820152600080516020615e2d8339815191526044820152633236b4b760e11b6064820152608401610986565b61102f8282613e89565b6124cd612eac565b6001600160a01b0381166125495760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610986565b610998816134e2565b600061255c612c9c565b612564612cf5565b611b0c8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509250829150612d4c9050565b60006001600160e01b031982167fb5d2729f00000000000000000000000000000000000000000000000000000000148061260957506001600160e01b031982167f9088c20700000000000000000000000000000000000000000000000000000000145b80610910575061091082613fcc565b60006001600160e01b031982167f80ac58cd00000000000000000000000000000000000000000000000000000000148061090157506001600160e01b031982167f5b5e139f0000000000000000000000000000000000000000000000000000000014806109105750610910825b60006001600160e01b031982167f553e757e00000000000000000000000000000000000000000000000000000000148061091057506301ffc9a760e01b6001600160e01b0319831614610910565b6001600160a01b038116600090815260018301602052604081205415156113a0565b6001600160a01b0381161580159061271657506001600160a01b0381163014155b6127625760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f7420626c61636b6c69737420796f757273656c66000000000000006044820152606401610986565b61276d6070826126d3565b156127b55760405133906001600160a01b038316907fd19cf84cf0fec6bec9ddfa29c63adf83a55707c712f32c8285d6180a7890147990600090a36127b3607082612f06565b505b6127c06072826126d3565b6109985760405133906001600160a01b038316907f05ac7bc5a606cd92a63365f9fda244499b9add0526b22d99937b6bd88181059c90600090a361102f6072826134cd565b6000818152606a60205260409020546001600160a01b03166109985760405162461bcd60e51b815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610986565b6000818152606c6020526040902080546001600160a01b0319166001600160a01b038416908117909155819061289e82611838565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60606113a0826137ac565b6000831180156128f45750606e548311155b801561291157506000612906846129ed565b6001600160a01b0316145b61294d5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606401610986565b600083815260776020526040902061126c8284836158bc565b61297284848484614113565b600085815260796020526040812061298991614e23565b6129a884848484607960008b81526020019081526020016000206141de565b847fabb46fe0761d77584bde75697647804ffd8113abd4d8d06bc664150395eccdee858585856040516129de949392919061597c565b60405180910390a25050505050565b6000818152606a6020526040812054600160a01b90046bffffffffffffffffffffffff81169061ffff168203612a265750600092915050565b61ffff166000908152607e60205260409020546001600160a01b031692915050565b600080612a5483611838565b9050806001600160a01b0316846001600160a01b03161480612a9b57506001600160a01b038082166000908152606d602090815260408083209388168352929052205460ff165b80612abf5750836001600160a01b0316612ab484610a2d565b6001600160a01b0316145b949350505050565b6000818152606a60209081526040918290208251808401909352546001600160a01b03808216808552600160a01b9092046bffffffffffffffffffffffff16928401929092529085168114612b845760405162461bcd60e51b815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610986565b6001600160a01b038416612bff5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610986565b6020820151612c10868686846142a8565b612c1b600085612869565b6001600160a01b038087166000818152606b60209081526040808320805460001901905593891680835284832080546001019055888352606a90915283822080546001600160a01b031916821790559251879392917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a45b505050505050565b600260655403612cee5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610986565b6002606555565b612d006070336126d3565b6119b35760405162461bcd60e51b815260206004820152601c60248201527f4d757374206265207265676973746572656420657874656e73696f6e000000006044820152606401610986565b600081600003612d6f57606e60008154612d65906157e8565b90915550606e5491505b612d7985836142b4565b336000908152607d6020526040902054612dac908690849061ffff16601087901b69ffffffffffffffff00001617614348565b835115612dcd576000828152607760205260409020612dcb8582615a13565b505b509392505050565b600080600080612de4866137ac565b91509150600182511115612e3a5760405162461bcd60e51b815260206004820152601c60248201527f4d6f7265207468616e203120726f79616c7479207265636569766572000000006044820152606401610986565b8151600003612e5157306000935093505050610fcf565b81600081518110612e6457612e646157bc565b60200260200101516127108683600081518110612e8357612e836157bc565b6020026020010151612e959190615ad3565b612e9f9190615aea565b9350935050509250929050565b6033546001600160a01b031633146119b35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610986565b60006113a0836001600160a01b038416614363565b6000805260746020527fccdf39d850e26d5964b24c5391eecfa7a13a375488d6de2101d279419f39a537610b9e8284836158bc565b612f5b6072826126d3565b156109985760405162461bcd60e51b815260206004820152601560248201527f457874656e73696f6e20626c61636b6c697374656400000000000000000000006044820152606401610986565b607c5461ffff90811610612ffe5760405162461bcd60e51b815260206004820152601360248201527f546f6f206d616e7920657874656e73696f6e73000000000000000000000000006044820152606401610986565b6001600160a01b0384166000908152607d602052604081205461ffff1690036130a357607c80546000906130359061ffff16615b0c565b82546101009290920a61ffff818102199093169183160217909155607c80546001600160a01b0387166000818152607d60209081526040808320805495881661ffff199096169590951790945593549094168452607e90925290912080546001600160a01b03191690911790555b61126c84848484614456565b6000610910825490565b60006113a08383614559565b6130d184848484614113565b6001600160a01b03851660009081526078602052604081206130f291614e23565b61312384848484607860008b6001600160a01b03166001600160a01b031681526020019081526020016000206141de565b6001600160a01b038516613173577f2b6849d5976d799a5b0ca4dfd6b40a3d7afe9ea72c091fa01a958594f9a2659b84848484604051613166949392919061597c565b60405180910390a1610d5f565b846001600160a01b03167f535a93d2cb000582c0ebeaa9be4890ec6a287f98eb2df00c54c300612fd78d8f858585856040516129de949392919061597c565b3360009081526074602052604090206131cc8385836158bc565b50336000908152607560205260409020805460ff19169115159190911790555050565b6000818152606a602090815260408083208151808301909252546001600160a01b038116808352600160a01b9091046bffffffffffffffffffffffff16928201839052909290919061324490839086846142a8565b61324f600085612869565b6001600160a01b0382166000818152606b602090815260408083208054600019019055878352606a909152808220829055518692907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a461126c565b6001600160a01b03811615613336576132ce816311686e4b60e21b614583565b15613336576040516311686e4b60e21b81526001600160a01b038481166004830152602482018490528216906345a1b92c90604401600060405180830381600087803b15801561331d57600080fd5b505af1158015613331573d6000803e3d6000fd5b505050505b6000828152607760205260409020805461334f90615788565b159050610b9e576000828152607760205260408120610b9e91614e41565b600054610100900460ff166133d85760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610986565b61102f828261459f565b600054610100900460ff1661344d5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610986565b6119b3614623565b606f80546001600160a01b0319166001600160a01b0383169081179091556040519081527f959c0e47a2fe3cf01e237ba4892e2cc3194d77cbfb33e434e40873225d6b595f9060200160405180910390a150565b33612906846129ed565b336000908152607660205260409020610b9e8284836158bc565b60006113a0836001600160a01b038416614697565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008160000361355757606e6000815461354d906157e8565b90915550606e5491505b61356384836000614348565b8251156135845760008281526077602052604090206135828482615a13565b505b5092915050565b6000805260766020527fafbc767fed27552cbeceb3d11150dacedabc53b0cc52ac5aa6285a747a181958610b9e8284836158bc565b816001600160a01b0316836001600160a01b0316036136215760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610986565b6001600160a01b038381166000818152606d6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6136b8827f45ffcdad00000000000000000000000000000000000000000000000000000000614583565b1561102f576001600160a01b0382166000818152607a6020908152604091829020805460ff191685151590811790915591519182527f072a7592283e2c2d1d56d21517ff6013325e0f55483f4828373ff4d98b0a1a36910160405180910390a25050565b613727848484612ac7565b613733848484846146e6565b61126c5760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610986565b6060613584825b606080600060796000858152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b8282101561382e57600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900461ffff16818301528252600190920191016137e4565b505050509050805160000361397b576000613848856129ed565b90506001600160a01b038116156139795761386a81634e53ee3d60e11b614583565b156138f557604051634e53ee3d60e11b8152306004820152602481018690526001600160a01b03821690639ca7dc7a90604401600060405180830381865afa1580156138ba573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526138e29190810190615bb7565b81519195509350156138f5575050915091565b6001600160a01b038116600090815260786020908152604080832080548251818502810185019093528083529193909284015b8282101561397257600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900461ffff1681830152825260019092019101613928565b5050505091505b505b8051600003613a1e576000808052607860209081527f081a134e404bb5bca49ef6b8477e647c1205f6d43d6a20bb692a968ac5aa71448054604080518285028101850190915281815293919290919084015b82821015613a1757600084815260209081902060408051808201909152908401546001600160a01b0381168252600160a01b900461ffff16818301528252600190920191016139cd565b5050505090505b805115613b5657805167ffffffffffffffff811115613a3f57613a3f6153be565b604051908082528060200260200182016040528015613a68578160200160208202803683370190505b509250805167ffffffffffffffff811115613a8557613a856153be565b604051908082528060200260200182016040528015613aae578160200160208202803683370190505b50915060005b8151811015613b5457818181518110613acf57613acf6157bc565b602002602001015160000151848281518110613aed57613aed6157bc565b60200260200101906001600160a01b031690816001600160a01b031681525050818181518110613b1f57613b1f6157bc565b60200260200101516020015161ffff16838281518110613b4157613b416157bc565b6020908102919091010152600101613ab4565b505b50915091565b6060600082118015613b705750606e548211155b613bac5760405162461bcd60e51b815260206004820152600d60248201526c24b73b30b634b2103a37b5b2b760991b6044820152606401610986565b6000613bb7836129ed565b9050613bc46072826126d3565b15613c115760405162461bcd60e51b815260206004820152601560248201527f457874656e73696f6e20626c61636b6c697374656400000000000000000000006044820152606401610986565b60008381526077602052604090208054613c2a90615788565b159050613d44576001600160a01b03811660009081526076602052604090208054613c5490615788565b159050613ca5576001600160a01b038116600090815260766020908152604080832086845260778352928190209051613c8e939201615ce5565b604051602081830303815290604052915050919050565b60008381526077602052604090208054613cbe90615788565b80601f0160208091040260200160405190810160405280929190818152602001828054613cea90615788565b8015613d375780601f10613d0c57610100808354040283529160200191613d37565b820191906000526020600020905b815481529060010190602001808311613d1a57829003601f168201915b5050505050915050919050565b613d558163e9dc637560e01b614583565b15613dcd5760405163e9dc637560e01b8152306004820152602481018490526001600160a01b0382169063e9dc637590604401600060405180830381865afa158015613da5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113a09190810190615cfa565b6001600160a01b03811660009081526075602052604090205460ff16613e1f576001600160a01b0381166000908152607460205260409020613e0e8461483a565b604051602001613c8e929190615d68565b6001600160a01b03811660009081526074602052604090208054613cbe90615788565b50919050565b60405133906001600160a01b038316907fd19cf84cf0fec6bec9ddfa29c63adf83a55707c712f32c8285d6180a7890147990600090a361102f607082612f06565b613e946070836126d3565b613ee05760405162461bcd60e51b815260206004820152601e60248201527f43726561746f72436f72653a20496e76616c696420657874656e73696f6e00006044820152606401610986565b6001600160a01b0381161580613f025750613f0281631e05385b60e31b614583565b613f4e5760405162461bcd60e51b815260206004820152600f60248201527f496e76616c6964206164647265737300000000000000000000000000000000006044820152606401610986565b6001600160a01b038281166000908152607b602052604090205481169082161461102f576001600160a01b038281166000818152607b602052604080822080546001600160a01b031916948616948517905551339392917f6a835c4fcf7e0d398db3762332fdaa1471814ad39f1e2d6d0b3fdabf8efee3e091a45050565b60006001600160e01b031982167f5365e65c00000000000000000000000000000000000000000000000000000000148061402f57506001600160e01b031982167f28f10a2100000000000000000000000000000000000000000000000000000000145b8061403e575061403e82612618565b8061407257506001600160e01b031982167fbb3bafd600000000000000000000000000000000000000000000000000000000145b806140a657506001600160e01b031982167fb779958400000000000000000000000000000000000000000000000000000000145b806140da57506001600160e01b031982167fd5a06d4c00000000000000000000000000000000000000000000000000000000145b8061091057506001600160e01b031982167f2a55205a000000000000000000000000000000000000000000000000000000001492915050565b8281146141525760405162461bcd60e51b815260206004820152600d60248201526c125b9d985b1a59081a5b9c1d5d609a1b6044820152606401610986565b6000805b8281101561418c57838382818110614170576141706157bc565b90506020020135826141829190615801565b9150600101614156565b506127108110610d5f5760405162461bcd60e51b815260206004820152601760248201527f496e76616c696420746f74616c20726f79616c746965730000000000000000006044820152606401610986565b60005b82811015612c9457816040518060400160405280888885818110614207576142076157bc565b905060200201602081019061421c9190614f06565b6001600160a01b0316815260200186868581811061423c5761423c6157bc565b61ffff602091820293909301358316909352508354600181810186556000958652948390208451910180549490930151909116600160a01b0275ffffffffffffffffffffffffffffffffffffffffffff199093166001600160a01b0390911617919091179055016141e1565b61126c848484846148da565b336000908152607b60205260409020546001600160a01b03161561102f57336000818152607b602052604090819020549051631e05385b60e31b815260048101929092526001600160a01b03848116602484015260448301849052169063f029c2d890606401600060405180830381600087803b15801561433457600080fd5b505af1158015612c94573d6000803e3d6000fd5b610b9e83838360405180602001604052806000815250614915565b6000818152600183016020526040812054801561444c576000614387600183615d8d565b855490915060009061439b90600190615d8d565b90508181146144005760008660000182815481106143bb576143bb6157bc565b90600052602060002001549050808760000184815481106143de576143de6157bc565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061441157614411615da0565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610910565b6000915050610910565b6001600160a01b038416301480159061447857506001600160a01b0384163b15155b6144c45760405162461bcd60e51b815260206004820152600760248201527f496e76616c6964000000000000000000000000000000000000000000000000006044820152606401610986565b60405133906001600160a01b038616907fd8cb8ba4086944eabf43c5535b7712015e4d4c714b24bf812c040ea5b7a3e42a90600090a36001600160a01b038416600090815260746020526040902061451d8385836158bc565b506001600160a01b0384166000908152607560205260409020805460ff191682151517905561454d6070856134cd565b5061126c84600161368e565b6000826000018281548110614570576145706157bc565b9060005260206000200154905092915050565b600061458e83614a78565b80156113a057506113a08383614aab565b600054610100900460ff1661460a5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610986565b60686146168382615a13565b506069610b9e8282615a13565b600054610100900460ff1661468e5760405162461bcd60e51b815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201526a6e697469616c697a696e6760a81b6064820152608401610986565b6119b3336134e2565b60008181526001830160205260408120546146de57508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610910565b506000610910565b60006001600160a01b0384163b1561483257604051630a85bd0160e11b81526001600160a01b0385169063150b7a029061472a903390899088908890600401615db6565b6020604051808303816000875af1925050508015614765575060408051601f3d908101601f1916820190925261476291810190615df2565b60015b614818573d808015614793576040519150601f19603f3d011682016040523d82523d6000602084013e614798565b606091505b5080516000036148105760405162461bcd60e51b815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610986565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612abf565b506001612abf565b6060600061484783614b49565b600101905060008167ffffffffffffffff811115614867576148676153be565b6040519080825280601f01601f191660200182016040528015614891576020820181803683370190505b5090508181016020015b600019017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461489b57509392505050565b6001600160a01b0384161561126c5761ffff81166000908152607e602052604090205461126c908590859085906001600160a01b0316614c2b565b6001600160a01b03841661496b5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610986565b6000838152606a60205260409020546001600160a01b0316156149d05760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610986565b6149dd60008585856142a8565b6001600160a01b038085166000818152606b6020908152604080832080546001019055805180820182528481526bffffffffffffffffffffffff8089168285019081528a8652606a9094528285209151935116600160a01b02929095169190911790935591518592907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a461373360008585846146e6565b6000614a8b826301ffc9a760e01b614aab565b80156109105750614aa4826001600160e01b0319614aab565b1592915050565b604080516001600160e01b03198316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166301ffc9a760e01b178152825160009392849283928392918391908a617530fa92503d91506000519050828015614b32575060208210155b8015614b3e5750600081115b979650505050505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310614b92577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310614bbe576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310614bdc57662386f26fc10000830492506010015b6305f5e1008310614bf4576305f5e100830492506008015b6127108310614c0857612710830492506004015b60648310614c1a576064830492506002015b600a83106109105760010192915050565b6001600160a01b0384161561126c576001600160a01b03811615801590614c6a57506001600160a01b0381166000908152607a602052604090205460ff165b15614d4157604051632f3537c560e11b81523360048201526001600160a01b038581166024830152848116604483015260648201849052821690635e6a6f8a906084016020604051808303816000875af1158015614ccc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cf09190615e0f565b614d3c5760405162461bcd60e51b815260206004820152601a60248201527f457874656e73696f6e20617070726f76616c206661696c7572650000000000006044820152606401610986565b61126c565b606f546001600160a01b03161561126c57606f54604051632f3537c560e11b81523360048201526001600160a01b03868116602483015285811660448301526064820185905290911690635e6a6f8a906084016020604051808303816000875af1158015614db3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614dd79190615e0f565b61126c5760405162461bcd60e51b815260206004820152601a60248201527f457874656e73696f6e20617070726f76616c206661696c7572650000000000006044820152606401610986565b50805460008255906000526020600020908101906109989190614e7b565b508054614e4d90615788565b6000825580601f10614e5d575050565b601f0160209004906000526020600020908101906109989190614ea9565b5b808211156111e657805475ffffffffffffffffffffffffffffffffffffffffffff19168155600101614e7c565b5b808211156111e65760008155600101614eaa565b6001600160e01b03198116811461099857600080fd5b600060208284031215614ee657600080fd5b81356113a081614ebe565b6001600160a01b038116811461099857600080fd5b600060208284031215614f1857600080fd5b81356113a081614ef1565b60005b83811015614f3e578181015183820152602001614f26565b50506000910152565b60008151808452614f5f816020860160208601614f23565b601f01601f19169290920160200192915050565b6020815260006113a06020830184614f47565b600060208284031215614f9857600080fd5b5035919050565b60008060408385031215614fb257600080fd5b8235614fbd81614ef1565b946020939093013593505050565b600081518084526020808501945080840160005b83811015614ffb57815187529582019590820190600101614fdf565b509495945050505050565b6020815260006113a06020830184614fcb565b60008083601f84011261502b57600080fd5b50813567ffffffffffffffff81111561504357600080fd5b602083019150836020828501011115610fcf57600080fd5b60008060006040848603121561507057600080fd5b83359250602084013567ffffffffffffffff81111561508e57600080fd5b61509a86828701615019565b9497909650939450505050565b60008083601f8401126150b957600080fd5b50813567ffffffffffffffff8111156150d157600080fd5b6020830191508360208260051b8501011115610fcf57600080fd5b60008060008060006060868803121561510457600080fd5b85359450602086013567ffffffffffffffff8082111561512357600080fd5b61512f89838a016150a7565b9096509450604088013591508082111561514857600080fd5b50615155888289016150a7565b969995985093965092949392505050565b60008060006060848603121561517b57600080fd5b833561518681614ef1565b9250602084013561519681614ef1565b929592945050506040919091013590565b600080604083850312156151ba57600080fd5b50508035926020909101359150565b600080602083850312156151dc57600080fd5b823567ffffffffffffffff8111156151f357600080fd5b6151ff85828601615019565b90969095509350505050565b60008060006040848603121561522057600080fd5b833561522b81614ef1565b9250602084013567ffffffffffffffff81111561508e57600080fd5b6020808252825182820181905260009190848201906040850190845b818110156152885783516001600160a01b031683529284019291840191600101615263565b50909695505050505050565b600080600080604085870312156152aa57600080fd5b843567ffffffffffffffff808211156152c257600080fd5b6152ce888389016150a7565b909650945060208701359150808211156152e757600080fd5b506152f4878288016150a7565b95989497509550505050565b60008060006040848603121561531557600080fd5b833561532081614ef1565b9250602084013567ffffffffffffffff81111561533c57600080fd5b61509a868287016150a7565b801515811461099857600080fd5b6000806000806060858703121561536c57600080fd5b843561537781614ef1565b9350602085013567ffffffffffffffff81111561539357600080fd5b61539f87828801615019565b90945092505060408501356153b381615348565b939692955090935050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156153fd576153fd6153be565b604052919050565b600067ffffffffffffffff82111561541f5761541f6153be565b50601f01601f191660200190565b600061544061543b84615405565b6153d4565b905082815283838301111561545457600080fd5b828260208301376000602084830101529392505050565b600082601f83011261547c57600080fd5b6113a08383356020850161542d565b6000806040838503121561549e57600080fd5b823567ffffffffffffffff808211156154b657600080fd5b6154c28683870161546b565b935060208501359150808211156154d857600080fd5b506154e58582860161546b565b9150509250929050565b60008060006040848603121561550457600080fd5b833567ffffffffffffffff81111561551b57600080fd5b61552786828701615019565b909450925050602084013561553b81615348565b809150509250925092565b6000806040838503121561555957600080fd5b823561556481614ef1565b9150602083013561557481615348565b809150509250929050565b60006020828403121561559157600080fd5b81356113a081615348565b600080604083850312156155af57600080fd5b82356155ba81614ef1565b9150602083013561ffff8116811461557457600080fd5b6000806000806000606086880312156155e957600080fd5b85356155f481614ef1565b9450602086013567ffffffffffffffff8082111561512357600080fd5b6000806000806080858703121561562757600080fd5b843561563281614ef1565b9350602085013561564281614ef1565b925060408501359150606085013567ffffffffffffffff81111561566557600080fd5b8501601f8101871361567657600080fd5b6156858782356020840161542d565b91505092959194509250565b600081518084526020808501945080840160005b83811015614ffb5781516001600160a01b0316875295820195908201906001016156a5565b6020815260006113a06020830184615691565b6040815260006156f06040830185615691565b82810360208401526157028185614fcb565b95945050505050565b803569ffffffffffffffffffff81168114610e7757600080fd5b6000806040838503121561573857600080fd5b823561574381614ef1565b91506157516020840161570b565b90509250929050565b6000806040838503121561576d57600080fd5b823561577881614ef1565b9150602083013561557481614ef1565b600181811c9082168061579c57607f821691505b602082108103613e4257634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016157fa576157fa6157d2565b5060010190565b80820180821115610910576109106157d2565b6000808335601e1984360301811261582b57600080fd5b83018035915067ffffffffffffffff82111561584657600080fd5b602001915036819003821315610fcf57600080fd5b60006020828403121561586d57600080fd5b6113a08261570b565b601f821115610b9e57600081815260208120601f850160051c8101602086101561589d5750805b601f850160051c820191505b81811015612c94578281556001016158a9565b67ffffffffffffffff8311156158d4576158d46153be565b6158e8836158e28354615788565b83615876565b6000601f84116001811461591c57600085156159045750838201355b600019600387901b1c1916600186901b178355610d5f565b600083815260209020601f19861690835b8281101561594d578685013582556020948501946001909201910161592d565b508682101561596a5760001960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6040808252810184905260008560608301825b878110156159bf5782356159a281614ef1565b6001600160a01b031682526020928301929091019060010161598f565b5083810360208501528481527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8511156159f857600080fd5b8460051b915081866020830137016020019695505050505050565b815167ffffffffffffffff811115615a2d57615a2d6153be565b615a4181615a3b8454615788565b84615876565b602080601f831160018114615a765760008415615a5e5750858301515b600019600386901b1c1916600185901b178555612c94565b600085815260208120601f198616915b82811015615aa557888601518255948401946001909101908401615a86565b5085821015615ac35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b8082028115828204841417610910576109106157d2565b600082615b0757634e487b7160e01b600052601260045260246000fd5b500490565b600061ffff808316818103615b2357615b236157d2565b6001019392505050565b600067ffffffffffffffff821115615b4757615b476153be565b5060051b60200190565b600082601f830112615b6257600080fd5b81516020615b7261543b83615b2d565b82815260059290921b84018101918181019086841115615b9157600080fd5b8286015b84811015615bac5780518352918301918301615b95565b509695505050505050565b60008060408385031215615bca57600080fd5b825167ffffffffffffffff80821115615be257600080fd5b818501915085601f830112615bf657600080fd5b81516020615c0661543b83615b2d565b82815260059290921b84018101918181019089841115615c2557600080fd5b948201945b83861015615c4c578551615c3d81614ef1565b82529482019490820190615c2a565b91880151919650909350505080821115615c6557600080fd5b506154e585828601615b51565b60008154615c7f81615788565b60018281168015615c975760018114615cac57615cdb565b60ff1984168752821515830287019450615cdb565b8560005260208060002060005b85811015615cd25781548a820152908401908201615cb9565b50505082870194505b5050505092915050565b6000612abf615cf48386615c72565b84615c72565b600060208284031215615d0c57600080fd5b815167ffffffffffffffff811115615d2357600080fd5b8201601f81018413615d3457600080fd5b8051615d4261543b82615405565b818152856020838501011115615d5757600080fd5b615702826020830160208601614f23565b6000615d748285615c72565b8351615d84818360208801614f23565b01949350505050565b81810381811115610910576109106157d2565b634e487b7160e01b600052603160045260246000fd5b60006001600160a01b03808716835280861660208401525083604083015260806060830152615de86080830184614f47565b9695505050505050565b600060208284031215615e0457600080fd5b81516113a081614ebe565b600060208284031215615e2157600080fd5b81516113a08161534856fe41646d696e436f6e74726f6c3a204d757374206265206f776e6572206f722061a2646970667358221220642d80c11e890d9617ab1b8cddb0a4475d5e75b67e3849d3bcef8323f4f8cf4764736f6c63430008110033