[ { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "signer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "AddedManager", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "signer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "AddedTo725StoreList", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "signer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "AddedToCreateERC20List", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "signer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "AddedToMetadataList", "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": true, "internalType": "address", "name": "signer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "CleanedPermissions", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "contractAddress", "type": "address" } ], "name": "ContractCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "key", "type": "bytes32" }, { "indexed": false, "internalType": "bytes", "name": "value", "type": "bytes" } ], "name": "DataChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "uint256", "name": "_operation", "type": "uint256" }, { "indexed": true, "internalType": "address", "name": "_to", "type": "address" }, { "indexed": true, "internalType": "uint256", "name": "_value", "type": "uint256" }, { "indexed": false, "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "Executed", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "createdBy", "type": "address" }, { "indexed": false, "internalType": "uint8", "name": "state", "type": "uint8" }, { "indexed": false, "internalType": "string", "name": "decryptorUrl", "type": "string" }, { "indexed": false, "internalType": "bytes", "name": "flags", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" }, { "indexed": false, "internalType": "bytes32", "name": "metaDataHash", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "MetadataCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "updatedBy", "type": "address" }, { "indexed": false, "internalType": "uint8", "name": "state", "type": "uint8" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "MetadataState", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "updatedBy", "type": "address" }, { "indexed": false, "internalType": "uint8", "name": "state", "type": "uint8" }, { "indexed": false, "internalType": "string", "name": "decryptorUrl", "type": "string" }, { "indexed": false, "internalType": "bytes", "name": "flags", "type": "bytes" }, { "indexed": false, "internalType": "bytes", "name": "data", "type": "bytes" }, { "indexed": false, "internalType": "bytes32", "name": "metaDataHash", "type": "bytes32" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "MetadataUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "validator", "type": "address" }, { "indexed": false, "internalType": "bytes32", "name": "metaDataHash", "type": "bytes32" }, { "indexed": false, "internalType": "uint8", "name": "v", "type": "uint8" }, { "indexed": false, "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "indexed": false, "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "MetadataValidated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "signer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "RemovedFrom725StoreList", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "signer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "RemovedFromCreateERC20List", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "signer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "RemovedFromMetadataList", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "user", "type": "address" }, { "indexed": true, "internalType": "address", "name": "signer", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "RemovedManager", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newTokenAddress", "type": "address" }, { "indexed": true, "internalType": "address", "name": "templateAddress", "type": "address" }, { "indexed": false, "internalType": "string", "name": "name", "type": "string" }, { "indexed": false, "internalType": "string", "name": "symbol", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "cap", "type": "uint256" }, { "indexed": false, "internalType": "address", "name": "creator", "type": "address" } ], "name": "TokenCreated", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "updatedBy", "type": "address" }, { "indexed": false, "internalType": "string", "name": "tokenURI", "type": "string" }, { "indexed": false, "internalType": "uint256", "name": "tokenID", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "timestamp", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "blockNumber", "type": "uint256" } ], "name": "TokenURIUpdate", "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" }, { "stateMutability": "payable", "type": "fallback" }, { "inputs": [ { "internalType": "address", "name": "_managerAddress", "type": "address" } ], "name": "addManager", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address[]", "name": "addresses", "type": "address[]" }, { "internalType": "enum ERC721RolesAddress.RolesType[]", "name": "roles", "type": "uint8[]" } ], "name": "addMultipleUsersToRoles", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_allowedAddress", "type": "address" } ], "name": "addTo725StoreList", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_allowedAddress", "type": "address" } ], "name": "addToCreateERC20List", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_allowedAddress", "type": "address" } ], "name": "addToMetadataList", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "approve", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "auth", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "baseURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "cleanPermissions", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_templateIndex", "type": "uint256" }, { "internalType": "string[]", "name": "strings", "type": "string[]" }, { "internalType": "address[]", "name": "addresses", "type": "address[]" }, { "internalType": "uint256[]", "name": "uints", "type": "uint256[]" }, { "internalType": "bytes[]", "name": "bytess", "type": "bytes[]" } ], "name": "createERC20", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_operation", "type": "uint256" }, { "internalType": "address", "name": "_to", "type": "address" }, { "internalType": "uint256", "name": "_value", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "executeCall", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_key", "type": "bytes32" } ], "name": "getData", "outputs": [ { "internalType": "bytes", "name": "_value", "type": "bytes" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getId", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [], "name": "getMetaData", "outputs": [ { "internalType": "string", "name": "", "type": "string" }, { "internalType": "string", "name": "", "type": "string" }, { "internalType": "uint8", "name": "", "type": "uint8" }, { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "getPermissions", "outputs": [ { "components": [ { "internalType": "bool", "name": "manager", "type": "bool" }, { "internalType": "bool", "name": "deployERC20", "type": "bool" }, { "internalType": "bool", "name": "updateMetadata", "type": "bool" }, { "internalType": "bool", "name": "store", "type": "bool" } ], "internalType": "struct ERC721RolesAddress.Roles", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getTokensList", "outputs": [ { "internalType": "address[]", "name": "", "type": "address[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "hasMetaData", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "address", "name": "tokenFactory", "type": "address" }, { "internalType": "address", "name": "additionalERC20Deployer", "type": "address" }, { "internalType": "address", "name": "additionalMetaDataUpdater", "type": "address" }, { "internalType": "string", "name": "tokenURI", "type": "string" }, { "internalType": "bool", "name": "transferable_", "type": "bool" } ], "name": "initialize", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "operator", "type": "address" } ], "name": "isApprovedForAll", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "datatoken", "type": "address" } ], "name": "isDeployed", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "isERC20Deployer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "isInitialized", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "metaDataDecryptorAddress", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "metaDataDecryptorUrl", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "metaDataState", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": "_allowedAddress", "type": "address" } ], "name": "removeFrom725StoreList", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_allowedAddress", "type": "address" } ], "name": "removeFromCreateERC20List", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_allowedAddress", "type": "address" } ], "name": "removeFromMetadataList", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_managerAddress", "type": "address" } ], "name": "removeManager", "outputs": [], "stateMutability": "nonpayable", "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": "operator", "type": "address" }, { "internalType": "bool", "name": "approved", "type": "bool" } ], "name": "setApprovalForAll", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "_baseURI", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_key", "type": "bytes32" }, { "internalType": "bytes", "name": "_value", "type": "bytes" } ], "name": "setDataERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "_metaDataState", "type": "uint8" }, { "internalType": "string", "name": "_metaDataDecryptorUrl", "type": "string" }, { "internalType": "string", "name": "_metaDataDecryptorAddress", "type": "string" }, { "internalType": "bytes", "name": "flags", "type": "bytes" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes32", "name": "_metaDataHash", "type": "bytes32" }, { "components": [ { "internalType": "address", "name": "validatorAddress", "type": "address" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "internalType": "struct ERC721Template.metaDataProof[]", "name": "_metadataProofs", "type": "tuple[]" } ], "name": "setMetaData", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint8", "name": "metaDataState", "type": "uint8" }, { "internalType": "string", "name": "metaDataDecryptorUrl", "type": "string" }, { "internalType": "string", "name": "metaDataDecryptorAddress", "type": "string" }, { "internalType": "bytes", "name": "flags", "type": "bytes" }, { "internalType": "bytes", "name": "data", "type": "bytes" }, { "internalType": "bytes32", "name": "metaDataHash", "type": "bytes32" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "tokenURI", "type": "string" }, { "components": [ { "internalType": "address", "name": "validatorAddress", "type": "address" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "internalType": "struct ERC721Template.metaDataProof[]", "name": "metadataProofs", "type": "tuple[]" } ], "internalType": "struct ERC721Template.metaDataAndTokenURI", "name": "_metaDataAndTokenURI", "type": "tuple" } ], "name": "setMetaDataAndTokenURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "_metaDataState", "type": "uint8" } ], "name": "setMetaDataState", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "_key", "type": "bytes32" }, { "internalType": "bytes", "name": "_value", "type": "bytes" } ], "name": "setNewData", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "string", "name": "tokenURI", "type": "string" } ], "name": "setTokenURI", "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": "index", "type": "uint256" } ], "name": "tokenByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "tokenOfOwnerByIndex", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "tokenURI", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "transferable", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "withdrawETH", "outputs": [], "stateMutability": "payable", "type": "function" }, { "stateMutability": "payable", "type": "receive" } ]
60806040523480156200001157600080fd5b50604080518082018252600881526754656d706c61746560c01b6020808301919091528251808401909352600e83526d15195b5c1b185d1954de5b589bdb60921b9083015290620000696301ffc9a760e01b620000d1565b81516200007e9060019060208501906200018d565b508051620000949060029060208401906200018d565b506200009f62000155565b50620000b49050632260147f60e11b620000d1565b620000c6632bd57b7360e01b620000d1565b6001600d5562000270565b6001600160e01b03198082161415620001305760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b620001676380ac58cd60e01b620000d1565b62000179635b5e139f60e01b620000d1565b6200018b63780e9d6360e01b620000d1565b565b8280546200019b9062000233565b90600052602060002090601f016020900481019282620001bf57600085556200020a565b82601f10620001da57805160ff19168380011785556200020a565b828001600101855582156200020a579182015b828111156200020a578251825591602001919060010190620001ed565b50620002189291506200021c565b5090565b5b808211156200021857600081556001016200021d565b600181811c908216806200024857607f821691505b602082108114156200026a57634e487b7160e01b600052602260045260246000fd5b50919050565b61540080620002806000396000f3fe6080604052600436106102c75760003560e01c80634f6ccce71161017e578063a22cb465116100d3578063ccd7d4761161008f578063e086e5ec1161006c578063e086e5ec146109a0578063e38d7cad146109a8578063e985e9c5146109c8578063fe1ec88014610a1157005b8063ccd7d47614610942578063d2786ba41461095c578063d8053ad31461098157005b8063a22cb4651461088f578063ac18de43146108af578063b0c41ead146108cf578063c2d60e6e146108ef578063c55f81261461090f578063c87b56dd1461092257005b80636c0360eb1161013a57806390184b021161011757806390184b02146107e957806392ff0d311461082257806395d89b411461083c57806396fb3eaf1461085157005b80636c0360eb1461079f57806370a08231146107b457806382cf129d146107d457005b80634f6ccce7146106dd57806354f6127f146106fd57806355f804b31461071d5780635d1ca6311461073d5780636352211e1461075f57806367530a611461077f57005b80631a1d51e811610234578063392e53cd116101f0578063466bca02116101cd578063466bca0214610666578063467c97f5146106885780634a63740a146106a85780634f189cb2146106c857005b8063392e53cd1461060e57806342842e0e14610626578063431053ac1461064657005b80631a1d51e81461054e5780631aa3adf91461056e57806323b872dd1461058e578063273e06b3146105ae5780632d06177a146105ce5780632f745c59146105ee57005b806310c558bf1161028357806310c558bf146103ce578063160a7925146103ee578063162094c4146104cb57806318160ddd146104eb57806319a18a851461050e57806319c186e51461052e57005b806301ffc9a7146102d057806306fdde031461031f578063081812fc14610341578063095ea7b3146103795780630e05662e146103995780630e57c7e8146103ae57005b366102ce57005b005b3480156102dc57600080fd5b5061030a6102eb3660046142b6565b6001600160e01b03191660009081526020819052604090205460ff1690565b60405190151581526020015b60405180910390f35b34801561032b57600080fd5b50610334610a31565b604051610316919061432b565b34801561034d57600080fd5b5061036161035c36600461433e565b610ac3565b6040516001600160a01b039091168152602001610316565b34801561038557600080fd5b506102ce61039436600461437c565b610b50565b3480156103a557600080fd5b50610334610c66565b3480156103ba57600080fd5b506102ce6103c93660046143e9565b610cf4565b3480156103da57600080fd5b506102ce6103e9366004614434565b610d69565b3480156103fa57600080fd5b50610490610409366004614434565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152600a60209081526040918290208251608081018452905460ff808216151583526101008204811615159383019390935262010000810483161515938201939093526301000000909204161515606082015290565b604051610316919081511515815260208083015115159082015260408083015115159082015260609182015115159181019190915260800190565b3480156104d757600080fd5b506102ce6104e6366004614506565b610da9565b3480156104f757600080fd5b50610500610e37565b604051908152602001610316565b34801561051a57600080fd5b506102ce61052936600461454c565b610e48565b34801561053a57600080fd5b506102ce610549366004614434565b610f79565b34801561055a57600080fd5b5061030a610569366004614597565b611038565b34801561057a57600080fd5b506102ce61058936600461479b565b61119e565b34801561059a57600080fd5b506102ce6105a93660046148a2565b6111f3565b3480156105ba57600080fd5b506102ce6105c9366004614434565b6112ea565b3480156105da57600080fd5b506102ce6105e9366004614434565b611435565b3480156105fa57600080fd5b5061050061060936600461437c565b611478565b34801561061a57600080fd5b5060105460ff1661030a565b34801561063257600080fd5b506102ce6106413660046148a2565b6114a3565b34801561065257600080fd5b506102ce610661366004614434565b61159f565b34801561067257600080fd5b5061067b6116d4565b60405161031691906148e3565b34801561069457600080fd5b506102ce6106a3366004614930565b611735565b3480156106b457600080fd5b506102ce6106c3366004614434565b6117c0565b3480156106d457600080fd5b506102ce6117fd565b3480156106e957600080fd5b506105006106f836600461433e565b611853565b34801561070957600080fd5b5061033461071836600461433e565b611869565b34801561072957600080fd5b506102ce61073836600461494b565b61190b565b34801561074957600080fd5b5060015b60405160ff9091168152602001610316565b34801561076b57600080fd5b5061036161077a36600461433e565b611958565b34801561078b57600080fd5b506102ce61079a3660046143e9565b611980565b3480156107ab57600080fd5b506103346119f0565b3480156107c057600080fd5b506105006107cf366004614434565b6119fa565b3480156107e057600080fd5b50610334611a86565b3480156107f557600080fd5b5061030a610804366004614434565b6001600160a01b031660009081526015602052604090205460ff1690565b34801561082e57600080fd5b5060165461030a9060ff1681565b34801561084857600080fd5b50610334611a93565b34801561085d57600080fd5b5061030a61086c366004614434565b6001600160a01b03166000908152600a6020526040902054610100900460ff1690565b34801561089b57600080fd5b506102ce6108aa36600461497f565b611aa2565b3480156108bb57600080fd5b506102ce6108ca366004614434565b611b60565b3480156108db57600080fd5b506103616108ea36600461433e565b611ba3565b3480156108fb57600080fd5b506102ce61090a366004614a1d565b611bcd565b6102ce61091d366004614ad4565b611fd5565b34801561092e57600080fd5b5061033461093d36600461433e565b61201d565b34801561094e57600080fd5b5060135461074d9060ff1681565b34801561096857600080fd5b5061097161216b565b6040516103169493929190614b3d565b34801561098d57600080fd5b5060105461030a90610100900460ff1681565b6102ce6122bb565b3480156109b457600080fd5b506103616109c3366004614bc2565b6122fd565b3480156109d457600080fd5b5061030a6109e3366004614c91565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205460ff1690565b348015610a1d57600080fd5b506102ce610a2c366004614434565b612482565b6060600e8054610a4090614cca565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6c90614cca565b8015610ab95780601f10610a8e57610100808354040283529160200191610ab9565b820191906000526020600020905b815481529060010190602001808311610a9c57829003601f168201915b5050505050905090565b6000610ace826125b2565b610b345760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600760205260409020546001600160a01b031690565b6000610b5b82611958565b9050806001600160a01b0316836001600160a01b03161415610bc95760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610b2b565b336001600160a01b0382161480610be55750610be581336109e3565b610c575760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610b2b565b610c6183836125bf565b505050565b60128054610c7390614cca565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9f90614cca565b8015610cec5780601f10610cc157610100808354040283529160200191610cec565b820191906000526020600020905b815481529060010190602001808311610ccf57829003601f168201915b505050505081565b3360009081526015602052604090205460ff16610d5e5760405162461bcd60e51b815260206004820152602260248201527f45524337323154656d706c6174653a204e4f5420455243323020436f6e74726160448201526118dd60f21b6064820152608401610b2b565b610c6183838361262d565b336000908152600a602052604090205460ff161515600114610d9d5760405162461bcd60e51b8152600401610b2b90614d05565b610da681612686565b50565b610db282611958565b6001600160a01b0316336001600160a01b031614610de25760405162461bcd60e51b8152600401610b2b90614d3c565b610dec8282612707565b336001600160a01b03167f6de6cd3982065cbd31e789e3109106f4d76d1c8a46e85262045cf947fb3fd4ed82844243604051610e2b9493929190614d73565b60405180910390a25050565b6000610e436005612792565b905090565b336000908152600a602052604090205462010000900460ff16610e7d5760405162461bcd60e51b8152600401610b2b90614da2565b610f2a610e8d6020830183614930565b610e9a6020840184614de3565b610ea76040860186614de3565b610eb46060880188614de3565b610ec160808a018a614de3565b60a08b0135610ed46101008d018d614e29565b808060200260200160405190810160405280939291908181526020016000905b82821015610f2057610f1160808302860136819003810190614e72565b81526020019060010190610ef4565b505050505061279c565b610da660c0820135610f3f60e0840184614de3565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610da992505050565b336000908152600a602052604090205460ff161515600114610fad5760405162461bcd60e51b8152600401610b2b90614d05565b6001600160a01b03811615610da6576001600160a01b0381166000908152600a60205260409020805463ff00000019166301000000178155610fee82612ba5565b6040805142815243602082015233916001600160a01b038516917feb09276310ed110a7e565d64966d0ff68a47112d2dd5eeb6cbd7451836ce35ee91015b60405180910390a35050565b60105460009060ff16156110a95760405162461bcd60e51b815260206004820152603260248201527f45524337323154656d706c6174653a20746f6b656e20696e7374616e636520616044820152711b1c9958591e481a5b9a5d1a585b1a5e995960721b6064820152608401610b2b565b6001600160a01b038516156110c1576110c185612c5c565b6001600160a01b038416156110d9576110d984612686565b60006111658c8c8c8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f820116905080830192505050505050508b8b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508a9150899050612ccc565b905061116f612e1c565b61117f632260147f60e11b612e48565b61118f632bd57b7360e01b612e48565b9b9a5050505050505050505050565b336000908152600a602052604090205462010000900460ff166111d35760405162461bcd60e51b8152600401610b2b90614da2565b6111e68b8b8b8b8b8b8b8b8b8b8b61279c565b5050505050505050505050565b60165460ff166112155760405162461bcd60e51b8152600401610b2b90614e8e565b806001146112355760405162461bcd60e51b8152600401610b2b90614ed1565b61129f61129a601480548060200260200160405190810160405280929190818152602001828054801561129157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611273575b50505050505190565b612ec7565b6112a7612f58565b6112b082613009565b6001600160a01b0382166000908152600a60205260409020805463ffffff00191663010101001781556112e4848484613086565b50505050565b336000908152600a602052604090205460ff1615156001148061133b5750336001600160a01b03821614801561133b5750336000908152600a60205260409020546301000000900460ff1615156001145b156113b8576001600160a01b0381166000818152600a602052604090819020805463ff000000191681559051909133917fc929b18b08ffea86a1f95e29384dbe8968f2fcbd70cfd735df3aba1cc548cbf3906113a39042904390918252602082015260400190565b60405180910390a36113b4826130c7565b5050565b60405162461bcd60e51b815260206004820152604660248201527f455243373231526f6c6573416464726573733a204e6f7420656e6f756768207060448201527f65726d697373696f6e7320746f2072656d6f76652066726f6d2037323553746f6064820152651c99531a5cdd60d21b608482015260a401610b2b565b61143f6001611958565b6001600160a01b0316336001600160a01b03161461146f5760405162461bcd60e51b8152600401610b2b90614d3c565b610da681613009565b6001600160a01b038216600090815260046020526040812061149a908361323e565b90505b92915050565b60165460ff166114c55760405162461bcd60e51b8152600401610b2b90614e8e565b806001146114e55760405162461bcd60e51b8152600401610b2b90614ed1565b61154861129a6014805480602002602001604051908101604052809291908181526020018280548015611291576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116112735750505050505190565b611550612f58565b61155982613009565b6001600160a01b0382166000908152600a60209081526040808320805463ffffff001916630101010017815581519283019091529181526112e49085908590859061324a565b336000908152600a602052604090205460ff161515600114806115ef5750336001600160a01b0382161480156115ef5750336000908152600a602052604090205462010000900460ff1615156001145b15611656576001600160a01b0381166000818152600a602052604090819020805462ff0000191681559051909133917f9b41e1311fa819e825bc77fa2568492112e15ea92d173f3f8ee1c8ec3c1c562b906113a39042904390918252602082015260400190565b60405162461bcd60e51b815260206004820152604760248201527f455243373231526f6c6573416464726573733a204e6f7420656e6f756768207060448201527f65726d697373696f6e7320746f2072656d6f76652066726f6d206d65746164616064820152661d18481b1a5cdd60ca1b608482015260a401610b2b565b60606014805480602002602001604051908101604052809291908181526020018280548015610ab957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161170e575050505050905090565b336000908152600a602052604090205462010000900460ff1661176a5760405162461bcd60e51b8152600401610b2b90614da2565b6013805460ff191660ff831690811790915560408051918252426020830152439082015233907fa8336411cc72db0e5bdc4dff989eeb35879bafaceffb59b54b37645c3395adb99060600160405180910390a250565b336000908152600a602052604090205460ff1615156001146117f45760405162461bcd60e51b8152600401610b2b90614d05565b610da681612c5c565b6118076001611958565b6001600160a01b0316336001600160a01b0316146118375760405162461bcd60e51b8152600401610b2b90614d3c565b61183f612f58565b61185161184c6001611958565b613009565b565b60008061186160058461327c565b509392505050565b6000818152600c6020526040902080546060919061188690614cca565b80601f01602080910402602001604051908101604052809291908181526020018280546118b290614cca565b80156118ff5780601f106118d4576101008083540402835291602001916118ff565b820191906000526020600020905b8154815290600101906020018083116118e257829003601f168201915b50505050509050919050565b6119156001611958565b6001600160a01b0316336001600160a01b0316146119455760405162461bcd60e51b8152600401610b2b90614d3c565b80516113b4906003906020840190614179565b600061149d826040518060600160405280602981526020016153a2602991396005919061329a565b336000908152600a60205260409020546301000000900460ff16610d5e5760405162461bcd60e51b815260206004820152602160248201527f45524337323154656d706c6174653a204e4f542053544f5245205550444154456044820152602960f91b6064820152608401610b2b565b6060610e436132b1565b60006001600160a01b038216611a655760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610b2b565b6001600160a01b038216600090815260046020526040902061149d90612792565b60118054610c7390614cca565b6060600f8054610a4090614cca565b6001600160a01b038216331415611afb5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610b2b565b3360008181526008602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910161102c565b611b6a6001611958565b6001600160a01b0316336001600160a01b031614611b9a5760405162461bcd60e51b8152600401610b2b90614d3c565b610da6816132c0565b600b8181548110611bb357600080fd5b6000918252602090912001546001600160a01b0316905081565b336000908152600a602052604090205460ff161515600114611c015760405162461bcd60e51b8152600401610b2b90614d05565b80518251148015611c13575060008151115b8015611c20575060328151105b611c615760405162461bcd60e51b8152602060048201526012602482015271496e76616c69642061727261792073697a6560701b6044820152606401610b2b565b60005b8151811015610c615760006001600160a01b0316838281518110611c8a57611c8a614f1d565b60200260200101516001600160a01b031614611fc3576000600a6000858481518110611cb857611cb8614f1d565b60200260200101516001600160a01b03166001600160a01b03168152602001908152602001600020905060006003811115611cf557611cf5614f33565b838381518110611d0757611d07614f1d565b60200260200101516003811115611d2057611d20614f33565b1415611d9b57805460ff1916600117815583513390859084908110611d4757611d47614f1d565b60200260200101516001600160a01b03167faf8fc8b6726138c96881c895390a08e9d91a94c288f06281e7f9821c49c7155b4243604051611d92929190918252602082015260400190565b60405180910390a35b6001838381518110611daf57611daf614f1d565b60200260200101516003811115611dc857611dc8614f33565b1415611e4557805461ff00191661010017815583513390859084908110611df157611df1614f1d565b60200260200101516001600160a01b03167f0572d56343be407a66810f01449212e8545e14ff5049c479d34be944cdfd0d4f4243604051611e3c929190918252602082015260400190565b60405180910390a35b6002838381518110611e5957611e59614f1d565b60200260200101516003811115611e7257611e72614f33565b1415611ef157805462ff000019166201000017815583513390859084908110611e9d57611e9d614f1d565b60200260200101516001600160a01b03167fc2a42571a74ce1442c8c44d375ba9442e7d55d94b37afeace261c83c62128fa44243604051611ee8929190918252602082015260400190565b60405180910390a35b6003838381518110611f0557611f05614f1d565b60200260200101516003811115611f1e57611f1e614f33565b1415611f9f57805463ff0000001916630100000017815583513390859084908110611f4b57611f4b614f1d565b60200260200101516001600160a01b03167feb09276310ed110a7e565d64966d0ff68a47112d2dd5eeb6cbd7451836ce35ee4243604051611f96929190918252602082015260400190565b60405180910390a35b611fc1848381518110611fb457611fb4614f1d565b6020026020010151612ba5565b505b80611fcd81614f5f565b915050611c64565b336000908152600a602052604090205460ff1615156001146120095760405162461bcd60e51b8152600401610b2b90614d05565b6120168585858585613320565b5050505050565b6060612028826125b2565b61208c5760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610b2b565b600082815260096020526040812080546120a590614cca565b80601f01602080910402602001604051908101604052809291908181526020018280546120d190614cca565b801561211e5780601f106120f35761010080835404028352916020019161211e565b820191906000526020600020905b81548152906001019060200180831161210157829003601f168201915b50505050509050600061212f6132b1565b82519091501561216457808260405160200161214c929190614f7a565b60405160208183030381529060405292505050919050565b5092915050565b60608060008060116012601360009054906101000a900460ff16601060019054906101000a900460ff168380546121a190614cca565b80601f01602080910402602001604051908101604052809291908181526020018280546121cd90614cca565b801561221a5780601f106121ef5761010080835404028352916020019161221a565b820191906000526020600020905b8154815290600101906020018083116121fd57829003601f168201915b5050505050935082805461222d90614cca565b80601f016020809104026020016040519081016040528092919081815260200182805461225990614cca565b80156122a65780601f1061227b576101008083540402835291602001916122a6565b820191906000526020600020905b81548152906001019060200180831161228957829003601f168201915b50505050509250935093509350935090919293565b6122c56001611958565b6001600160a01b03166108fc479081150290604051600060405180830381858888f19350505050158015610da6573d6000803e3d6000fd5b6000612307613549565b336000908152600a6020526040902054610100900460ff1661237a5760405162461bcd60e51b815260206004820152602660248201527f45524337323154656d706c6174653a204e4f542045524332304445504c4f5945604482015265525f524f4c4560d01b6064820152608401610b2b565b601354604051630557fcfb60e41b815260009161010090046001600160a01b03169063557fcfb0906123c0908e908e908e908e908e908e908e908e908e906004016150f3565b6020604051808303816000875af11580156123df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240391906151a4565b6001600160a01b0381166000818152601560205260408120805460ff191660019081179091556014805491820181559091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b03191690911790559150506124756001600d55565b9998505050505050505050565b336000908152600a602052604090205460ff161515600114806124d25750336001600160a01b0382161480156124d25750336000908152600a602052604090205460ff6101009091041615156001145b15612538576001600160a01b0381166000818152600a602052604090819020805461ff00191681559051909133917f59bd33f4c27cc16a2d74450e1fa43d7896020be9aecea4bee009db9294de8997906113a39042904390918252602082015260400190565b60405162461bcd60e51b815260206004820152604360248201527f455243373231526f6c6573416464726573733a204e6f7420656e6f756768207060448201527f65726d697373696f6e7320746f2072656d6f76652066726f6d2045524332304c6064820152621a5cdd60ea1b608482015260a401610b2b565b600061149d6005836135a3565b600081815260076020526040902080546001600160a01b0319166001600160a01b03841690811790915581906125f482611958565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000838152600c602052604090206126469083836141fd565b50827fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b283836040516126799291906151c1565b60405180910390a2505050565b6001600160a01b03811615610da6576001600160a01b0381166000908152600a60205260409020805462ff00001916620100001781556126c582612ba5565b6040805142815243602082015233916001600160a01b038516917fc2a42571a74ce1442c8c44d375ba9442e7d55d94b37afeace261c83c62128fa4910161102c565b612710826125b2565b6127735760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610b2b565b60008281526009602090815260409091208251610c6192840190614179565b600061149d825490565b6013805460ff191660ff8d161790556127b760118b8b6141fd565b506127c4601289896141fd565b50601054610100900460ff1661283b57336001600160a01b03167f5463569dcc320958360074a9ab27e809e8a6942c394fb151d139b5f7b4ecb1bd8c8c8c8a8a8a8a8a424360405161281f9a999897969594939291906151d5565b60405180910390a26010805461ff00191661010017905561288d565b60135460405133917fe5c4cf86b1815151e6f453e1e133d4454ae3b0b07145db39f2e0178685deac84916128849160ff16908e908e908c908c908c908c908c90429043906151d5565b60405180910390a25b6032815111156128d15760405162461bcd60e51b815260206004820152600f60248201526e546f6f204d616e792050726f6f667360881b6044820152606401610b2b565b60408051808201909152601c81527f19457468657265756d205369676e6564204d6573736167653a0a333200000000602082015260005b8251811015612b965760006001600160a01b031683828151811061292e5761292e614f1d565b6020026020010151600001516001600160a01b031614612ab0576000828560405160200161295d92919061523d565b604051602081830303815290604052805190602001209050600060018286858151811061298c5761298c614f1d565b6020026020010151602001518786815181106129aa576129aa614f1d565b6020026020010151604001518887815181106129c8576129c8614f1d565b60200260200101516060015160405160008152602001604052604051612a0a949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612a2c573d6000803e3d6000fd5b505050602060405103519050848381518110612a4a57612a4a614f1d565b6020026020010151600001516001600160a01b0316816001600160a01b031614612aad5760405162461bcd60e51b815260206004820152601460248201527324b73b30b634b210383937b7b31039b4b3b732b960611b6044820152606401610b2b565b50505b828181518110612ac257612ac2614f1d565b6020026020010151600001516001600160a01b03167f2819d8badf5cff2c9220b8ee99dacc14d67058e343d7f0c2c444d198507fe94185858481518110612b0b57612b0b614f1d565b602002602001015160200151868581518110612b2957612b29614f1d565b602002602001015160400151878681518110612b4757612b47614f1d565b602002602001015160600151604051612b7c949392919093845260ff9290921660208401526040830152606082015260800190565b60405180910390a280612b8e81614f5f565b915050612908565b50505050505050505050505050565b60005b600b54811015612c0157816001600160a01b0316600b8281548110612bcf57612bcf614f1d565b6000918252602090912001546001600160a01b03161415612bef57612c01565b80612bf981614f5f565b915050612ba8565b600b548114156113b457600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0384166001600160a01b03199091161790555050565b6001600160a01b0381166000908152600a60205260409020805461ff001916610100178155612c8a82612ba5565b6040805142815243602082015233916001600160a01b038516917f0572d56343be407a66810f01449212e8545e14ff5049c479d34be944cdfd0d4f910161102c565b60006001600160a01b038716612d3b5760405162461bcd60e51b815260206004820152602e60248201527f45524337323154656d706c6174653a3a20496e76616c6964206d696e7465722c60448201526d20207a65726f206164647265737360901b6064820152608401610b2b565b8551612d4e90600e906020890190614179565b508451612d6290600f906020880190614179565b5060138054610100600160a81b0319166101006001600160a01b03871602179055604080516020810191829052600090819052612da191600391614179565b5060108054600161ffff1990911681179091556016805460ff1916841515179055612dcd9088906135bb565b612dd687613009565b6001600160a01b0387166000908152600a60205260409020805463ffffff0019166301010100178155612e0a600185612707565b505060105460ff169695505050505050565b612e2c6380ac58cd60e01b612e48565b612e3c635b5e139f60e01b612e48565b61185163780e9d6360e01b5b6001600160e01b03198082161415612ea25760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e74657266616365206964000000006044820152606401610b2b565b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b60005b818110156113b45760148181548110612ee557612ee5614f1d565b6000918252602082200154604080516382c03da560e01b815290516001600160a01b03909216926382c03da59260048084019382900301818387803b158015612f2d57600080fd5b505af1158015612f41573d6000803e3d6000fd5b505050508080612f5090614f5f565b915050612eca565b60005b600b54811015612fc0576000600a6000600b8481548110612f7e57612f7e614f1d565b60009182526020808320909101546001600160a01b031683528201929092526040019020805463ffffffff191690555080612fb881614f5f565b915050612f5b565b50612fcd600b6000614271565b6040805142815243602082015233917f712bc71db81927a76b8bf1ea346247bb0ad58f18e4e5c1bd4aa0ec6573e02a2b910160405180910390a2565b6001600160a01b03811615610da6576001600160a01b0381166000908152600a60205260409020805460ff1916600117815561304482612ba5565b6040805142815243602082015233916001600160a01b038516917faf8fc8b6726138c96881c895390a08e9d91a94c288f06281e7f9821c49c7155b910161102c565b61309033826135d5565b6130ac5760405162461bcd60e51b8152600401610b2b9061525f565b610c618383836040518060200160405280600081525061324a565b6001600160a01b0381166000908152600a60205260409020805460ff161580156130f857508054610100900460ff16155b801561310c5750805462010000900460ff16155b8015613121575080546301000000900460ff16155b156113b45760005b600b5481101561318257826001600160a01b0316600b828154811061315057613150614f1d565b6000918252602090912001546001600160a01b0316141561317057613182565b8061317a81614f5f565b915050613129565b600b54811015610c6157600b805461319c906001906152b0565b815481106131ac576131ac614f1d565b600091825260209091200154600b80546001600160a01b0390921691839081106131d8576131d8614f1d565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600b805480613217576132176152c7565b600082815260209020810160001990810180546001600160a01b0319169055019055505050565b600061149a83836136bf565b61325433836135d5565b6132705760405162461bcd60e51b8152600401610b2b9061525f565b6112e484848484613745565b600080808061328b8686613778565b909450925050505b9250929050565b60006132a7848484613815565b90505b9392505050565b606060038054610a4090614cca565b6001600160a01b0381166000818152600a602052604090819020805460ff191681559051909133917fb572db0e6da4924b771ed1712b980d48b5992b9a1c27aede55fbb3318c48996a906113a39042904390918252602082015260400190565b82846001600160a01b0316867f1f920dbda597d7bf95035464170fa58d0a4b57f13a1c315ace6793b9f63688b8858560405161335d9291906151c1565b60405180910390a460006109c45a61337591906152b0565b9050856133c5576133bf858585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525087925061387e915050565b50613541565b600386141561340e576133bf8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061389692505050565b600286141561350257600061346584848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134609250602091508790506152b0565b613932565b905060006134b485858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092506134af915060209050886152b0565b613990565b905060006134c3878484613a9d565b6040519091506001600160a01b038216907fcf78cf0d6f3d8371e1075c69c492ab4ec5d8cf23a1a239b6a51a1d00be7ca31290600090a2505050613541565b60405162461bcd60e51b815260206004820152601460248201527357726f6e67206f7065726174696f6e207479706560601b6044820152606401610b2b565b505050505050565b6002600d54141561359c5760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610b2b565b6002600d55565b6000818152600183016020526040812054151561149a565b6113b4828260405180602001604052806000815250613b9e565b60006135e0826125b2565b6136415760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610b2b565b600061364c83611958565b9050806001600160a01b0316846001600160a01b031614806136875750836001600160a01b031661367c84610ac3565b6001600160a01b0316145b806136b757506001600160a01b0380821660009081526008602090815260408083209388168352929052205460ff165b949350505050565b8154600090821061371d5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610b2b565b82600001828154811061373257613732614f1d565b9060005260206000200154905092915050565b613750848484613bd1565b61375c84848484613d52565b6112e45760405162461bcd60e51b8152600401610b2b906152dd565b8154600090819083106137d85760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610b2b565b60008460000184815481106137ef576137ef614f1d565b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816138455760405162461bcd60e51b8152600401610b2b919061432b565b50846138526001836152b0565b8154811061386257613862614f1d565b9060005260206000209060020201600101549150509392505050565b6000806000845160208601878987f195945050505050565b600081516020830184f090506001600160a01b0381166138f85760405162461bcd60e51b815260206004820152601960248201527f436f756c64206e6f74206465706c6f7920636f6e7472616374000000000000006044820152606401610b2b565b6040516001600160a01b038216907fcf78cf0d6f3d8371e1075c69c492ab4ec5d8cf23a1a239b6a51a1d00be7ca31290600090a292915050565b600061393f82602061532f565b835110156139875760405162461bcd60e51b8152602060048201526015602482015274746f427974657333325f6f75744f66426f756e647360581b6044820152606401610b2b565b50016020015190565b60608161399e81601f61532f565b10156139dd5760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610b2b565b6139e7828461532f565b84511015613a2b5760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610b2b565b606082158015613a4a5760405191506000825260208201604052613a94565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015613a83578051835260209283019201613a6b565b5050858452601f01601f1916604052505b50949350505050565b600083471015613aef5760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610b2b565b8151613b3d5760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610b2b565b8282516020840186f590506001600160a01b0381166132aa5760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610b2b565b613ba88383613e50565b613bb56000848484613d52565b610c615760405162461bcd60e51b8152600401610b2b906152dd565b826001600160a01b0316613be482611958565b6001600160a01b031614613c4c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610b2b565b6001600160a01b038216613cae5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610b2b565b613cb96000826125bf565b6001600160a01b0383166000908152600460205260409020613cdb9082613f68565b506001600160a01b0382166000908152600460205260409020613cfe9082613f74565b50613d0b60058284613f80565b5080826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60006001600160a01b0384163b15613e4557604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613d96903390899088908890600401615347565b6020604051808303816000875af1925050508015613dd1575060408051601f3d908101601f19168201909252613dce91810190615384565b60015b613e2b573d808015613dff576040519150601f19603f3d011682016040523d82523d6000602084013e613e04565b606091505b508051613e235760405162461bcd60e51b8152600401610b2b906152dd565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506136b7565b506001949350505050565b6001600160a01b038216613ea65760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610b2b565b613eaf816125b2565b15613efc5760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610b2b565b6001600160a01b0382166000908152600460205260409020613f1e9082613f74565b50613f2b60058284613f80565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b600061149a8383613f96565b600061149a8383614089565b60006132a784846001600160a01b0385166140d8565b6000818152600183016020526040812054801561407f576000613fba6001836152b0565b8554909150600090613fce906001906152b0565b90506000866000018281548110613fe757613fe7614f1d565b906000526020600020015490508087600001848154811061400a5761400a614f1d565b60009182526020909120015561402183600161532f565b60008281526001890160205260409020558654879080614043576140436152c7565b6001900381819060005260206000200160009055905586600101600087815260200190815260200160002060009055600194505050505061149d565b600091505061149d565b60008181526001830160205260408120546140d05750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561149d565b50600061149d565b60008281526001840160205260408120548061413d5750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556132aa565b828561414a6001846152b0565b8154811061415a5761415a614f1d565b90600052602060002090600202016001018190555060009150506132aa565b82805461418590614cca565b90600052602060002090601f0160209004810192826141a757600085556141ed565b82601f106141c057805160ff19168380011785556141ed565b828001600101855582156141ed579182015b828111156141ed5782518255916020019190600101906141d2565b506141f992915061428b565b5090565b82805461420990614cca565b90600052602060002090601f01602090048101928261422b57600085556141ed565b82601f106142445782800160ff198235161785556141ed565b828001600101855582156141ed579182015b828111156141ed578235825591602001919060010190614256565b5080546000825590600052602060002090810190610da691905b5b808211156141f9576000815560010161428c565b6001600160e01b031981168114610da657600080fd5b6000602082840312156142c857600080fd5b81356132aa816142a0565b60005b838110156142ee5781810151838201526020016142d6565b838111156112e45750506000910152565b600081518084526143178160208601602086016142d3565b601f01601f19169290920160200192915050565b60208152600061149a60208301846142ff565b60006020828403121561435057600080fd5b5035919050565b6001600160a01b0381168114610da657600080fd5b803561437781614357565b919050565b6000806040838503121561438f57600080fd5b823561439a81614357565b946020939093013593505050565b60008083601f8401126143ba57600080fd5b5081356001600160401b038111156143d157600080fd5b60208301915083602082850101111561329357600080fd5b6000806000604084860312156143fe57600080fd5b8335925060208401356001600160401b0381111561441b57600080fd5b614427868287016143a8565b9497909650939450505050565b60006020828403121561444657600080fd5b81356132aa81614357565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171561448f5761448f614451565b604052919050565b600082601f8301126144a857600080fd5b81356001600160401b038111156144c1576144c1614451565b6144d4601f8201601f1916602001614467565b8181528460208386010111156144e957600080fd5b816020850160208301376000918101602001919091529392505050565b6000806040838503121561451957600080fd5b8235915060208301356001600160401b0381111561453657600080fd5b61454285828601614497565b9150509250929050565b60006020828403121561455e57600080fd5b81356001600160401b0381111561457457600080fd5b820161012081850312156132aa57600080fd5b8035801515811461437757600080fd5b6000806000806000806000806000806101008b8d0312156145b757600080fd5b6145c08b61436c565b995060208b01356001600160401b03808211156145dc57600080fd5b6145e88e838f016143a8565b909b50995060408d013591508082111561460157600080fd5b61460d8e838f016143a8565b909950975087915061462160608e0161436c565b965061462f60808e0161436c565b955061463d60a08e0161436c565b945060c08d013591508082111561465357600080fd5b506146608d828e01614497565b92505061466f60e08c01614587565b90509295989b9194979a5092959850565b803560ff8116811461437757600080fd5b60006001600160401b038211156146aa576146aa614451565b5060051b60200190565b6000608082840312156146c657600080fd5b604051608081018181106001600160401b03821117156146e8576146e8614451565b60405290508082356146f981614357565b815261470760208401614680565b602082015260408301356040820152606083013560608201525092915050565b600082601f83011261473857600080fd5b8135602061474d61474883614691565b614467565b82815260079290921b8401810191818101908684111561476c57600080fd5b8286015b848110156147905761478288826146b4565b835291830191608001614770565b509695505050505050565b600080600080600080600080600080600060e08c8e0312156147bc57600080fd5b6147c58c614680565b9a506001600160401b038060208e013511156147e057600080fd5b6147f08e60208f01358f016143a8565b909b50995060408d013581101561480657600080fd5b6148168e60408f01358f016143a8565b909950975060608d013581101561482c57600080fd5b61483c8e60608f01358f016143a8565b909750955060808d013581101561485257600080fd5b6148628e60808f01358f016143a8565b909550935060a08d0135925060c08d013581101561487f57600080fd5b506148908d60c08e01358e01614727565b90509295989b509295989b9093969950565b6000806000606084860312156148b757600080fd5b83356148c281614357565b925060208401356148d281614357565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b818110156149245783516001600160a01b0316835292840192918401916001016148ff565b50909695505050505050565b60006020828403121561494257600080fd5b61149a82614680565b60006020828403121561495d57600080fd5b81356001600160401b0381111561497357600080fd5b6136b784828501614497565b6000806040838503121561499257600080fd5b823561499d81614357565b91506149ab60208401614587565b90509250929050565b600082601f8301126149c557600080fd5b813560206149d561474883614691565b82815260059290921b840181019181810190868411156149f457600080fd5b8286015b8481101561479057803560048110614a105760008081fd5b83529183019183016149f8565b60008060408385031215614a3057600080fd5b82356001600160401b0380821115614a4757600080fd5b818501915085601f830112614a5b57600080fd5b81356020614a6b61474883614691565b82815260059290921b84018101918181019089841115614a8a57600080fd5b948201945b83861015614ab1578535614aa281614357565b82529482019490820190614a8f565b96505086013592505080821115614ac757600080fd5b50614542858286016149b4565b600080600080600060808688031215614aec57600080fd5b853594506020860135614afe81614357565b93506040860135925060608601356001600160401b03811115614b2057600080fd5b614b2c888289016143a8565b969995985093965092949392505050565b608081526000614b5060808301876142ff565b8281036020840152614b6281876142ff565b60ff959095166040840152505090151560609091015292915050565b60008083601f840112614b9057600080fd5b5081356001600160401b03811115614ba757600080fd5b6020830191508360208260051b850101111561329357600080fd5b600080600080600080600080600060a08a8c031215614be057600080fd5b8935985060208a01356001600160401b0380821115614bfe57600080fd5b614c0a8d838e01614b7e565b909a50985060408c0135915080821115614c2357600080fd5b614c2f8d838e01614b7e565b909850965060608c0135915080821115614c4857600080fd5b614c548d838e01614b7e565b909650945060808c0135915080821115614c6d57600080fd5b50614c7a8c828d01614b7e565b915080935050809150509295985092959850929598565b60008060408385031215614ca457600080fd5b8235614caf81614357565b91506020830135614cbf81614357565b809150509250929050565b600181811c90821680614cde57607f821691505b60208210811415614cff57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252601f908201527f455243373231526f6c6573416464726573733a204e4f54204d414e4147455200604082015260600190565b6020808252601c908201527f45524337323154656d706c6174653a206e6f74204e46544f776e657200000000604082015260600190565b608081526000614d8660808301876142ff565b6020830195909552506040810192909252606090910152919050565b60208082526021908201527f45524337323154656d706c6174653a204e4f54204d455441444154415f524f4c6040820152604560f81b606082015260800190565b6000808335601e19843603018112614dfa57600080fd5b8301803591506001600160401b03821115614e1457600080fd5b60200191503681900382131561329357600080fd5b6000808335601e19843603018112614e4057600080fd5b8301803591506001600160401b03821115614e5a57600080fd5b6020019150600781901b360382131561329357600080fd5b600060808284031215614e8457600080fd5b61149a83836146b4565b60208082526023908201527f45524337323154656d706c6174653a204973206e6f6e207472616e7366657261604082015262626c6560e81b606082015260800190565b6020808252602c908201527f45524337323154656d706c6174653a2043616e6e6f74207472616e736665722060408201526b1d1a1a5cc81d1bdad95b925960a21b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415614f7357614f73614f49565b5060010190565b60008351614f8c8184602088016142d3565b835190830190614fa08183602088016142d3565b01949350505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000808335601e19843603018112614fe957600080fd5b83016020810192503590506001600160401b0381111561500857600080fd5b80360383131561329357600080fd5b8183526000602080850194508260005b8581101561505557813561503a81614357565b6001600160a01b031687529582019590820190600101615027565b509495945050505050565b81835260006001600160fb1b0383111561507957600080fd5b8260051b8083602087013760009401602001938452509192915050565b81835260006020808501808196508560051b810191508460005b878110156150e65782840389526150c78288614fd2565b6150d2868284614fa9565b9a87019a95505050908401906001016150b0565b5091979650505050505050565b89815260a0602082018190528101889052600060c060058a901b830181019083018b835b8c8110156151545785840360bf19018352615132828f614fd2565b61513d868284614fa9565b955050506020928301929190910190600101615117565b505050828103604084015261516a81898b615017565b9050828103606084015261517f818789615060565b90508281036080840152615194818587615096565b9c9b505050505050505050505050565b6000602082840312156151b657600080fd5b81516132aa81614357565b6020815260006132a7602083018486614fa9565b60ff8b16815260e0602082015260006151f260e083018b8d614fa9565b8281036040840152615205818a8c614fa9565b9050828103606084015261521a81888a614fa9565b6080840196909652505060a081019290925260c090910152979650505050505050565b6000835161524f8184602088016142d3565b9190910191825250602001919050565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6000828210156152c2576152c2614f49565b500390565b634e487b7160e01b600052603160045260246000fd5b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000821982111561534257615342614f49565b500190565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061537a908301846142ff565b9695505050505050565b60006020828403121561539657600080fd5b81516132aa816142a056fe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea26469706673582212208d4d0890963b7e908e35bd02ad24336cd90581996e8ce95953adfed4e9171ff364736f6c634300080c0033