ocean-subgraph/abis/ERC721Template.json

1471 lines
96 KiB
JSON

{
"_format": "hh-sol-artifact-1",
"contractName": "ERC721Template",
"sourceName": "contracts/templates/ERC721Template.sol",
"abi": [
{
"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": "bytes",
"name": "metaDataHash",
"type": "bytes"
},
{
"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": "bytes",
"name": "metaDataHash",
"type": "bytes"
},
{
"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": "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": "_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": "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": "string",
"name": "tokenURI",
"type": "string"
}
],
"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": "bytes",
"name": "_metaDataHash",
"type": "bytes"
}
],
"name": "setMetaData",
"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": [],
"name": "ssContract",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "tokenURI",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "tokenId",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "withdrawETH",
"outputs": [],
"stateMutability": "payable",
"type": "function"
}
],
"bytecode": "0x60806040523480156200001157600080fd5b50604080518082018252600881526754656d706c61746560c01b60208083019182528351808501909452600e84526d15195b5c1b185d1954de5b589bdb60921b908401528151919291620000689160009162000131565b5080516200007e90600190602084019062000131565b50620000959150632260147f60e11b9050620000ad565b620000a7632bd57b7360e01b620000ad565b62000214565b6001600160e01b031980821614156200010c5760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640160405180910390fd5b6001600160e01b0319166000908152600a60205260409020805460ff19166001179055565b8280546200013f90620001d7565b90600052602060002090601f016020900481019282620001635760008555620001ae565b82601f106200017e57805160ff1916838001178555620001ae565b82800160010185558215620001ae579182015b82811115620001ae57825182559160200191906001019062000191565b50620001bc929150620001c0565b5090565b5b80821115620001bc5760008155600101620001c1565b600181811c90821680620001ec57607f821691505b602082108114156200020e57634e487b7160e01b600052602260045260246000fd5b50919050565b613f9480620002246000396000f3fe60806040526004361061025d5760003560e01c806355f804b311610143578063a22cb465116100bb578063d2786ba411610077578063d2786ba41461082d578063d8053ad314610852578063e086e5ec14610871578063e38d7cad14610879578063e985e9c514610899578063fe1ec880146108e257005b8063a22cb46514610780578063ac18de43146107a0578063b0c41ead146107c0578063c55f8126146107e0578063c87b56dd146107f3578063ccd7d4761461081357005b806370a082311161010a57806370a082311461069157806370c166d7146106bf57806382cf129d146106df57806390184b02146106f457806395d89b411461072d57806396fb3eaf1461074257005b806355f804b3146105ef5780635d1ca6311461060f5780635d5dea24146106315780636352211e1461065157806367530a611461067157005b8063273e06b3116101d6578063466bca021161019d578063466bca0214610538578063467c97f51461055a5780634a63740a1461057a5780634b2ee5e91461059a5780634f189cb2146105ba57806354f6127f146105cf57005b8063273e06b3146104a05780632d06177a146104c0578063392e53cd146104e057806342842e0e146104f8578063431053ac1461051857005b80630e57c7e8116102255780630e57c7e81461032357806310c558bf14610343578063160a792514610363578063162094c41461044057806319c186e51461046057806323b872dd1461048057005b806301ffc9a71461025f57806306fdde0314610294578063081812fc146102b6578063095ea7b3146102ee5780630e05662e1461030e575b005b34801561026b57600080fd5b5061027f61027a366004613580565b610902565b60405190151581526020015b60405180910390f35b3480156102a057600080fd5b506102a9610942565b60405161028b9190613a93565b3480156102c257600080fd5b506102d66102d136600461351b565b6109d4565b6040516001600160a01b03909116815260200161028b565b3480156102fa57600080fd5b5061025d6103093660046134ef565b610a6e565b34801561031a57600080fd5b506102a9610b84565b34801561032f57600080fd5b5061025d61033e366004613534565b610c12565b34801561034f57600080fd5b5061025d61035e366004613332565b610c8c565b34801561036f57600080fd5b5061040561037e366004613332565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152600860209081526040918290208251608081018452905460ff808216151583526101008204811615159383019390935262010000810483161515938201939093526301000000909204161515606082015290565b60405161028b919081511515815260208083015115159082015260408083015115159082015260609182015115159181019190915260800190565b34801561044c57600080fd5b5061025d61045b366004613729565b610d5f565b34801561046c57600080fd5b5061025d61047b366004613332565b610dee565b34801561048c57600080fd5b5061025d61049b3660046133ac565b610eb7565b3480156104ac57600080fd5b5061025d6104bb366004613332565b610f89565b3480156104cc57600080fd5b5061025d6104db366004613332565b6110c2565b3480156104ec57600080fd5b50600e5460ff1661027f565b34801561050457600080fd5b5061025d6105133660046133ac565b611105565b34801561052457600080fd5b5061025d610533366004613332565b6111ab565b34801561054457600080fd5b5061054d6112e0565b60405161028b9190613a32565b34801561056657600080fd5b5061025d610575366004613770565b611341565b34801561058657600080fd5b5061025d610595366004613332565b6113d1565b3480156105a657600080fd5b506013546102d6906001600160a01b031681565b3480156105c657600080fd5b5061025d611496565b3480156105db57600080fd5b506102a96105ea36600461351b565b6114da565b3480156105fb57600080fd5b5061025d61060a3660046135ba565b61157c565b34801561061b57600080fd5b5060015b60405160ff909116815260200161028b565b34801561063d57600080fd5b5061025d61064c36600461378b565b6115cd565b34801561065d57600080fd5b506102d661066c36600461351b565b611709565b34801561067d57600080fd5b5061025d61068c366004613534565b611780565b34801561069d57600080fd5b506106b16106ac366004613332565b6117f5565b60405190815260200161028b565b3480156106cb57600080fd5b5061027f6106da366004613420565b61187c565b3480156106eb57600080fd5b506102a9611999565b34801561070057600080fd5b5061027f61070f366004613332565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561073957600080fd5b506102a96119a6565b34801561074e57600080fd5b5061027f61075d366004613332565b6001600160a01b0316600090815260086020526040902054610100900460ff1690565b34801561078c57600080fd5b5061025d61079b3660046133ed565b6119b5565b3480156107ac57600080fd5b5061025d6107bb366004613332565b611a73565b3480156107cc57600080fd5b506102d66107db36600461351b565b611ab6565b61025d6107ee3660046135ef565b611ae0565b3480156107ff57600080fd5b506102a961080e36600461351b565b611b28565b34801561081f57600080fd5b5060115461061f9060ff1681565b34801561083957600080fd5b50610842611c86565b60405161028b9493929190613aa6565b34801561085e57600080fd5b50600e5461027f90610100900460ff1681565b61025d611dd6565b34801561088557600080fd5b506102d6610894366004613659565b611e18565b3480156108a557600080fd5b5061027f6108b4366004613373565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156108ee57600080fd5b5061025d6108fd366004613332565b611f9e565b60006301ffc9a760e01b6001600160e01b03198316148061093c57506001600160e01b031982166000908152600a602052604090205460ff165b92915050565b6060600c805461095190613e7b565b80601f016020809104026020016040519081016040528092919081815260200182805461097d90613e7b565b80156109ca5780601f1061099f576101008083540402835291602001916109ca565b820191906000526020600020905b8154815290600101906020018083116109ad57829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b0316610a525760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000610a7982611709565b9050806001600160a01b0316836001600160a01b03161415610ae75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610a49565b336001600160a01b0382161480610b035750610b0381336108b4565b610b755760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a49565b610b7f83836120ce565b505050565b60108054610b9190613e7b565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbd90613e7b565b8015610c0a5780601f10610bdf57610100808354040283529160200191610c0a565b820191906000526020600020905b815481529060010190602001808311610bed57829003601f168201915b505050505081565b3360009081526014602052604090205460ff161515600114610c815760405162461bcd60e51b815260206004820152602260248201527f45524337323154656d706c6174653a204e4f5420455243323020436f6e74726160448201526118dd60f21b6064820152608401610a49565b610b7f83838361213c565b3360009081526008602052604090205460ff161515600114610cc05760405162461bcd60e51b8152600401610a4990613c7d565b6001600160a01b038116600081815260086020526040808220805462ff0000191662010000178155600980546001810182559352600080516020613f3f83398151915290920180546001600160a01b0319168417905551909133917fc2a42571a74ce1442c8c44d375ba9442e7d55d94b37afeace261c83c62128fa490610d539042904390918252602082015260400190565b60405180910390a35050565b610d696001611709565b6001600160a01b0316336001600160a01b031614610d995760405162461bcd60e51b8152600401610a4990613ba9565b610da38282612195565b336001600160a01b03167f6de6cd3982065cbd31e789e3109106f4d76d1c8a46e85262045cf947fb3fd4ed82844243604051610de29493929190613ae7565b60405180910390a25050565b3360009081526008602052604090205460ff161515600114610e225760405162461bcd60e51b8152600401610a4990613c7d565b6001600160a01b038116600081815260086020526040808220805463ff00000019166301000000178155600980546001810182559352600080516020613f3f83398151915290920180546001600160a01b0319168417905551909133917feb09276310ed110a7e565d64966d0ff68a47112d2dd5eeb6cbd7451836ce35ee90610d539042904390918252602082015260400190565b80600114610ed75760405162461bcd60e51b8152600401610a4990613be0565b610f41610f3c6012805480602002602001604051908101604052809291908181526020018280548015610f3357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f15575b50505050505190565b61222f565b610f496122c0565b610f54838383612371565b610f5d826123b2565b506001600160a01b03166000908152600860205260409020805463ffffff001916630101010017905550565b3360009081526008602052604090205460ff16151560011480610fda5750336001600160a01b038216148015610fda5750336000908152600860205260409020546301000000900460ff1615156001145b15611042576001600160a01b03811660008181526008602052604090819020805463ff000000191681559051909133917fc929b18b08ffea86a1f95e29384dbe8968f2fcbd70cfd735df3aba1cc548cbf390610d539042904390918252602082015260400190565b60405162461bcd60e51b815260206004820152604660248201527f455243373231526f6c6573416464726573733a204e6f7420656e6f756768207060448201527f65726d697373696f6e7320746f2072656d6f76652066726f6d2037323553746f6064820152651c99531a5cdd60d21b608482015260a401610a49565b50565b6110cc6001611709565b6001600160a01b0316336001600160a01b0316146110fc5760405162461bcd60e51b8152600401610a4990613ba9565b6110bf816123b2565b806001146111255760405162461bcd60e51b8152600401610a4990613be0565b611188610f3c6012805480602002602001604051908101604052809291908181526020018280548015610f33576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f155750505050505190565b6111906122c0565b610f5483838360405180602001604052806000815250612443565b3360009081526008602052604090205460ff161515600114806111fb5750336001600160a01b0382161480156111fb57503360009081526008602052604090205462010000900460ff1615156001145b15611262576001600160a01b03811660008181526008602052604090819020805462ff0000191681559051909133917f9b41e1311fa819e825bc77fa2568492112e15ea92d173f3f8ee1c8ec3c1c562b90610d539042904390918252602082015260400190565b60405162461bcd60e51b815260206004820152604760248201527f455243373231526f6c6573416464726573733a204e6f7420656e6f756768207060448201527f65726d697373696f6e7320746f2072656d6f76652066726f6d206d65746164616064820152661d18481b1a5cdd60ca1b608482015260a401610a49565b606060128054806020026020016040519081016040528092919081815260200182805480156109ca57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161131a575050505050905090565b3360009081526008602052604090205462010000900460ff16151560011461137b5760405162461bcd60e51b8152600401610a4990613b16565b6011805460ff191660ff831690811790915560408051918252426020830152439082015233907fa8336411cc72db0e5bdc4dff989eeb35879bafaceffb59b54b37645c3395adb99060600160405180910390a250565b3360009081526008602052604090205460ff1615156001146114055760405162461bcd60e51b8152600401610a4990613c7d565b6001600160a01b038116600081815260086020526040808220805461ff001916610100178155600980546001810182559352600080516020613f3f83398151915290920180546001600160a01b0319168417905551909133917f0572d56343be407a66810f01449212e8545e14ff5049c479d34be944cdfd0d4f90610d539042904390918252602082015260400190565b6114a06001611709565b6001600160a01b0316336001600160a01b0316146114d05760405162461bcd60e51b8152600401610a4990613ba9565b6114d86122c0565b565b6000818152600b602052604090208054606091906114f790613e7b565b80601f016020809104026020016040519081016040528092919081815260200182805461152390613e7b565b80156115705780601f1061154557610100808354040283529160200191611570565b820191906000526020600020905b81548152906001019060200180831161155357829003601f168201915b50505050509050919050565b6115866001611709565b6001600160a01b0316336001600160a01b0316146115b65760405162461bcd60e51b8152600401610a4990613ba9565b80516115c99060029060208401906130da565b5050565b3360009081526008602052604090205462010000900460ff1615156001146116075760405162461bcd60e51b8152600401610a4990613b16565b6011805460ff191660ff8d16179055611622600f8b8b61315e565b5061162f6010898961315e565b50600e54610100900460ff166116a857336001600160a01b03167fa6105ba66a6e1cdef460b79cd6a2d14f58d1e224f5bb876fafc51535c34ab6848c8c8c8a8a8a8a8a8a424360405161168c9b9a99989796959493929190613d65565b60405180910390a2600e805461ff0019166101001790556116fc565b60115460405133917f4248722dac0ab49fef08643fbc510e0343175ae223ca5cc5420e118e46da7198916116f39160ff16908e908e908c908c908c908c908c908c9042904390613d65565b60405180910390a25b5050505050505050505050565b6000818152600360205260408120546001600160a01b03168061093c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610a49565b336000908152600860205260409020546301000000900460ff161515600114610c815760405162461bcd60e51b815260206004820152602160248201527f45524337323154656d706c6174653a204e4f542053544f5245205550444154456044820152602960f91b6064820152608401610a49565b60006001600160a01b0382166118605760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a49565b506001600160a01b031660009081526004602052604090205490565b600e5460009060ff16156118ed5760405162461bcd60e51b815260206004820152603260248201527f45524337323154656d706c6174653a20746f6b656e20696e7374616e636520616044820152711b1c9958591e481a5b9a5d1a585b1a5e995960721b6064820152608401610a49565b60006119678a8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284376000920191909152508b925089915061247b9050565b905080801561197e57506001600160a01b03841615155b1561198c5761198c84611405565b9998505050505050505050565b600f8054610b9190613e7b565b6060600d805461095190613e7b565b6001600160a01b038216331415611a0e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a49565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101610d53565b611a7d6001611709565b6001600160a01b0316336001600160a01b031614611aad5760405162461bcd60e51b8152600401610a4990613ba9565b6110bf816125bb565b60098181548110611ac657600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526008602052604090205460ff161515600114611b145760405162461bcd60e51b8152600401610a4990613c7d565b611b21858585858561261b565b5050505050565b6000818152600360205260409020546060906001600160a01b0316611ba75760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610a49565b60008281526007602052604081208054611bc090613e7b565b80601f0160208091040260200160405190810160405280929190818152602001828054611bec90613e7b565b8015611c395780601f10611c0e57610100808354040283529160200191611c39565b820191906000526020600020905b815481529060010190602001808311611c1c57829003601f168201915b505050505090506000611c4a612844565b825190915015611c7f578082604051602001611c679291906139c6565b60405160208183030381529060405292505050919050565b5092915050565b606080600080600f6010601160009054906101000a900460ff16600e60019054906101000a900460ff16838054611cbc90613e7b565b80601f0160208091040260200160405190810160405280929190818152602001828054611ce890613e7b565b8015611d355780601f10611d0a57610100808354040283529160200191611d35565b820191906000526020600020905b815481529060010190602001808311611d1857829003601f168201915b50505050509350828054611d4890613e7b565b80601f0160208091040260200160405190810160405280929190818152602001828054611d7490613e7b565b8015611dc15780601f10611d9657610100808354040283529160200191611dc1565b820191906000526020600020905b815481529060010190602001808311611da457829003601f168201915b50505050509250935093509350935090919293565b611de06001611709565b6001600160a01b03166108fc479081150290604051600060405180830381858888f193505050501580156110bf573d6000803e3d6000fd5b3360009081526008602052604081205460ff610100909104161515600114611e915760405162461bcd60e51b815260206004820152602660248201527f45524337323154656d706c6174653a204e4f542045524332304445504c4f5945604482015265525f524f4c4560d01b6064820152608401610a49565b601154604051630557fcfb60e41b815260009161010090046001600160a01b03169063557fcfb090611ed7908e908e908e908e908e908e908e908e908e90600401613cb4565b602060405180830381600087803b158015611ef157600080fd5b505af1158015611f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f299190613356565b6001600160a01b0381166000818152601460205260408120805460ff191660019081179091556012805491820181559091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b03191690911790559150509998505050505050505050565b3360009081526008602052604090205460ff16151560011480611fee5750336001600160a01b038216148015611fee57503360009081526008602052604090205460ff6101009091041615156001145b15612054576001600160a01b03811660008181526008602052604090819020805461ff00191681559051909133917f59bd33f4c27cc16a2d74450e1fa43d7896020be9aecea4bee009db9294de899790610d539042904390918252602082015260400190565b60405162461bcd60e51b815260206004820152604360248201527f455243373231526f6c6573416464726573733a204e6f7420656e6f756768207060448201527f65726d697373696f6e7320746f2072656d6f76652066726f6d2045524332304c6064820152621a5cdd60ea1b608482015260a401610a49565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061210382611709565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000838152600b6020526040902061215590838361315e565b50827fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b28383604051612188929190613a7f565b60405180910390a2505050565b6000828152600360205260409020546001600160a01b03166122105760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610a49565b60008281526007602090815260409091208251610b7f928401906130da565b60005b818110156115c9576012818154811061224d5761224d613ee7565b6000918252602082200154604080516382c03da560e01b815290516001600160a01b03909216926382c03da59260048084019382900301818387803b15801561229557600080fd5b505af11580156122a9573d6000803e3d6000fd5b5050505080806122b890613eb6565b915050612232565b60005b60095481101561232857600060086000600984815481106122e6576122e6613ee7565b60009182526020808320909101546001600160a01b031683528201929092526040019020805463ffffffff19169055508061232081613eb6565b9150506122c3565b50612335600960006131d2565b6040805142815243602082015233917f712bc71db81927a76b8bf1ea346247bb0ad58f18e4e5c1bd4aa0ec6573e02a2b910160405180910390a2565b61237b3382612853565b6123975760405162461bcd60e51b8152600401610a4990613c2c565b610b7f83838360405180602001604052806000815250612443565b6001600160a01b038116600081815260086020526040808220805460ff191660019081178255600980549182018155909352600080516020613f3f83398151915290920180546001600160a01b0319168417905551909133917faf8fc8b6726138c96881c895390a08e9d91a94c288f06281e7f9821c49c7155b90610d539042904390918252602082015260400190565b61244d3383612853565b6124695760405162461bcd60e51b8152600401610a4990613c2c565b6124758484848461294a565b50505050565b60006001600160a01b0386166124ea5760405162461bcd60e51b815260206004820152602e60248201527f45524337323154656d706c6174653a3a20496e76616c6964206d696e7465722c60448201526d20207a65726f206164647265737360901b6064820152608401610a49565b84516124fd90600c9060208801906130da565b50835161251190600d9060208701906130da565b5060118054610100600160a81b0319166101006001600160a01b03861602179055604080516020810191829052600090819052612550916002916130da565b50600e805461ffff1916600190811790915561256d90879061297d565b612576866123b2565b6001600160a01b0386166000908152600860205260409020805463ffffff00191663010101001781556125aa600184612195565b5050600e5460ff1695945050505050565b6001600160a01b03811660008181526008602052604090819020805460ff191681559051909133917fb572db0e6da4924b771ed1712b980d48b5992b9a1c27aede55fbb3318c48996a90610d539042904390918252602082015260400190565b82846001600160a01b0316867f1f920dbda597d7bf95035464170fa58d0a4b57f13a1c315ace6793b9f63688b88585604051612658929190613a7f565b60405180910390a460006109c45a6126709190613e38565b9050856126c0576126ba858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250612997915050565b5061283c565b6003861415612709576126ba8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129af92505050565b60028614156127fd57600061276084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061275b925060209150879050613e38565b612a4b565b905060006127af85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092506127aa91506020905088613e38565b612aa9565b905060006127be878484612bb6565b6040519091506001600160a01b038216907fcf78cf0d6f3d8371e1075c69c492ab4ec5d8cf23a1a239b6a51a1d00be7ca31290600090a250505061283c565b60405162461bcd60e51b815260206004820152601460248201527357726f6e67206f7065726174696f6e207479706560601b6044820152606401610a49565b505050505050565b60606002805461095190613e7b565b6000818152600360205260408120546001600160a01b03166128cc5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a49565b60006128d783611709565b9050806001600160a01b0316846001600160a01b031614806129125750836001600160a01b0316612907846109d4565b6001600160a01b0316145b8061294257506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b612955848484612cb8565b61296184848484612e58565b6124755760405162461bcd60e51b8152600401610a4990613b57565b6115c9828260405180602001604052806000815250612f65565b6000806000845160208601878987f195945050505050565b600081516020830184f090506001600160a01b038116612a115760405162461bcd60e51b815260206004820152601960248201527f436f756c64206e6f74206465706c6f7920636f6e7472616374000000000000006044820152606401610a49565b6040516001600160a01b038216907fcf78cf0d6f3d8371e1075c69c492ab4ec5d8cf23a1a239b6a51a1d00be7ca31290600090a292915050565b6000612a58826020613e20565b83511015612aa05760405162461bcd60e51b8152602060048201526015602482015274746f427974657333325f6f75744f66426f756e647360581b6044820152606401610a49565b50016020015190565b606081612ab781601f613e20565b1015612af65760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610a49565b612b008284613e20565b84511015612b445760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610a49565b606082158015612b635760405191506000825260208201604052612bad565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612b9c578051835260209283019201612b84565b5050858452601f01601f1916604052505b50949350505050565b60008084471015612c095760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610a49565b8251612c575760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610a49565b8383516020850187f590506001600160a01b0381166129425760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610a49565b826001600160a01b0316612ccb82611709565b6001600160a01b031614612d335760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610a49565b6001600160a01b038216612d955760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a49565b612da06000826120ce565b6001600160a01b0383166000908152600460205260408120805460019290612dc9908490613e38565b90915550506001600160a01b0382166000908152600460205260408120805460019290612df7908490613e20565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006001600160a01b0384163b15612f5a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612e9c9033908990889088906004016139f5565b602060405180830381600087803b158015612eb657600080fd5b505af1925050508015612ee6575060408051601f3d908101601f19168201909252612ee39181019061359d565b60015b612f40573d808015612f14576040519150601f19603f3d011682016040523d82523d6000602084013e612f19565b606091505b508051612f385760405162461bcd60e51b8152600401610a4990613b57565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612942565b506001949350505050565b612f6f8383612f98565b612f7c6000848484612e58565b610b7f5760405162461bcd60e51b8152600401610a4990613b57565b6001600160a01b038216612fee5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a49565b6000818152600360205260409020546001600160a01b0316156130535760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a49565b6001600160a01b038216600090815260046020526040812080546001929061307c908490613e20565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546130e690613e7b565b90600052602060002090601f016020900481019282613108576000855561314e565b82601f1061312157805160ff191683800117855561314e565b8280016001018555821561314e579182015b8281111561314e578251825591602001919060010190613133565b5061315a9291506131ec565b5090565b82805461316a90613e7b565b90600052602060002090601f01602090048101928261318c576000855561314e565b82601f106131a55782800160ff1982351617855561314e565b8280016001018555821561314e579182015b8281111561314e5782358255916020019190600101906131b7565b50805460008255906000526020600020908101906110bf91905b5b8082111561315a57600081556001016131ed565b60008083601f84011261321357600080fd5b50813567ffffffffffffffff81111561322b57600080fd5b6020830191508360208260051b850101111561324657600080fd5b9250929050565b60008083601f84011261325f57600080fd5b50813567ffffffffffffffff81111561327757600080fd5b60208301915083602082850101111561324657600080fd5b600082601f8301126132a057600080fd5b813567ffffffffffffffff808211156132bb576132bb613efd565b604051601f8301601f19908116603f011681019082821181831017156132e3576132e3613efd565b816040528381528660208588010111156132fc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803560ff8116811461332d57600080fd5b919050565b60006020828403121561334457600080fd5b813561334f81613f13565b9392505050565b60006020828403121561336857600080fd5b815161334f81613f13565b6000806040838503121561338657600080fd5b823561339181613f13565b915060208301356133a181613f13565b809150509250929050565b6000806000606084860312156133c157600080fd5b83356133cc81613f13565b925060208401356133dc81613f13565b929592945050506040919091013590565b6000806040838503121561340057600080fd5b823561340b81613f13565b9150602083013580151581146133a157600080fd5b60008060008060008060008060c0898b03121561343c57600080fd5b883561344781613f13565b9750602089013567ffffffffffffffff8082111561346457600080fd5b6134708c838d0161324d565b909950975060408b013591508082111561348957600080fd5b6134958c838d0161324d565b909750955060608b013591506134aa82613f13565b90935060808a0135906134bc82613f13565b90925060a08a013590808211156134d257600080fd5b506134df8b828c0161328f565b9150509295985092959890939650565b6000806040838503121561350257600080fd5b823561350d81613f13565b946020939093013593505050565b60006020828403121561352d57600080fd5b5035919050565b60008060006040848603121561354957600080fd5b83359250602084013567ffffffffffffffff81111561356757600080fd5b6135738682870161324d565b9497909650939450505050565b60006020828403121561359257600080fd5b813561334f81613f28565b6000602082840312156135af57600080fd5b815161334f81613f28565b6000602082840312156135cc57600080fd5b813567ffffffffffffffff8111156135e357600080fd5b6129428482850161328f565b60008060008060006080868803121561360757600080fd5b85359450602086013561361981613f13565b935060408601359250606086013567ffffffffffffffff81111561363c57600080fd5b6136488882890161324d565b969995985093965092949392505050565b600080600080600080600080600060a08a8c03121561367757600080fd5b8935985060208a013567ffffffffffffffff8082111561369657600080fd5b6136a28d838e01613201565b909a50985060408c01359150808211156136bb57600080fd5b6136c78d838e01613201565b909850965060608c01359150808211156136e057600080fd5b6136ec8d838e01613201565b909650945060808c013591508082111561370557600080fd5b506137128c828d01613201565b915080935050809150509295985092959850929598565b6000806040838503121561373c57600080fd5b82359150602083013567ffffffffffffffff81111561375a57600080fd5b6137668582860161328f565b9150509250929050565b60006020828403121561378257600080fd5b61334f8261331c565b600080600080600080600080600080600060c08c8e0312156137ac57600080fd5b6137b58c61331c565b9a5067ffffffffffffffff8060208e013511156137d157600080fd5b6137e18e60208f01358f0161324d565b909b50995060408d01358110156137f757600080fd5b6138078e60408f01358f0161324d565b909950975060608d013581101561381d57600080fd5b61382d8e60608f01358f0161324d565b909750955060808d013581101561384357600080fd5b6138538e60808f01358f0161324d565b909550935060a08d013581101561386957600080fd5b5061387a8d60a08e01358e0161324d565b81935080925050509295989b509295989b9093969950565b8183526000602080850194508260005b858110156138d05781356138b581613f13565b6001600160a01b0316875295820195908201906001016138a2565b509495945050505050565b60008383855260208086019550808560051b8301018460005b8781101561392e57848303601f1901895261390f8288613dda565b61391a858284613971565b9a86019a94505050908301906001016138f4565b5090979650505050505050565b81835260006001600160fb1b0383111561395457600080fd5b8260051b8083602087013760009401602001938452509192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526139b2816020860160208601613e4f565b601f01601f19169290920160200192915050565b600083516139d8818460208801613e4f565b8351908301906139ec818360208801613e4f565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613a289083018461399a565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613a735783516001600160a01b031683529284019291840191600101613a4e565b50909695505050505050565b602081526000612942602083018486613971565b60208152600061334f602083018461399a565b608081526000613ab9608083018761399a565b8281036020840152613acb818761399a565b60ff959095166040840152505090151560609091015292915050565b608081526000613afa608083018761399a565b6020830195909552506040810192909252606090910152919050565b60208082526021908201527f45524337323154656d706c6174653a204e4f54204d455441444154415f524f4c6040820152604560f81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601c908201527f45524337323154656d706c6174653a206e6f74204e46544f776e657200000000604082015260600190565b6020808252602c908201527f45524337323154656d706c6174653a2043616e6e6f74207472616e736665722060408201526b1d1a1a5cc81d1bdad95b925960a21b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f455243373231526f6c6573416464726573733a204e4f54204d414e4147455200604082015260600190565b89815260a0602082018190528101889052600060c060058a901b830181019083018b835b8c811015613d155785840360bf19018352613cf3828f613dda565b613cfe868284613971565b955050506020928301929190910190600101613cd8565b5050508281036040840152613d2b81898b613892565b90508281036060840152613d4081878961393b565b90508281036080840152613d558185876138db565b9c9b505050505050505050505050565b60ff8c16815260e060208201526000613d8260e083018c8e613971565b8281036040840152613d95818b8d613971565b90508281036060840152613daa81898b613971565b90508281036080840152613dbf818789613971565b60a0840195909552505060c001529998505050505050505050565b6000808335601e19843603018112613df157600080fd5b830160208101925035905067ffffffffffffffff811115613e1157600080fd5b80360383131561324657600080fd5b60008219821115613e3357613e33613ed1565b500190565b600082821015613e4a57613e4a613ed1565b500390565b60005b83811015613e6a578181015183820152602001613e52565b838111156124755750506000910152565b600181811c90821680613e8f57607f821691505b60208210811415613eb057634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613eca57613eca613ed1565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146110bf57600080fd5b6001600160e01b0319811681146110bf57600080fdfe6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7afa26469706673582212204c231a3bce15f250b613e00cba4696c7844ed8b7525de2c0e7d50b3f89f9239b64736f6c63430008070033",
"deployedBytecode": "0x60806040526004361061025d5760003560e01c806355f804b311610143578063a22cb465116100bb578063d2786ba411610077578063d2786ba41461082d578063d8053ad314610852578063e086e5ec14610871578063e38d7cad14610879578063e985e9c514610899578063fe1ec880146108e257005b8063a22cb46514610780578063ac18de43146107a0578063b0c41ead146107c0578063c55f8126146107e0578063c87b56dd146107f3578063ccd7d4761461081357005b806370a082311161010a57806370a082311461069157806370c166d7146106bf57806382cf129d146106df57806390184b02146106f457806395d89b411461072d57806396fb3eaf1461074257005b806355f804b3146105ef5780635d1ca6311461060f5780635d5dea24146106315780636352211e1461065157806367530a611461067157005b8063273e06b3116101d6578063466bca021161019d578063466bca0214610538578063467c97f51461055a5780634a63740a1461057a5780634b2ee5e91461059a5780634f189cb2146105ba57806354f6127f146105cf57005b8063273e06b3146104a05780632d06177a146104c0578063392e53cd146104e057806342842e0e146104f8578063431053ac1461051857005b80630e57c7e8116102255780630e57c7e81461032357806310c558bf14610343578063160a792514610363578063162094c41461044057806319c186e51461046057806323b872dd1461048057005b806301ffc9a71461025f57806306fdde0314610294578063081812fc146102b6578063095ea7b3146102ee5780630e05662e1461030e575b005b34801561026b57600080fd5b5061027f61027a366004613580565b610902565b60405190151581526020015b60405180910390f35b3480156102a057600080fd5b506102a9610942565b60405161028b9190613a93565b3480156102c257600080fd5b506102d66102d136600461351b565b6109d4565b6040516001600160a01b03909116815260200161028b565b3480156102fa57600080fd5b5061025d6103093660046134ef565b610a6e565b34801561031a57600080fd5b506102a9610b84565b34801561032f57600080fd5b5061025d61033e366004613534565b610c12565b34801561034f57600080fd5b5061025d61035e366004613332565b610c8c565b34801561036f57600080fd5b5061040561037e366004613332565b604080516080810182526000808252602082018190529181018290526060810191909152506001600160a01b03166000908152600860209081526040918290208251608081018452905460ff808216151583526101008204811615159383019390935262010000810483161515938201939093526301000000909204161515606082015290565b60405161028b919081511515815260208083015115159082015260408083015115159082015260609182015115159181019190915260800190565b34801561044c57600080fd5b5061025d61045b366004613729565b610d5f565b34801561046c57600080fd5b5061025d61047b366004613332565b610dee565b34801561048c57600080fd5b5061025d61049b3660046133ac565b610eb7565b3480156104ac57600080fd5b5061025d6104bb366004613332565b610f89565b3480156104cc57600080fd5b5061025d6104db366004613332565b6110c2565b3480156104ec57600080fd5b50600e5460ff1661027f565b34801561050457600080fd5b5061025d6105133660046133ac565b611105565b34801561052457600080fd5b5061025d610533366004613332565b6111ab565b34801561054457600080fd5b5061054d6112e0565b60405161028b9190613a32565b34801561056657600080fd5b5061025d610575366004613770565b611341565b34801561058657600080fd5b5061025d610595366004613332565b6113d1565b3480156105a657600080fd5b506013546102d6906001600160a01b031681565b3480156105c657600080fd5b5061025d611496565b3480156105db57600080fd5b506102a96105ea36600461351b565b6114da565b3480156105fb57600080fd5b5061025d61060a3660046135ba565b61157c565b34801561061b57600080fd5b5060015b60405160ff909116815260200161028b565b34801561063d57600080fd5b5061025d61064c36600461378b565b6115cd565b34801561065d57600080fd5b506102d661066c36600461351b565b611709565b34801561067d57600080fd5b5061025d61068c366004613534565b611780565b34801561069d57600080fd5b506106b16106ac366004613332565b6117f5565b60405190815260200161028b565b3480156106cb57600080fd5b5061027f6106da366004613420565b61187c565b3480156106eb57600080fd5b506102a9611999565b34801561070057600080fd5b5061027f61070f366004613332565b6001600160a01b031660009081526014602052604090205460ff1690565b34801561073957600080fd5b506102a96119a6565b34801561074e57600080fd5b5061027f61075d366004613332565b6001600160a01b0316600090815260086020526040902054610100900460ff1690565b34801561078c57600080fd5b5061025d61079b3660046133ed565b6119b5565b3480156107ac57600080fd5b5061025d6107bb366004613332565b611a73565b3480156107cc57600080fd5b506102d66107db36600461351b565b611ab6565b61025d6107ee3660046135ef565b611ae0565b3480156107ff57600080fd5b506102a961080e36600461351b565b611b28565b34801561081f57600080fd5b5060115461061f9060ff1681565b34801561083957600080fd5b50610842611c86565b60405161028b9493929190613aa6565b34801561085e57600080fd5b50600e5461027f90610100900460ff1681565b61025d611dd6565b34801561088557600080fd5b506102d6610894366004613659565b611e18565b3480156108a557600080fd5b5061027f6108b4366004613373565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b3480156108ee57600080fd5b5061025d6108fd366004613332565b611f9e565b60006301ffc9a760e01b6001600160e01b03198316148061093c57506001600160e01b031982166000908152600a602052604090205460ff165b92915050565b6060600c805461095190613e7b565b80601f016020809104026020016040519081016040528092919081815260200182805461097d90613e7b565b80156109ca5780601f1061099f576101008083540402835291602001916109ca565b820191906000526020600020905b8154815290600101906020018083116109ad57829003601f168201915b5050505050905090565b6000818152600360205260408120546001600160a01b0316610a525760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b60648201526084015b60405180910390fd5b506000908152600560205260409020546001600160a01b031690565b6000610a7982611709565b9050806001600160a01b0316836001600160a01b03161415610ae75760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610a49565b336001600160a01b0382161480610b035750610b0381336108b4565b610b755760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610a49565b610b7f83836120ce565b505050565b60108054610b9190613e7b565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbd90613e7b565b8015610c0a5780601f10610bdf57610100808354040283529160200191610c0a565b820191906000526020600020905b815481529060010190602001808311610bed57829003601f168201915b505050505081565b3360009081526014602052604090205460ff161515600114610c815760405162461bcd60e51b815260206004820152602260248201527f45524337323154656d706c6174653a204e4f5420455243323020436f6e74726160448201526118dd60f21b6064820152608401610a49565b610b7f83838361213c565b3360009081526008602052604090205460ff161515600114610cc05760405162461bcd60e51b8152600401610a4990613c7d565b6001600160a01b038116600081815260086020526040808220805462ff0000191662010000178155600980546001810182559352600080516020613f3f83398151915290920180546001600160a01b0319168417905551909133917fc2a42571a74ce1442c8c44d375ba9442e7d55d94b37afeace261c83c62128fa490610d539042904390918252602082015260400190565b60405180910390a35050565b610d696001611709565b6001600160a01b0316336001600160a01b031614610d995760405162461bcd60e51b8152600401610a4990613ba9565b610da38282612195565b336001600160a01b03167f6de6cd3982065cbd31e789e3109106f4d76d1c8a46e85262045cf947fb3fd4ed82844243604051610de29493929190613ae7565b60405180910390a25050565b3360009081526008602052604090205460ff161515600114610e225760405162461bcd60e51b8152600401610a4990613c7d565b6001600160a01b038116600081815260086020526040808220805463ff00000019166301000000178155600980546001810182559352600080516020613f3f83398151915290920180546001600160a01b0319168417905551909133917feb09276310ed110a7e565d64966d0ff68a47112d2dd5eeb6cbd7451836ce35ee90610d539042904390918252602082015260400190565b80600114610ed75760405162461bcd60e51b8152600401610a4990613be0565b610f41610f3c6012805480602002602001604051908101604052809291908181526020018280548015610f3357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610f15575b50505050505190565b61222f565b610f496122c0565b610f54838383612371565b610f5d826123b2565b506001600160a01b03166000908152600860205260409020805463ffffff001916630101010017905550565b3360009081526008602052604090205460ff16151560011480610fda5750336001600160a01b038216148015610fda5750336000908152600860205260409020546301000000900460ff1615156001145b15611042576001600160a01b03811660008181526008602052604090819020805463ff000000191681559051909133917fc929b18b08ffea86a1f95e29384dbe8968f2fcbd70cfd735df3aba1cc548cbf390610d539042904390918252602082015260400190565b60405162461bcd60e51b815260206004820152604660248201527f455243373231526f6c6573416464726573733a204e6f7420656e6f756768207060448201527f65726d697373696f6e7320746f2072656d6f76652066726f6d2037323553746f6064820152651c99531a5cdd60d21b608482015260a401610a49565b50565b6110cc6001611709565b6001600160a01b0316336001600160a01b0316146110fc5760405162461bcd60e51b8152600401610a4990613ba9565b6110bf816123b2565b806001146111255760405162461bcd60e51b8152600401610a4990613be0565b611188610f3c6012805480602002602001604051908101604052809291908181526020018280548015610f33576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610f155750505050505190565b6111906122c0565b610f5483838360405180602001604052806000815250612443565b3360009081526008602052604090205460ff161515600114806111fb5750336001600160a01b0382161480156111fb57503360009081526008602052604090205462010000900460ff1615156001145b15611262576001600160a01b03811660008181526008602052604090819020805462ff0000191681559051909133917f9b41e1311fa819e825bc77fa2568492112e15ea92d173f3f8ee1c8ec3c1c562b90610d539042904390918252602082015260400190565b60405162461bcd60e51b815260206004820152604760248201527f455243373231526f6c6573416464726573733a204e6f7420656e6f756768207060448201527f65726d697373696f6e7320746f2072656d6f76652066726f6d206d65746164616064820152661d18481b1a5cdd60ca1b608482015260a401610a49565b606060128054806020026020016040519081016040528092919081815260200182805480156109ca57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161131a575050505050905090565b3360009081526008602052604090205462010000900460ff16151560011461137b5760405162461bcd60e51b8152600401610a4990613b16565b6011805460ff191660ff831690811790915560408051918252426020830152439082015233907fa8336411cc72db0e5bdc4dff989eeb35879bafaceffb59b54b37645c3395adb99060600160405180910390a250565b3360009081526008602052604090205460ff1615156001146114055760405162461bcd60e51b8152600401610a4990613c7d565b6001600160a01b038116600081815260086020526040808220805461ff001916610100178155600980546001810182559352600080516020613f3f83398151915290920180546001600160a01b0319168417905551909133917f0572d56343be407a66810f01449212e8545e14ff5049c479d34be944cdfd0d4f90610d539042904390918252602082015260400190565b6114a06001611709565b6001600160a01b0316336001600160a01b0316146114d05760405162461bcd60e51b8152600401610a4990613ba9565b6114d86122c0565b565b6000818152600b602052604090208054606091906114f790613e7b565b80601f016020809104026020016040519081016040528092919081815260200182805461152390613e7b565b80156115705780601f1061154557610100808354040283529160200191611570565b820191906000526020600020905b81548152906001019060200180831161155357829003601f168201915b50505050509050919050565b6115866001611709565b6001600160a01b0316336001600160a01b0316146115b65760405162461bcd60e51b8152600401610a4990613ba9565b80516115c99060029060208401906130da565b5050565b3360009081526008602052604090205462010000900460ff1615156001146116075760405162461bcd60e51b8152600401610a4990613b16565b6011805460ff191660ff8d16179055611622600f8b8b61315e565b5061162f6010898961315e565b50600e54610100900460ff166116a857336001600160a01b03167fa6105ba66a6e1cdef460b79cd6a2d14f58d1e224f5bb876fafc51535c34ab6848c8c8c8a8a8a8a8a8a424360405161168c9b9a99989796959493929190613d65565b60405180910390a2600e805461ff0019166101001790556116fc565b60115460405133917f4248722dac0ab49fef08643fbc510e0343175ae223ca5cc5420e118e46da7198916116f39160ff16908e908e908c908c908c908c908c908c9042904390613d65565b60405180910390a25b5050505050505050505050565b6000818152600360205260408120546001600160a01b03168061093c5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460448201526832b73a103a37b5b2b760b91b6064820152608401610a49565b336000908152600860205260409020546301000000900460ff161515600114610c815760405162461bcd60e51b815260206004820152602160248201527f45524337323154656d706c6174653a204e4f542053544f5245205550444154456044820152602960f91b6064820152608401610a49565b60006001600160a01b0382166118605760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610a49565b506001600160a01b031660009081526004602052604090205490565b600e5460009060ff16156118ed5760405162461bcd60e51b815260206004820152603260248201527f45524337323154656d706c6174653a20746f6b656e20696e7374616e636520616044820152711b1c9958591e481a5b9a5d1a585b1a5e995960721b6064820152608401610a49565b60006119678a8a8a8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050604080516020601f8e018190048102820181019092528c815292508c91508b90819084018382808284376000920191909152508b925089915061247b9050565b905080801561197e57506001600160a01b03841615155b1561198c5761198c84611405565b9998505050505050505050565b600f8054610b9190613e7b565b6060600d805461095190613e7b565b6001600160a01b038216331415611a0e5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610a49565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c319101610d53565b611a7d6001611709565b6001600160a01b0316336001600160a01b031614611aad5760405162461bcd60e51b8152600401610a4990613ba9565b6110bf816125bb565b60098181548110611ac657600080fd5b6000918252602090912001546001600160a01b0316905081565b3360009081526008602052604090205460ff161515600114611b145760405162461bcd60e51b8152600401610a4990613c7d565b611b21858585858561261b565b5050505050565b6000818152600360205260409020546060906001600160a01b0316611ba75760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610a49565b60008281526007602052604081208054611bc090613e7b565b80601f0160208091040260200160405190810160405280929190818152602001828054611bec90613e7b565b8015611c395780601f10611c0e57610100808354040283529160200191611c39565b820191906000526020600020905b815481529060010190602001808311611c1c57829003601f168201915b505050505090506000611c4a612844565b825190915015611c7f578082604051602001611c679291906139c6565b60405160208183030381529060405292505050919050565b5092915050565b606080600080600f6010601160009054906101000a900460ff16600e60019054906101000a900460ff16838054611cbc90613e7b565b80601f0160208091040260200160405190810160405280929190818152602001828054611ce890613e7b565b8015611d355780601f10611d0a57610100808354040283529160200191611d35565b820191906000526020600020905b815481529060010190602001808311611d1857829003601f168201915b50505050509350828054611d4890613e7b565b80601f0160208091040260200160405190810160405280929190818152602001828054611d7490613e7b565b8015611dc15780601f10611d9657610100808354040283529160200191611dc1565b820191906000526020600020905b815481529060010190602001808311611da457829003601f168201915b50505050509250935093509350935090919293565b611de06001611709565b6001600160a01b03166108fc479081150290604051600060405180830381858888f193505050501580156110bf573d6000803e3d6000fd5b3360009081526008602052604081205460ff610100909104161515600114611e915760405162461bcd60e51b815260206004820152602660248201527f45524337323154656d706c6174653a204e4f542045524332304445504c4f5945604482015265525f524f4c4560d01b6064820152608401610a49565b601154604051630557fcfb60e41b815260009161010090046001600160a01b03169063557fcfb090611ed7908e908e908e908e908e908e908e908e908e90600401613cb4565b602060405180830381600087803b158015611ef157600080fd5b505af1158015611f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f299190613356565b6001600160a01b0381166000818152601460205260408120805460ff191660019081179091556012805491820181559091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b03191690911790559150509998505050505050505050565b3360009081526008602052604090205460ff16151560011480611fee5750336001600160a01b038216148015611fee57503360009081526008602052604090205460ff6101009091041615156001145b15612054576001600160a01b03811660008181526008602052604090819020805461ff00191681559051909133917f59bd33f4c27cc16a2d74450e1fa43d7896020be9aecea4bee009db9294de899790610d539042904390918252602082015260400190565b60405162461bcd60e51b815260206004820152604360248201527f455243373231526f6c6573416464726573733a204e6f7420656e6f756768207060448201527f65726d697373696f6e7320746f2072656d6f76652066726f6d2045524332304c6064820152621a5cdd60ea1b608482015260a401610a49565b600081815260056020526040902080546001600160a01b0319166001600160a01b038416908117909155819061210382611709565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000838152600b6020526040902061215590838361315e565b50827fece574603820d07bc9b91f2a932baadf4628aabcb8afba49776529c14a6104b28383604051612188929190613a7f565b60405180910390a2505050565b6000828152600360205260409020546001600160a01b03166122105760405162461bcd60e51b815260206004820152602e60248201527f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60448201526d32bc34b9ba32b73a103a37b5b2b760911b6064820152608401610a49565b60008281526007602090815260409091208251610b7f928401906130da565b60005b818110156115c9576012818154811061224d5761224d613ee7565b6000918252602082200154604080516382c03da560e01b815290516001600160a01b03909216926382c03da59260048084019382900301818387803b15801561229557600080fd5b505af11580156122a9573d6000803e3d6000fd5b5050505080806122b890613eb6565b915050612232565b60005b60095481101561232857600060086000600984815481106122e6576122e6613ee7565b60009182526020808320909101546001600160a01b031683528201929092526040019020805463ffffffff19169055508061232081613eb6565b9150506122c3565b50612335600960006131d2565b6040805142815243602082015233917f712bc71db81927a76b8bf1ea346247bb0ad58f18e4e5c1bd4aa0ec6573e02a2b910160405180910390a2565b61237b3382612853565b6123975760405162461bcd60e51b8152600401610a4990613c2c565b610b7f83838360405180602001604052806000815250612443565b6001600160a01b038116600081815260086020526040808220805460ff191660019081178255600980549182018155909352600080516020613f3f83398151915290920180546001600160a01b0319168417905551909133917faf8fc8b6726138c96881c895390a08e9d91a94c288f06281e7f9821c49c7155b90610d539042904390918252602082015260400190565b61244d3383612853565b6124695760405162461bcd60e51b8152600401610a4990613c2c565b6124758484848461294a565b50505050565b60006001600160a01b0386166124ea5760405162461bcd60e51b815260206004820152602e60248201527f45524337323154656d706c6174653a3a20496e76616c6964206d696e7465722c60448201526d20207a65726f206164647265737360901b6064820152608401610a49565b84516124fd90600c9060208801906130da565b50835161251190600d9060208701906130da565b5060118054610100600160a81b0319166101006001600160a01b03861602179055604080516020810191829052600090819052612550916002916130da565b50600e805461ffff1916600190811790915561256d90879061297d565b612576866123b2565b6001600160a01b0386166000908152600860205260409020805463ffffff00191663010101001781556125aa600184612195565b5050600e5460ff1695945050505050565b6001600160a01b03811660008181526008602052604090819020805460ff191681559051909133917fb572db0e6da4924b771ed1712b980d48b5992b9a1c27aede55fbb3318c48996a90610d539042904390918252602082015260400190565b82846001600160a01b0316867f1f920dbda597d7bf95035464170fa58d0a4b57f13a1c315ace6793b9f63688b88585604051612658929190613a7f565b60405180910390a460006109c45a6126709190613e38565b9050856126c0576126ba858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250879250612997915050565b5061283c565b6003861415612709576126ba8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506129af92505050565b60028614156127fd57600061276084848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061275b925060209150879050613e38565b612a4b565b905060006127af85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525092506127aa91506020905088613e38565b612aa9565b905060006127be878484612bb6565b6040519091506001600160a01b038216907fcf78cf0d6f3d8371e1075c69c492ab4ec5d8cf23a1a239b6a51a1d00be7ca31290600090a250505061283c565b60405162461bcd60e51b815260206004820152601460248201527357726f6e67206f7065726174696f6e207479706560601b6044820152606401610a49565b505050505050565b60606002805461095190613e7b565b6000818152600360205260408120546001600160a01b03166128cc5760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610a49565b60006128d783611709565b9050806001600160a01b0316846001600160a01b031614806129125750836001600160a01b0316612907846109d4565b6001600160a01b0316145b8061294257506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b612955848484612cb8565b61296184848484612e58565b6124755760405162461bcd60e51b8152600401610a4990613b57565b6115c9828260405180602001604052806000815250612f65565b6000806000845160208601878987f195945050505050565b600081516020830184f090506001600160a01b038116612a115760405162461bcd60e51b815260206004820152601960248201527f436f756c64206e6f74206465706c6f7920636f6e7472616374000000000000006044820152606401610a49565b6040516001600160a01b038216907fcf78cf0d6f3d8371e1075c69c492ab4ec5d8cf23a1a239b6a51a1d00be7ca31290600090a292915050565b6000612a58826020613e20565b83511015612aa05760405162461bcd60e51b8152602060048201526015602482015274746f427974657333325f6f75744f66426f756e647360581b6044820152606401610a49565b50016020015190565b606081612ab781601f613e20565b1015612af65760405162461bcd60e51b815260206004820152600e60248201526d736c6963655f6f766572666c6f7760901b6044820152606401610a49565b612b008284613e20565b84511015612b445760405162461bcd60e51b8152602060048201526011602482015270736c6963655f6f75744f66426f756e647360781b6044820152606401610a49565b606082158015612b635760405191506000825260208201604052612bad565b6040519150601f8416801560200281840101858101878315602002848b0101015b81831015612b9c578051835260209283019201612b84565b5050858452601f01601f1916604052505b50949350505050565b60008084471015612c095760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401610a49565b8251612c575760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401610a49565b8383516020850187f590506001600160a01b0381166129425760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401610a49565b826001600160a01b0316612ccb82611709565b6001600160a01b031614612d335760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610a49565b6001600160a01b038216612d955760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610a49565b612da06000826120ce565b6001600160a01b0383166000908152600460205260408120805460019290612dc9908490613e38565b90915550506001600160a01b0382166000908152600460205260408120805460019290612df7908490613e20565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b0386811691821790925591518493918716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006001600160a01b0384163b15612f5a57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290612e9c9033908990889088906004016139f5565b602060405180830381600087803b158015612eb657600080fd5b505af1925050508015612ee6575060408051601f3d908101601f19168201909252612ee39181019061359d565b60015b612f40573d808015612f14576040519150601f19603f3d011682016040523d82523d6000602084013e612f19565b606091505b508051612f385760405162461bcd60e51b8152600401610a4990613b57565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050612942565b506001949350505050565b612f6f8383612f98565b612f7c6000848484612e58565b610b7f5760405162461bcd60e51b8152600401610a4990613b57565b6001600160a01b038216612fee5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610a49565b6000818152600360205260409020546001600160a01b0316156130535760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610a49565b6001600160a01b038216600090815260046020526040812080546001929061307c908490613e20565b909155505060008181526003602052604080822080546001600160a01b0319166001600160a01b03861690811790915590518392907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b8280546130e690613e7b565b90600052602060002090601f016020900481019282613108576000855561314e565b82601f1061312157805160ff191683800117855561314e565b8280016001018555821561314e579182015b8281111561314e578251825591602001919060010190613133565b5061315a9291506131ec565b5090565b82805461316a90613e7b565b90600052602060002090601f01602090048101928261318c576000855561314e565b82601f106131a55782800160ff1982351617855561314e565b8280016001018555821561314e579182015b8281111561314e5782358255916020019190600101906131b7565b50805460008255906000526020600020908101906110bf91905b5b8082111561315a57600081556001016131ed565b60008083601f84011261321357600080fd5b50813567ffffffffffffffff81111561322b57600080fd5b6020830191508360208260051b850101111561324657600080fd5b9250929050565b60008083601f84011261325f57600080fd5b50813567ffffffffffffffff81111561327757600080fd5b60208301915083602082850101111561324657600080fd5b600082601f8301126132a057600080fd5b813567ffffffffffffffff808211156132bb576132bb613efd565b604051601f8301601f19908116603f011681019082821181831017156132e3576132e3613efd565b816040528381528660208588010111156132fc57600080fd5b836020870160208301376000602085830101528094505050505092915050565b803560ff8116811461332d57600080fd5b919050565b60006020828403121561334457600080fd5b813561334f81613f13565b9392505050565b60006020828403121561336857600080fd5b815161334f81613f13565b6000806040838503121561338657600080fd5b823561339181613f13565b915060208301356133a181613f13565b809150509250929050565b6000806000606084860312156133c157600080fd5b83356133cc81613f13565b925060208401356133dc81613f13565b929592945050506040919091013590565b6000806040838503121561340057600080fd5b823561340b81613f13565b9150602083013580151581146133a157600080fd5b60008060008060008060008060c0898b03121561343c57600080fd5b883561344781613f13565b9750602089013567ffffffffffffffff8082111561346457600080fd5b6134708c838d0161324d565b909950975060408b013591508082111561348957600080fd5b6134958c838d0161324d565b909750955060608b013591506134aa82613f13565b90935060808a0135906134bc82613f13565b90925060a08a013590808211156134d257600080fd5b506134df8b828c0161328f565b9150509295985092959890939650565b6000806040838503121561350257600080fd5b823561350d81613f13565b946020939093013593505050565b60006020828403121561352d57600080fd5b5035919050565b60008060006040848603121561354957600080fd5b83359250602084013567ffffffffffffffff81111561356757600080fd5b6135738682870161324d565b9497909650939450505050565b60006020828403121561359257600080fd5b813561334f81613f28565b6000602082840312156135af57600080fd5b815161334f81613f28565b6000602082840312156135cc57600080fd5b813567ffffffffffffffff8111156135e357600080fd5b6129428482850161328f565b60008060008060006080868803121561360757600080fd5b85359450602086013561361981613f13565b935060408601359250606086013567ffffffffffffffff81111561363c57600080fd5b6136488882890161324d565b969995985093965092949392505050565b600080600080600080600080600060a08a8c03121561367757600080fd5b8935985060208a013567ffffffffffffffff8082111561369657600080fd5b6136a28d838e01613201565b909a50985060408c01359150808211156136bb57600080fd5b6136c78d838e01613201565b909850965060608c01359150808211156136e057600080fd5b6136ec8d838e01613201565b909650945060808c013591508082111561370557600080fd5b506137128c828d01613201565b915080935050809150509295985092959850929598565b6000806040838503121561373c57600080fd5b82359150602083013567ffffffffffffffff81111561375a57600080fd5b6137668582860161328f565b9150509250929050565b60006020828403121561378257600080fd5b61334f8261331c565b600080600080600080600080600080600060c08c8e0312156137ac57600080fd5b6137b58c61331c565b9a5067ffffffffffffffff8060208e013511156137d157600080fd5b6137e18e60208f01358f0161324d565b909b50995060408d01358110156137f757600080fd5b6138078e60408f01358f0161324d565b909950975060608d013581101561381d57600080fd5b61382d8e60608f01358f0161324d565b909750955060808d013581101561384357600080fd5b6138538e60808f01358f0161324d565b909550935060a08d013581101561386957600080fd5b5061387a8d60a08e01358e0161324d565b81935080925050509295989b509295989b9093969950565b8183526000602080850194508260005b858110156138d05781356138b581613f13565b6001600160a01b0316875295820195908201906001016138a2565b509495945050505050565b60008383855260208086019550808560051b8301018460005b8781101561392e57848303601f1901895261390f8288613dda565b61391a858284613971565b9a86019a94505050908301906001016138f4565b5090979650505050505050565b81835260006001600160fb1b0383111561395457600080fd5b8260051b8083602087013760009401602001938452509192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526139b2816020860160208601613e4f565b601f01601f19169290920160200192915050565b600083516139d8818460208801613e4f565b8351908301906139ec818360208801613e4f565b01949350505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613a289083018461399a565b9695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015613a735783516001600160a01b031683529284019291840191600101613a4e565b50909695505050505050565b602081526000612942602083018486613971565b60208152600061334f602083018461399a565b608081526000613ab9608083018761399a565b8281036020840152613acb818761399a565b60ff959095166040840152505090151560609091015292915050565b608081526000613afa608083018761399a565b6020830195909552506040810192909252606090910152919050565b60208082526021908201527f45524337323154656d706c6174653a204e4f54204d455441444154415f524f4c6040820152604560f81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252601c908201527f45524337323154656d706c6174653a206e6f74204e46544f776e657200000000604082015260600190565b6020808252602c908201527f45524337323154656d706c6174653a2043616e6e6f74207472616e736665722060408201526b1d1a1a5cc81d1bdad95b925960a21b606082015260800190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252601f908201527f455243373231526f6c6573416464726573733a204e4f54204d414e4147455200604082015260600190565b89815260a0602082018190528101889052600060c060058a901b830181019083018b835b8c811015613d155785840360bf19018352613cf3828f613dda565b613cfe868284613971565b955050506020928301929190910190600101613cd8565b5050508281036040840152613d2b81898b613892565b90508281036060840152613d4081878961393b565b90508281036080840152613d558185876138db565b9c9b505050505050505050505050565b60ff8c16815260e060208201526000613d8260e083018c8e613971565b8281036040840152613d95818b8d613971565b90508281036060840152613daa81898b613971565b90508281036080840152613dbf818789613971565b60a0840195909552505060c001529998505050505050505050565b6000808335601e19843603018112613df157600080fd5b830160208101925035905067ffffffffffffffff811115613e1157600080fd5b80360383131561324657600080fd5b60008219821115613e3357613e33613ed1565b500190565b600082821015613e4a57613e4a613ed1565b500390565b60005b83811015613e6a578181015183820152602001613e52565b838111156124755750506000910152565b600181811c90821680613e8f57607f821691505b60208210811415613eb057634e487b7160e01b600052602260045260246000fd5b50919050565b6000600019821415613eca57613eca613ed1565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146110bf57600080fd5b6001600160e01b0319811681146110bf57600080fdfe6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7afa26469706673582212204c231a3bce15f250b613e00cba4696c7844ed8b7525de2c0e7d50b3f89f9239b64736f6c63430008070033",
"linkReferences": {},
"deployedLinkReferences": {}
}