[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "internalType": "address", "name": "_admin", "type": "address" }, { "internalType": "address", "name": "_issuer", "type": "address" }, { "internalType": "address", "name": "_editor", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "AccountFrozen", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "AccountGreylisted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "AccountUnFrozen", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "AccountUnGreylisted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "AccountUnWhitelisted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "AccountWhitelisted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "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": "from", "type": "address" }, { "indexed": false, "internalType": "string", "name": "uri", "type": "string" } ], "name": "ContractURISet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "issuer", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "reason", "type": "string" } ], "name": "ForceBurn", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "issuer", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ForceTransfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "address", "name": "authContract", "type": "address" } ], "name": "GlobalAuthContractSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "reqId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "issuer", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "GreylistTransferApproved", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "reqId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "GreylistTransferCancelled", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "reqId", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "GreylistTransferRequestCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "from", "type": "address" }, { "indexed": false, "internalType": "string", "name": "kya", "type": "string" } ], "name": "KyaUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newMaxArraySize", "type": "uint256" } ], "name": "NewMaxArraySizeSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "authContract", "type": "address" } ], "name": "TokenAuthContractSet", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "string", "name": "kya", "type": "string" } ], "name": "TokenKyaUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "indexed": false, "internalType": "uint256[]", "name": "values", "type": "uint256[]" } ], "name": "TransferBatch", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "operator", "type": "address" }, { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "id", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "TransferSingle", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "string", "name": "value", "type": "string" }, { "indexed": true, "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "URI", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [], "name": "AGENT_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "EDITOR_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "ISSUER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "reqId", "type": "uint256" } ], "name": "approveTransferRequest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" } ], "name": "balanceOfBatch", "outputs": [ { "internalType": "uint256[]", "name": "", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" } ], "name": "bulkGreylistAccount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" } ], "name": "bulkUnGreylistAccount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" } ], "name": "bulkUnWhitelistAccount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" } ], "name": "bulkWhitelistAccount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_id", "type": "uint256" }, { "internalType": "uint256", "name": "_quantity", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "reqId", "type": "uint256" } ], "name": "cancelTransferRequest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "contractURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "currentTokenId", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" }, { "internalType": "string", "name": "reason", "type": "string" } ], "name": "forceBurn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "_tokenIds", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "_quantities", "type": "uint256[]" }, { "internalType": "string", "name": "reason", "type": "string" } ], "name": "forceBurnBatch", "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": "uint256", "name": "quantity", "type": "uint256" } ], "name": "forceTransfer", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "freezeAccount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" } ], "name": "frozenInArray", "outputs": [ { "internalType": "address[]", "name": "frozen", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "globalAuthContract", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "grantAgentRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "grantEditorRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" } ], "name": "grantIssuerRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "greylistAccount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" } ], "name": "greylistedInArray", "outputs": [ { "internalType": "address[]", "name": "greylisted", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isAccountFrozen", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isGreylisted", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isWhitelisted", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "kya", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "maxArraySize", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_quantity", "type": "uint256" }, { "internalType": "string", "name": "_tokenURI", "type": "string" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "_accounts", "type": "address[]" }, { "internalType": "uint256[]", "name": "_quantities", "type": "uint256[]" }, { "internalType": "string[]", "name": "_tokenURIs", "type": "string[]" }, { "internalType": "bytes[]", "name": "_data", "type": "bytes[]" } ], "name": "mintBatch", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_address", "type": "address" }, { "internalType": "uint256", "name": "_id", "type": "uint256" }, { "internalType": "bytes", "name": "", "type": "bytes" } ], "name": "mustBeAuthorizedHolder", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_from", "type": "address" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_id", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "mustBeAuthorizedHolders", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pauseToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "name": "requestTransfer", "outputs": [ { "internalType": "uint256", "name": "reqId", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeAgentRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeEditorRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeIssuerRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256[]", "name": "ids", "type": "uint256[]" }, { "internalType": "uint256[]", "name": "amounts", "type": "uint256[]" }, { "internalType": "bytes", "name": "data", "type": "bytes" } ], "name": "safeBatchTransferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "id", "type": "uint256" }, { "internalType": "uint256", "name": "amount", "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": "_contract_uri", "type": "string" } ], "name": "setContractURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_authContract", "type": "address" } ], "name": "setGlobalAuthContract", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_kya", "type": "string" } ], "name": "setKya", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_maxArraySize", "type": "uint256" } ], "name": "setMaxArraySize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_id", "type": "uint256" }, { "internalType": "address", "name": "_authContract", "type": "address" } ], "name": "setTokenAuthContract", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_id", "type": "uint256" }, { "internalType": "string", "name": "_kya", "type": "string" } ], "name": "setTokenKya", "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": "", "type": "uint256" } ], "name": "tokenKya", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_id", "type": "uint256" } ], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "reqId", "type": "uint256" } ], "name": "transferRequestInfo", "outputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "quantity", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "unFreezeAccount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "unGreylistAccount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "unPauseToken", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "unWhitelistAccount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_id", "type": "uint256" } ], "name": "uri", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "whitelistAccount", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "accounts", "type": "address[]" } ], "name": "whitelistedInArray", "outputs": [ { "internalType": "address[]", "name": "whitelisted", "type": "address[]" } ], "stateMutability": "view", "type": "function" } ]
608060405260145f556001600c5560016013553480156200001e575f80fd5b50604051620051dd380380620051dd83398101604081905262000041916200043b565b60408051602081019091525f81526001805460ff19169055839083908390889088906200006e81620001de565b50600a6200007d838262000560565b50600b6200008c828262000560565b50849150506001600160a01b038116620000db5760405162461bcd60e51b815260206004820152601d60248201525f80516020620051bd83398151915260448201526064015b60405180910390fd5b826001600160a01b038116620001225760405162461bcd60e51b815260206004820152601d60248201525f80516020620051bd8339815191526044820152606401620000d2565b826001600160a01b038116620001695760405162461bcd60e51b815260206004820152601d60248201525f80516020620051bd8339815191526044820152606401620000d2565b620001755f87620001f0565b620001a17f76afa8a5929fef1b4c03674b2152ae5aaad1d974b8a4021c59477bcc846ccc1e86620001f0565b620001cd7f8c93699475be54d1d73bbbabee1213ba5867c90fcebb8234a4274f68c8da497785620001f0565b50505050505050505050506200062c565b6004620001ec828262000560565b5050565b806001600160a01b038116620002375760405162461bcd60e51b815260206004820152601d60248201525f80516020620051bd8339815191526044820152606401620000d2565b5f838152600d602090815260408083206001600160a01b038616845290915290205460ff1615620002ab5760405162461bcd60e51b815260206004820152601c60248201527f524d3a204163636f756e7420616c72656164792068617320726f6c65000000006044820152606401620000d2565b620002b78383620002bc565b505050565b5f828152600d602090815260408083206001600160a01b038516845290915290205460ff16620001ec575f828152600d602090815260408083206001600160a01b03851684529091529020805460ff191660011790556200031a3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262000382575f80fd5b81516001600160401b03808211156200039f576200039f6200035e565b604051601f8301601f19908116603f01168101908282118183101715620003ca57620003ca6200035e565b8160405283815260209250866020858801011115620003e7575f80fd5b5f91505b838210156200040a5785820183015181830184015290820190620003eb565b5f602085830101528094505050505092915050565b80516001600160a01b038116811462000436575f80fd5b919050565b5f805f805f60a0868803121562000450575f80fd5b85516001600160401b038082111562000467575f80fd5b6200047589838a0162000372565b965060208801519150808211156200048b575f80fd5b506200049a8882890162000372565b945050620004ab604087016200041f565b9250620004bb606087016200041f565b9150620004cb608087016200041f565b90509295509295909350565b600181811c90821680620004ec57607f821691505b6020821081036200050b57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620002b757805f5260205f20601f840160051c81016020851015620005385750805b601f840160051c820191505b8181101562000559575f815560010162000544565b5050505050565b81516001600160401b038111156200057c576200057c6200035e565b62000594816200058d8454620004d7565b8462000511565b602080601f831160018114620005ca575f8415620005b25750858301515b5f19600386901b1c1916600185901b17855562000624565b5f85815260208120601f198616915b82811015620005fa57888601518255948401946001909101908401620005d9565b50858210156200061857878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b614b83806200063a5f395ff3fe608060405234801561000f575f80fd5b50600436106103f4575f3560e01c806395d89b4111610216578063d371e4ab1161012a578063e816d97f116100b4578063eeb8387911610084578063eeb8387914610950578063f242432a14610963578063f26c159f14610976578063f79c5eed14610989578063f97573131461099c575f80fd5b8063e816d97f146108e7578063e8a3d485146108fa578063e985e9c514610902578063ebd319211461093d575f80fd5b8063dec3eea5116100fa578063dec3eea514610888578063dffcb9511461089b578063e4304313146108ae578063e6c30142146108c1578063e6d94366146108d4575f80fd5b8063d371e4ab1461083c578063d3e8a9ab1461084f578063d547741f14610862578063d898fa8014610875575f80fd5b8063b390c0ab116101ab578063bfcbfcce1161017b578063bfcbfcce146107db578063c883b2fb146107fb578063c9fe180a1461080e578063ca7628bb14610821578063d2b04fd614610829575f80fd5b8063b390c0ab14610783578063b597914014610796578063bd85b039146107a9578063be27a8a4146107c8575f80fd5b8063a5c8d38d116101e6578063a5c8d38d14610741578063a853211a14610754578063adf6e48614610768578063b035758f14610770575f80fd5b806395d89b411461070c57806398d9423e14610714578063a217fddf14610727578063a22cb4651461072e575f80fd5b806336568abe1161030d57806363e0c2f8116102a257806382aefa241161027257806382aefa24146106ac5780638e881d48146106c057806391d14854146106d357806392a1f7e8146106e6578063938e3d7b146106f9575f80fd5b806363e0c2f8146106605780636ff98a2a1461067357806372caacf1146106865780637ff3f35114610699575f80fd5b806353cc2fae116102dd57806353cc2fae1461061c5780635c975abb1461062f5780635f89aacb1461063a57806361180da61461064d575f80fd5b806336568abe146105ce5780633af32abf146105e15780633fc7293a146105f45780634e1273f4146105fc575f80fd5b806322459e181161038e5780632c3496271161035e5780632c349627146105625780632eb2c2d61461056a5780632ebabb7f1461057d5780632f2ff15d1461059057806333bcc3ec146105a3575f80fd5b806322459e1814610506578063248a9ca31461051a57806329449eeb1461053c5780632a75ad3f1461054f575f80fd5b80630e89341c116103c95780630e89341c1461045f578063140802ee14610472578063183e2f2d1461048757806320b3a150146104f3575f80fd5b80629a9b7b146103f8578062fdd58e1461041457806301ffc9a71461042757806306fdde031461044a575b5f80fd5b610401600c5481565b6040519081526020015b60405180910390f35b6104016104223660046139b8565b6109af565b61043a6104353660046139f5565b610a48565b604051901515815260200161040b565b610452610a52565b60405161040b9190613a5d565b61045261046d366004613a6f565b610ade565b610485610480366004613a86565b610b7d565b005b6104c8610495366004613a6f565b5f9081526014602052604090208054600182015460028301546003909301546001600160a01b0392831694929091169291565b604080516001600160a01b03958616815294909316602085015291830152606082015260800161040b565b610485610501366004613a86565b610baf565b6104015f80516020614b0e83398151915281565b610401610528366004613a6f565b5f908152600d602052604090206001015490565b61048561054a366004613a6f565b610cae565b61048561055d366004613ae3565b610cce565b610485610d46565b610485610578366004613c89565b610d68565b61048561058b366004613a86565b610db4565b61048561059e366004613d2b565b610e69565b600f546105b6906001600160a01b031681565b6040516001600160a01b03909116815260200161040b565b6104856105dc366004613d2b565b610e82565b61043a6105ef366004613a86565b610efc565b610452610f19565b61060f61060a366004613d55565b610f26565b60405161040b9190613e53565b61048561062a366004613a86565b611045565b60015460ff1661043a565b610485610648366004613a6f565b6110f3565b61048561065b366004613ea5565b6112a7565b61048561066e366004613a86565b611310565b610485610681366004613ea5565b61140f565b610485610694366004613ea5565b611470565b6104856106a7366004613ee3565b6114d1565b6104015f80516020614aee83398151915281565b61043a6106ce366004613f2a565b6114f9565b61043a6106e1366004613d2b565b611520565b6104016106f4366004613f8d565b61154a565b610485610707366004613fbd565b61170e565b61045261172f565b610485610722366004613fbd565b61173c565b6104015f81565b61048561073c366004613ffc565b61175d565b61048561074f366004613a86565b611768565b6104015f80516020614b2e83398151915281565b610485611796565b61045261077e366004613a6f565b6117b5565b610485610791366004614031565b6117cd565b61043a6107a4366004613a86565b6117d8565b6104016107b7366004613a6f565b5f9081526007602052604090205490565b6104856107d6366004613a86565b6117f5565b6107ee6107e9366004613ea5565b6118aa565b60405161040b9190614051565b610485610809366004613a86565b61199d565b61048561081c366004613a86565b6119cb565b6104015f5481565b61048561083736600461409d565b6119f9565b61048561084a366004613ea5565b611a27565b61048561085d366004614120565b611a88565b610485610870366004613d2b565b611b18565b61048561088336600461415f565b611b2c565b610485610896366004613a6f565b611c58565b6104856108a9366004613a86565b611dba565b6104856108bc366004613a86565b611dda565b6104856108cf366004614219565b611e08565b6107ee6108e2366004613ea5565b611ef4565b61043a6108f5366004613a86565b611fdd565b610452611ffa565b61043a6109103660046142bf565b6001600160a01b039182165f90815260036020908152604080832093909416825291909152205460ff1690565b6107ee61094b366004613ea5565b612007565b61043a61095e3660046142e7565b6120f0565b610485610971366004614339565b6121e3565b610485610984366004613a86565b612228565b610485610997366004613d2b565b612327565b6104856109aa366004613a86565b612348565b5f6001600160a01b038316610a1e5760405162461bcd60e51b815260206004820152602a60248201527f455243313135353a2061646472657373207a65726f206973206e6f742061207660448201526930b634b21037bbb732b960b11b60648201526084015b60405180910390fd5b505f8181526002602090815260408083206001600160a01b03861684529091529020545b92915050565b5f610a4282612376565b600a8054610a5f90614398565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8b90614398565b8015610ad65780601f10610aad57610100808354040283529160200191610ad6565b820191905f5260205f20905b815481529060010190602001808311610ab957829003601f168201915b505050505081565b5f818152600960205260409020805460609190610afa90614398565b80601f0160208091040260200160405190810160405280929190818152602001828054610b2690614398565b8015610b715780601f10610b4857610100808354040283529160200191610b71565b820191905f5260205f20905b815481529060010190602001808311610b5457829003601f168201915b50505050509050919050565b5f80516020614aee833981519152610b9481612380565b610bab5f80516020614aee8339815191528361238a565b5050565b5f80516020614aee833981519152610bc681612380565b816001600160a01b038116610bed5760405162461bcd60e51b8152600401610a15906143d0565b82610bf781611fdd565b15610c145760405162461bcd60e51b8152600401610a1590614407565b610c1d81610efc565b15610c3a5760405162461bcd60e51b8152600401610a159061443e565b610c43816117d8565b15610c605760405162461bcd60e51b8152600401610a1590614475565b6001600160a01b0384165f81815260126020526040808220805460ff19166001179055517fb6fa332ee1100ba18a61d33a7bb98d96395ee5357b9ee5ac89e8d8cf0edf1f279190a250505050565b5f80516020614aee833981519152610cc581612380565b610bab82612442565b5f80516020614aee833981519152610ce581612380565b610cf086868661247d565b84866001600160a01b0316336001600160a01b03167f1a2c633ce3844738bafbf11b06029abf9f54d0f4b74b355e01c14411af38a7dc8686604051610d369291906144d4565b60405180910390a4505050505050565b5f80516020614aee833981519152610d5d81612380565b610d656124ea565b50565b6001600160a01b038516331480610d845750610d848533610910565b610da05760405162461bcd60e51b8152600401610a15906144ef565b610dad858585858561253e565b5050505050565b5f80516020614aee833981519152610dcb81612380565b610dd4826117d8565b610e205760405162461bcd60e51b815260206004820152601a60248201527f41433a204163636f756e74206e6f7420677265796c69737465640000000000006044820152606401610a15565b6001600160a01b0382165f81815260126020526040808220805460ff19169055517fc671874ede5e0de637724af2e7ce5a57bd61cab8088f9f3ad7889f01823b21d29190a25050565b5f610e7381612380565b610e7d8383612718565b505050565b6001600160a01b0381163314610ef25760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610a15565b610bab828261238a565b6001600160a01b03165f9081526011602052604090205460ff1690565b60058054610a5f90614398565b60608151835114610f8b5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a206163636f756e747320616e6420696473206c656e677468604482015268040dad2e6dac2e8c6d60bb1b6064820152608401610a15565b5f83516001600160401b03811115610fa557610fa5613b45565b604051908082528060200260200182016040528015610fce578160200160208202803683370190505b5090505f5b845181101561103d57611018858281518110610ff157610ff161453d565b602002602001015185838151811061100b5761100b61453d565b60200260200101516109af565b82828151811061102a5761102a61453d565b6020908102919091010152600101610fd3565b509392505050565b5f80516020614aee83398151915261105c81612380565b61106582611fdd565b6110aa5760405162461bcd60e51b815260206004820152601660248201527520a19d1020b1b1b7bab73a103737ba10333937bd32b760511b6044820152606401610a15565b6001600160a01b0382165f81815260106020526040808220805460ff19169055517f659647f2591afa1f57b0815d02b480bc8883f4b559c6b586e5289861b36d0d989190a25050565b5f81815260146020908152604091829020825160a08101845281546001600160a01b039081168252600183015416928101929092526002810154928201929092526003820154606082015260049091015460ff1615156080820181905261119c5760405162461bcd60e51b815260206004820152601a60248201527f5358313135353a20496e76616c696420726571756573742069640000000000006044820152606401610a15565b80516001600160a01b031633146112115760405162461bcd60e51b815260206004820152603360248201527f5358313135353a2053656e646572206973206e6f74206f776e6572206f6620746044820152721a19481d1c985b9cd9995c881c995c5d595cdd606a1b6064820152608401610a15565b5f82815260146020908152604080832080546001600160a01b0319908116825560018201805490911690556002810184905560038101939093556004909201805460ff191690558281015183518484015193519384526001600160a01b039182169391169185917fde90b20cdf45753f5246312957a96e5373b3f0dd88eac0326edde3b5311c2d20910160405180910390a45050565b5f5481908111156112ca5760405162461bcd60e51b8152600401610a1590614551565b82825f5b81811015611308576113008383838181106112eb576112eb61453d565b90506020020160208101906107d69190613a86565b6001016112ce565b505050505050565b5f80516020614aee83398151915261132781612380565b816001600160a01b03811661134e5760405162461bcd60e51b8152600401610a15906143d0565b8261135881611fdd565b156113755760405162461bcd60e51b8152600401610a1590614407565b61137e81610efc565b1561139b5760405162461bcd60e51b8152600401610a159061443e565b6113a4816117d8565b156113c15760405162461bcd60e51b8152600401610a1590614475565b6001600160a01b0384165f81815260116020526040808220805460ff19166001179055517fbcad3e56607b6406d740aa2cdbeedb8fa353e7e935f3cfabd5eece16cf9ee8f09190a250505050565b5f5481908111156114325760405162461bcd60e51b8152600401610a1590614551565b82825f5b81811015611308576114688383838181106114535761145361453d565b905060200201602081019061058b9190613a86565b600101611436565b5f5481908111156114935760405162461bcd60e51b8152600401610a1590614551565b82825f5b81811015611308576114c98383838181106114b4576114b461453d565b905060200201602081019061066e9190613a86565b600101611497565b5f80516020614b2e8339815191526114e881612380565b6114f38484846127a0565b50505050565b5f6115058584846120f0565b801561151757506115178484846120f0565b95945050505050565b5f918252600d602090815260408084206001600160a01b0393909316845291905290205460ff1690565b5f836001600160a01b0381166115725760405162461bcd60e51b8152600401610a15906143d0565b61157a612854565b61158333611fdd565b80611592575061159285611fdd565b156115af5760405162461bcd60e51b8152600401610a1590614597565b6115b8336117d8565b806115c757506115c7856117d8565b6116135760405162461bcd60e51b815260206004820152601f60248201527f5358313135353a204163636f756e74206e6f7420696e20677265796c697374006044820152606401610a15565b601380546040805160a0810182523381526001600160a01b0389811660208084019182528385018b8152606085018b81526001608087018181525f8a81526014909552978420965187549087166001600160a01b031991821617885594519087018054919096169416939093179093559151600284015551600383015591516004909101805491151560ff1990921691909117905582549194509091906116b9836145f4565b909155505060408051858152602081018590526001600160a01b03871691339185917f4caddedef68e63d6811be0595f70f97a485a2374e808429730c5c22634edadc1910160405180910390a4509392505050565b5f80516020614aee83398151915261172581612380565b610e7d838361289c565b600b8054610a5f90614398565b5f80516020614b2e83398151915261175381612380565b610e7d838361293b565b610bab33838361297c565b5f80516020614aee83398151915261177f81612380565b610bab5f80516020614aee83398151915283612718565b5f80516020614aee8339815191526117ad81612380565b610d65612a5b565b60066020525f908152604090208054610a5f90614398565b610bab33838361247d565b6001600160a01b03165f9081526012602052604090205460ff1690565b5f80516020614aee83398151915261180c81612380565b61181582610efc565b6118615760405162461bcd60e51b815260206004820152601b60248201527f41433a204163636f756e74206e6f742077686974656c697374656400000000006044820152606401610a15565b6001600160a01b0382165f81815260116020526040808220805460ff19169055517f0a34de84fd62cf3ad4aa87a738f4bcb096da0fda0e580121cec5e116b2565d269190a25050565b60608282806001600160401b038111156118c6576118c6613b45565b6040519080825280602002602001820160405280156118ef578160200160208202803683370190505b5092505f805b82811015611993576119278484838181106119125761191261453d565b90506020020160208101906108f59190613a86565b1561198b5783838281811061193e5761193e61453d565b90506020020160208101906119539190613a86565b8583815181106119655761196561453d565b6001600160a01b039092166020928302919091019091015281611987816145f4565b9250505b6001016118f5565b5050505092915050565b5f80516020614aee8339815191526119b481612380565b610bab5f80516020614b2e8339815191528361238a565b5f80516020614aee8339815191526119e281612380565b610bab5f80516020614b2e83398151915283612718565b5f80516020614aee833981519152611a1081612380565b611a1e878787878787612a94565b50505050505050565b5f548190811115611a4a5760405162461bcd60e51b8152600401610a1590614551565b82825f5b8181101561130857611a80838383818110611a6b57611a6b61453d565b90506020020160208101906105019190613a86565b600101611a4e565b5f80516020614aee833981519152611a9f81612380565b611aba8585858560405180602001604052805f815250612b63565b836001600160a01b0316856001600160a01b0316336001600160a01b03167f365f7b5efa16563feeb2644fe56f482ae46159056ada889a3a55f70a5a339b6586604051611b0991815260200190565b60405180910390a45050505050565b5f611b2281612380565b610e7d838361238a565b5f548790811115611b4f5760405162461bcd60e51b8152600401610a1590614551565b8786148015611b5d57508784145b8015611b6857508782145b611bad5760405162461bcd60e51b81526020600482015260166024820152755358313135353a20496e76616c696420696e7075747360501b6044820152606401610a15565b875f5b81811015611c4b57611c438b8b83818110611bcd57611bcd61453d565b9050602002016020810190611be29190613a86565b8a8a84818110611bf457611bf461453d565b90506020020135898985818110611c0d57611c0d61453d565b9050602002810190611c1f919061460c565b898987818110611c3157611c3161453d565b9050602002810190610837919061460c565b600101611bb0565b5050505050505050505050565b5f80516020614aee833981519152611c6f81612380565b5f82815260146020908152604091829020825160a08101845281546001600160a01b039081168252600183015416928101929092526002810154928201929092526003820154606082015260049091015460ff16151560808201819052611d185760405162461bcd60e51b815260206004820152601a60248201527f5358313135353a20496e76616c696420726571756573742069640000000000006044820152606401610a15565b5f83815260146020908152604080832080546001600160a01b0319908116825560018201805490911690556002810184905560038101849055600401805460ff191690558351848301518583015160608701518451958601909452948452611d84949193909290612b63565b6040808201519051339085907fdea52059fbcbed4841cd25f45dc5fb642f3f0c9debd90d68ce7bb5510304c0e8905f90a4505050565b5f80516020614b0e833981519152611dd181612380565b610bab82612c9b565b5f80516020614aee833981519152611df181612380565b610bab5f80516020614b0e8339815191528361238a565b5f548790811115611e2b5760405162461bcd60e51b8152600401610a1590614551565b8786148015611e3957508784145b611e7e5760405162461bcd60e51b81526020600482015260166024820152755358313135353a20496e76616c696420696e7075747360501b6044820152606401610a15565b875f5b81811015611c4b57611eec8b8b83818110611e9e57611e9e61453d565b9050602002016020810190611eb39190613a86565b8a8a84818110611ec557611ec561453d565b90506020020135898985818110611ede57611ede61453d565b905060200201358888610cce565b600101611e81565b60608282806001600160401b03811115611f1057611f10613b45565b604051908082528060200260200182016040528015611f39578160200160208202803683370190505b5092505f805b8281101561199357611f71848483818110611f5c57611f5c61453d565b90506020020160208101906105ef9190613a86565b15611fd557838382818110611f8857611f8861453d565b9050602002016020810190611f9d9190613a86565b858381518110611faf57611faf61453d565b6001600160a01b039092166020928302919091019091015281611fd1816145f4565b9250505b600101611f3f565b6001600160a01b03165f9081526010602052604090205460ff1690565b60088054610a5f90614398565b60608282806001600160401b0381111561202357612023613b45565b60405190808252806020026020018201604052801561204c578160200160208202803683370190505b5092505f805b828110156119935761208484848381811061206f5761206f61453d565b90506020020160208101906107a49190613a86565b156120e85783838281811061209b5761209b61453d565b90506020020160208101906120b09190613a86565b8583815181106120c2576120c261453d565b6001600160a01b0390921660209283029190910190910152816120e4816145f4565b9250505b600101612052565b5f828152600e60205260408120546001600160a01b03168061211a5750600f546001600160a01b03165b6001600160a01b038116612131575f9150506121dc565b6040516308ea720b60e31b81526001600160a01b038681166004830152821690634753905890602401602060405180830381865afa925050508015612193575060408051601f3d908101601f191682019092526121909181019061464e565b60015b6121d35761219f614669565b806308c379a0036121c857506121b3614682565b806121be57506121ca565b5f925050506121dc565b505b5f9150506121dc565b91506121dc9050565b9392505050565b6001600160a01b0385163314806121ff57506121ff8533610910565b61221b5760405162461bcd60e51b8152600401610a15906144ef565b610dad8585858585612b63565b5f80516020614aee83398151915261223f81612380565b816001600160a01b0381166122665760405162461bcd60e51b8152600401610a15906143d0565b8261227081611fdd565b1561228d5760405162461bcd60e51b8152600401610a1590614407565b61229681610efc565b156122b35760405162461bcd60e51b8152600401610a159061443e565b6122bc816117d8565b156122d95760405162461bcd60e51b8152600401610a1590614475565b6001600160a01b0384165f81815260106020526040808220805460ff19166001179055517f4f2a367e694e71282f29ab5eaa04c4c0be45ac5bf2ca74fb67068b98bdc2887d9190a250505050565b5f80516020614b0e83398151915261233e81612380565b610e7d8383612d26565b5f80516020614aee83398151915261235f81612380565b610bab5f80516020614b0e83398151915283612718565b5f610a4282612dc3565b610d658133612de7565b6123948282611520565b6123e05760405162461bcd60e51b815260206004820152601760248201527f524d3a204163636f756e7420686173206e6f20726f6c650000000000000000006044820152606401610a15565b6001600160a01b03811633036124385760405162461bcd60e51b815260206004820152601e60248201527f524d3a20596f752063616e2774207265766f6b6520796f757220726f6c6500006044820152606401610a15565b610bab8282612e40565b5f8190556040518181527f5d9ee51ccbd91cff399c0fc83c847b0ac8540a8294ccd983f71635f069b18132906020015b60405180910390a150565b5f828152600760205260408120805483929061249a90849061470a565b90915550505f8281526007602052604081205490036124df575f8281526009602052604081206124c991613953565b5f8281526006602052604081206124df91613953565b610e7d838383612ea6565b6124f2612854565b6001805460ff1916811790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258335b6040516001600160a01b03909116815260200160405180910390a1565b81518351146125a05760405162461bcd60e51b815260206004820152602860248201527f455243313135353a2069647320616e6420616d6f756e7473206c656e677468206044820152670dad2e6dac2e8c6d60c31b6064820152608401610a15565b6001600160a01b0384166125c65760405162461bcd60e51b8152600401610a159061471d565b336125d5818787878787613033565b5f5b84518110156126b2575f8582815181106125f3576125f361453d565b602002602001015190505f8583815181106126105761261061453d565b6020908102919091018101515f8481526002835260408082206001600160a01b038e1683529093529190912054909150818110156126605760405162461bcd60e51b8152600401610a1590614762565b5f8381526002602090815260408083206001600160a01b038e8116855292528083208585039055908b1682528120805484929061269e9084906147ac565b9091555050600190930192506125d7915050565b50846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516127029291906147bf565b60405180910390a4611308818787878787613312565b806001600160a01b03811661273f5760405162461bcd60e51b8152600401610a15906143d0565b6127498383611520565b156127965760405162461bcd60e51b815260206004820152601c60248201527f524d3a204163636f756e7420616c72656164792068617320726f6c65000000006044820152606401610a15565b610e7d838361346c565b5f838152600760205260409020546127fa5760405162461bcd60e51b815260206004820152601c60248201527f5358313135353a20546f6b656e20646f6573206e6f74206578697374000000006044820152606401610a15565b5f838152600660205260409020612812828483614827565b50827f9ea5b4495612117a7e840b7cdbb69ea0f5c3f81c7909528a2c2c159ac033f057338484604051612847939291906148e0565b60405180910390a2505050565b60015460ff161561289a5760405162461bcd60e51b815260206004820152601060248201526f14185d5cd8589b194e881c185d5cd95960821b6044820152606401610a15565b565b600880546128a990614398565b1590506128ee5760405162461bcd60e51b815260206004820152601360248201527214d60c4c4d4d4e88105b1c9958591e481cd95d606a1b6044820152606401610a15565b60086128fb828483614827565b507fce55da3921a9df634c1e7bf4fa6500ab2d470548a278e41544c18d3c26d007f533838360405161292f939291906148e0565b60405180910390a15050565b6005612948828483614827565b507f42de73dd342611a796664697ea197648e09b178c872501422308ad363fc3926d33838360405161292f939291906148e0565b816001600160a01b0316836001600160a01b0316036129ef5760405162461bcd60e51b815260206004820152602960248201527f455243313135353a2073657474696e6720617070726f76616c20737461747573604482015268103337b91039b2b63360b91b6064820152608401610a15565b6001600160a01b038381165f81815260036020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b612a636134f1565b6001805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33612521565b5f8511612ae35760405162461bcd60e51b815260206004820152601860248201527f5358313135353a20496e76616c6964207175616e7469747900000000000000006044820152606401610a15565b600c545f818152600960205260409020612afe858783614827565b505f818152600760205260408120879055600c805491612b1d836145f4565b9190505550611a1e87828886868080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061353a92505050565b6001600160a01b038416612b895760405162461bcd60e51b8152600401610a159061471d565b335f612b9485613650565b90505f612ba085613650565b9050612bb0838989858589613033565b5f8681526002602090815260408083206001600160a01b038c16845290915290205485811015612bf25760405162461bcd60e51b8152600401610a1590614762565b5f8781526002602090815260408083206001600160a01b038d8116855292528083208985039055908a16825281208054889290612c309084906147ac565b909155505060408051888152602081018890526001600160a01b03808b16928c821692918816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4612c90848a8a8a8a8a613699565b505050505050505050565b6001600160a01b03811615612cd1576001600160a01b0381163b612cd15760405162461bcd60e51b8152600401610a1590614904565b600f80546001600160a01b0319166001600160a01b0383169081179091556040805133815260208101929092527f4c4371fcfec2e9af5c194bcf0893281fc94f69a1dc17c34c79ad3def8af7ca4a9101612472565b6001600160a01b03811615612d5c576001600160a01b0381163b612d5c5760405162461bcd60e51b8152600401610a1590614904565b5f828152600e602090815260409182902080546001600160a01b0319166001600160a01b03851690811790915582513381529182015283917f4c35f523ae91414553787ae645c99bc908c9ffdb8967b36a675d0cd5a01d8251910160405180910390a25050565b5f6001600160e01b03198216637965db0b60e01b1480610a425750610a4282613753565b612df18282611520565b610bab57612dfe8161375d565b612e0983602061376f565b604051602001612e1a929190614949565b60408051601f198184030181529082905262461bcd60e51b8252610a1591600401613a5d565b612e4a8282611520565b15610bab575f828152600d602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b038316612f085760405162461bcd60e51b815260206004820152602360248201527f455243313135353a206275726e2066726f6d20746865207a65726f206164647260448201526265737360e81b6064820152608401610a15565b335f612f1384613650565b90505f612f1f84613650565b9050612f3d83875f858560405180602001604052805f815250613033565b5f8581526002602090815260408083206001600160a01b038a16845290915290205484811015612fbb5760405162461bcd60e51b8152602060048201526024808201527f455243313135353a206275726e20616d6f756e7420657863656564732062616c604482015263616e636560e01b6064820152608401610a15565b5f8681526002602090815260408083206001600160a01b038b81168086529184528285208a8703905582518b81529384018a90529092908816917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a460408051602081019091525f9052611a1e565b5f61304b5f80516020614aee83398151915233611520565b156130565750611308565b61305e612854565b61306786611fdd565b80613076575061307685611fdd565b156130935760405162461bcd60e51b8152600401610a1590614597565b61309c866117d8565b806130ab57506130ab856117d8565b1561311e5760405162461bcd60e51b815260206004820152603e60248201527f5358313135353a2053656e646572206f7220726563656976657220617265206760448201527f7265796c69737465642e2055736520726571756573745472616e7366657200006064820152608401610a15565b5f61312887610efc565b90505f61313487610efc565b90508180156131405750805b1561314d57505050611308565b85516001600160a01b03881615613306578215801561316a575081155b156131f5575f93505b808410156131f0576131a089898987815181106131925761319261453d565b6020026020010151886114f9565b6131e55760405162461bcd60e51b815260206004820152601660248201527514d60c4c4d4d4e88139bdd08185d5d1a1bdc9a5e995960521b6044820152606401610a15565b600190930192613173565b613306565b821561328d575f93505b808410156131f05761322b8888868151811061321d5761321d61453d565b6020026020010151876120f0565b6132825760405162461bcd60e51b815260206004820152602260248201527f5358313135353a207265636569766572206973206e6f7420617574686f72697a604482015261195960f21b6064820152608401610a15565b6001909301926131ff565b5f93505b80841015613306576132af8988868151811061321d5761321d61453d565b6132fb5760405162461bcd60e51b815260206004820181905260248201527f5358313135353a2073656e646572206973206e6f7420617574686f72697a65646044820152606401610a15565b600190930192613291565b50505050505050505050565b6001600160a01b0384163b156113085760405163bc197c8160e01b81526001600160a01b0385169063bc197c819061335690899089908890889088906004016149bd565b6020604051808303815f875af1925050508015613390575060408051601f3d908101601f1916820190925261338d91810190614a1a565b60015b61343c5761339c614669565b806308c379a0036133d557506133b0614682565b806133bb57506133d7565b8060405162461bcd60e51b8152600401610a159190613a5d565b505b60405162461bcd60e51b815260206004820152603460248201527f455243313135353a207472616e7366657220746f206e6f6e2d455243313135356044820152732932b1b2b4bb32b91034b6b83632b6b2b73a32b960611b6064820152608401610a15565b6001600160e01b0319811663bc197c8160e01b14611a1e5760405162461bcd60e51b8152600401610a1590614a35565b6134768282611520565b610bab575f828152600d602090815260408083206001600160a01b03851684529091529020805460ff191660011790556134ad3390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60015460ff1661289a5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610a15565b6001600160a01b03841661359a5760405162461bcd60e51b815260206004820152602160248201527f455243313135353a206d696e7420746f20746865207a65726f206164647265736044820152607360f81b6064820152608401610a15565b335f6135a585613650565b90505f6135b185613650565b90506135c1835f89858589613033565b5f8681526002602090815260408083206001600160a01b038b168452909152812080548792906135f29084906147ac565b909155505060408051878152602081018790526001600160a01b03808a16925f92918716917fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62910160405180910390a4611a1e835f89898989613699565b6040805160018082528183019092526060915f91906020808301908036833701905050905082815f815181106136885761368861453d565b602090810291909101015292915050565b6001600160a01b0384163b156113085760405163f23a6e6160e01b81526001600160a01b0385169063f23a6e61906136dd9089908990889088908890600401614a7d565b6020604051808303815f875af1925050508015613717575060408051601f3d908101601f1916820190925261371491810190614a1a565b60015b6137235761339c614669565b6001600160e01b0319811663f23a6e6160e01b14611a1e5760405162461bcd60e51b8152600401610a1590614a35565b5f610a4282613904565b6060610a426001600160a01b03831660145b60605f61377d836002614ac1565b6137889060026147ac565b6001600160401b0381111561379f5761379f613b45565b6040519080825280601f01601f1916602001820160405280156137c9576020820181803683370190505b509050600360fc1b815f815181106137e3576137e361453d565b60200101906001600160f81b03191690815f1a905350600f60fb1b816001815181106138115761381161453d565b60200101906001600160f81b03191690815f1a9053505f613833846002614ac1565b61383e9060016147ac565b90505b60018111156138b5576f181899199a1a9b1b9c1cb0b131b232b360811b85600f16601081106138725761387261453d565b1a60f81b8282815181106138885761388861453d565b60200101906001600160f81b03191690815f1a90535060049490941c936138ae81614ad8565b9050613841565b5083156121dc5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610a15565b5f6001600160e01b03198216636cdb3d1360e11b148061393457506001600160e01b031982166303a24d0760e21b145b80610a4257506301ffc9a760e01b6001600160e01b0319831614610a42565b50805461395f90614398565b5f825580601f1061396e575050565b601f0160209004905f5260205f2090810190610d6591905b80821115613999575f8155600101613986565b5090565b80356001600160a01b03811681146139b3575f80fd5b919050565b5f80604083850312156139c9575f80fd5b6139d28361399d565b946020939093013593505050565b6001600160e01b031981168114610d65575f80fd5b5f60208284031215613a05575f80fd5b81356121dc816139e0565b5f5b83811015613a2a578181015183820152602001613a12565b50505f910152565b5f8151808452613a49816020860160208601613a10565b601f01601f19169290920160200192915050565b602081525f6121dc6020830184613a32565b5f60208284031215613a7f575f80fd5b5035919050565b5f60208284031215613a96575f80fd5b6121dc8261399d565b5f8083601f840112613aaf575f80fd5b5081356001600160401b03811115613ac5575f80fd5b602083019150836020828501011115613adc575f80fd5b9250929050565b5f805f805f60808688031215613af7575f80fd5b613b008661399d565b9450602086013593506040860135925060608601356001600160401b03811115613b28575f80fd5b613b3488828901613a9f565b969995985093965092949392505050565b634e487b7160e01b5f52604160045260245ffd5b601f8201601f191681016001600160401b0381118282101715613b7e57613b7e613b45565b6040525050565b5f6001600160401b03821115613b9d57613b9d613b45565b5060051b60200190565b5f82601f830112613bb6575f80fd5b81356020613bc382613b85565b604051613bd08282613b59565b80915083815260208101915060208460051b870101935086841115613bf3575f80fd5b602086015b84811015613c0f5780358352918301918301613bf8565b509695505050505050565b5f82601f830112613c29575f80fd5b81356001600160401b03811115613c4257613c42613b45565b604051613c59601f8301601f191660200182613b59565b818152846020838601011115613c6d575f80fd5b816020850160208301375f918101602001919091529392505050565b5f805f805f60a08688031215613c9d575f80fd5b613ca68661399d565b9450613cb46020870161399d565b935060408601356001600160401b0380821115613ccf575f80fd5b613cdb89838a01613ba7565b94506060880135915080821115613cf0575f80fd5b613cfc89838a01613ba7565b93506080880135915080821115613d11575f80fd5b50613d1e88828901613c1a565b9150509295509295909350565b5f8060408385031215613d3c575f80fd5b82359150613d4c6020840161399d565b90509250929050565b5f8060408385031215613d66575f80fd5b82356001600160401b0380821115613d7c575f80fd5b818501915085601f830112613d8f575f80fd5b81356020613d9c82613b85565b604051613da98282613b59565b83815260059390931b8501820192828101915089841115613dc8575f80fd5b948201945b83861015613ded57613dde8661399d565b82529482019490820190613dcd565b96505086013592505080821115613e02575f80fd5b50613e0f85828601613ba7565b9150509250929050565b5f815180845260208085019450602084015f5b83811015613e4857815187529582019590820190600101613e2c565b509495945050505050565b602081525f6121dc6020830184613e19565b5f8083601f840112613e75575f80fd5b5081356001600160401b03811115613e8b575f80fd5b6020830191508360208260051b8501011115613adc575f80fd5b5f8060208385031215613eb6575f80fd5b82356001600160401b03811115613ecb575f80fd5b613ed785828601613e65565b90969095509350505050565b5f805f60408486031215613ef5575f80fd5b8335925060208401356001600160401b03811115613f11575f80fd5b613f1d86828701613a9f565b9497909650939450505050565b5f805f8060808587031215613f3d575f80fd5b613f468561399d565b9350613f546020860161399d565b92506040850135915060608501356001600160401b03811115613f75575f80fd5b613f8187828801613c1a565b91505092959194509250565b5f805f60608486031215613f9f575f80fd5b613fa88461399d565b95602085013595506040909401359392505050565b5f8060208385031215613fce575f80fd5b82356001600160401b03811115613fe3575f80fd5b613ed785828601613a9f565b8015158114610d65575f80fd5b5f806040838503121561400d575f80fd5b6140168361399d565b9150602083013561402681613fef565b809150509250929050565b5f8060408385031215614042575f80fd5b50508035926020909101359150565b602080825282518282018190525f9190848201906040850190845b818110156140915783516001600160a01b03168352928401929184019160010161406c565b50909695505050505050565b5f805f805f80608087890312156140b2575f80fd5b6140bb8761399d565b95506020870135945060408701356001600160401b03808211156140dd575f80fd5b6140e98a838b01613a9f565b90965094506060890135915080821115614101575f80fd5b5061410e89828a01613a9f565b979a9699509497509295939492505050565b5f805f8060808587031215614133575f80fd5b61413c8561399d565b935061414a6020860161399d565b93969395505050506040820135916060013590565b5f805f805f805f806080898b031215614176575f80fd5b88356001600160401b038082111561418c575f80fd5b6141988c838d01613e65565b909a50985060208b01359150808211156141b0575f80fd5b6141bc8c838d01613e65565b909850965060408b01359150808211156141d4575f80fd5b6141e08c838d01613e65565b909650945060608b01359150808211156141f8575f80fd5b506142058b828c01613e65565b999c989b5096995094979396929594505050565b5f805f805f805f806080898b031215614230575f80fd5b88356001600160401b0380821115614246575f80fd5b6142528c838d01613e65565b909a50985060208b013591508082111561426a575f80fd5b6142768c838d01613e65565b909850965060408b013591508082111561428e575f80fd5b61429a8c838d01613e65565b909650945060608b01359150808211156142b2575f80fd5b506142058b828c01613a9f565b5f80604083850312156142d0575f80fd5b6142d98361399d565b9150613d4c6020840161399d565b5f805f606084860312156142f9575f80fd5b6143028461399d565b92506020840135915060408401356001600160401b03811115614323575f80fd5b61432f86828701613c1a565b9150509250925092565b5f805f805f60a0868803121561434d575f80fd5b6143568661399d565b94506143646020870161399d565b9350604086013592506060860135915060808601356001600160401b0381111561438c575f80fd5b613d1e88828901613c1a565b600181811c908216806143ac57607f821691505b6020821081036143ca57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252601d908201527f5061737365642061646472657373203d207a65726f2061646472657373000000604082015260600190565b6020808252601a908201527f41433a204163636f756e7420616c72656164792066726f7a656e000000000000604082015260600190565b6020808252601f908201527f41433a204163636f756e7420616c72656164792077686974656c697374656400604082015260600190565b6020808252601e908201527f41433a204163636f756e7420616c726561647920677265796c69737465640000604082015260600190565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b602081525f6144e76020830184866144ac565b949350505050565b6020808252602e908201527f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60408201526d195c881bdc88185c1c1c9bdd995960921b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b60208082526026908201527f414c3a2041727261792073697a65206d757374206265203c3d206d6178417272604082015265617953697a6560d01b606082015260800190565b60208082526029908201527f5358313135353a2053656e646572206f72207265636569766572206163636f75604082015268373a10333937bd32b760b91b606082015260800190565b634e487b7160e01b5f52601160045260245ffd5b5f60018201614605576146056145e0565b5060010190565b5f808335601e19843603018112614621575f80fd5b8301803591506001600160401b0382111561463a575f80fd5b602001915036819003821315613adc575f80fd5b5f6020828403121561465e575f80fd5b81516121dc81613fef565b5f60033d111561467f5760045f803e505f5160e01c5b90565b5f60443d101561468f5790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156146be57505050505090565b82850191508151818111156146d65750505050505090565b843d87010160208285010111156146f05750505050505090565b6146ff60208286010187613b59565b509095945050505050565b81810381811115610a4257610a426145e0565b60208082526025908201527f455243313135353a207472616e7366657220746f20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252602a908201527f455243313135353a20696e73756666696369656e742062616c616e636520666f60408201526939103a3930b739b332b960b11b606082015260800190565b80820180821115610a4257610a426145e0565b604081525f6147d16040830185613e19565b82810360208401526115178185613e19565b601f821115610e7d57805f5260205f20601f840160051c810160208510156148085750805b601f840160051c820191505b81811015610dad575f8155600101614814565b6001600160401b0383111561483e5761483e613b45565b6148528361484c8354614398565b836147e3565b5f601f841160018114614883575f851561486c5750838201355b5f19600387901b1c1916600186901b178355610dad565b5f83815260208120601f198716915b828110156148b25786850135825560209485019460019092019101614892565b50868210156148ce575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160a01b03841681526040602082018190525f9061151790830184866144ac565b60208082526025908201527f414d3a204e6f7420612076616c6964206175746820636f6e7472616374206164604082015264647265737360d81b606082015260800190565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081525f8351614980816017850160208801613a10565b7001034b99036b4b9b9b4b733903937b6329607d1b60179184019182015283516149b1816028840160208801613a10565b01602801949350505050565b6001600160a01b0386811682528516602082015260a0604082018190525f906149e890830186613e19565b82810360608401526149fa8186613e19565b90508281036080840152614a0e8185613a32565b98975050505050505050565b5f60208284031215614a2a575f80fd5b81516121dc816139e0565b60208082526028908201527f455243313135353a204552433131353552656365697665722072656a656374656040820152676420746f6b656e7360c01b606082015260800190565b6001600160a01b03868116825285166020820152604081018490526060810183905260a0608082018190525f90614ab690830184613a32565b979650505050505050565b8082028115828204841417610a4257610a426145e0565b5f81614ae657614ae66145e0565b505f19019056fe76afa8a5929fef1b4c03674b2152ae5aaad1d974b8a4021c59477bcc846ccc1ed0d9c70b33dd60afacb55d8ff719509eca8de63778217873fac25c4d1f90353d8c93699475be54d1d73bbbabee1213ba5867c90fcebb8234a4274f68c8da4977a26469706673582212209f229d9e4b308e2bb9458a1043e50ad4c8c6362684e584434b16cffcb1abde1964736f6c634300081800335061737365642061646472657373203d207a65726f206164647265737300000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e00000000000000000000000001dee90df6cdd8a7da3510fb5b0305efe572396410000000000000000000000002cb863237ec1e7cc017729cb7102fc00a0b5cd450000000000000000000000002cb863237ec1e7cc017729cb7102fc00a0b5cd45000000000000000000000000000000000000000000000000000000000000000a78476f6c642031204b6700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000778476f6c644b6700000000000000000000000000000000000000000000000000