{
  "_format": "hh-sol-artifact-1",
  "contractName": "NFT",
  "sourceName": "contracts/NFT.sol",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "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": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        }
      ],
      "name": "Buy",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "ClaimRankReward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "_from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "ClaimReward",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint256",
          "name": "_tokenId",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "_value",
          "type": "uint256"
        }
      ],
      "name": "Farm",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "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"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "GENESIS_POOL_KEY",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "GLOBAL_POOL_KEY",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "IPO_POOL_KEY",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "RESERVED_POOL_KEY",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "blacklistToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "cardId",
          "type": "uint256"
        }
      ],
      "name": "buy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "cardMap",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isMintable",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "halfingPercentage",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "claimRankReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "claimReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "farm",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getApproved",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "getFarmValue",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getGenesisPool",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "claimable",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "valueLeft",
              "type": "uint256"
            }
          ],
          "internalType": "struct PoolType",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getGlobalPool",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "claimable",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "valueLeft",
              "type": "uint256"
            }
          ],
          "internalType": "struct PoolType",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getIpoPool",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "claimable",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "valueLeft",
              "type": "uint256"
            }
          ],
          "internalType": "struct PoolType",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getMyRankReward",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "gnetERC20",
      "outputs": [
        {
          "internalType": "contract GNET",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract GNET",
          "name": "_gnetERC20",
          "type": "address"
        },
        {
          "internalType": "contract Valhalla",
          "name": "_valhalla",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "isApprovedForAll",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nftGenesis",
      "outputs": [
        {
          "internalType": "contract NFTGenesis",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "ownedTokenMap",
      "outputs": [
        {
          "internalType": "bool",
          "name": "isBlackListed",
          "type": "bool"
        },
        {
          "internalType": "uint256",
          "name": "cardId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "percentage",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "lastFarmedAt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "mintedAt",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "mintingPrice",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "ownerOf",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "name": "poolMap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "claimable",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "valueLeft",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "rankRewardClaimedAtMap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "rewardMap",
      "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": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "approved",
          "type": "bool"
        }
      ],
      "name": "setApprovalForAll",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract NFTGenesis",
          "name": "_nftGenesis",
          "type": "address"
        }
      ],
      "name": "setNFTGenesis",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "startClaimingRankReward",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "stopClaimingRankReward",
      "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": "",
          "type": "address"
        }
      ],
      "name": "totalValueMap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "valhalla",
      "outputs": [
        {
          "internalType": "contract Valhalla",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "withdrawAllGenesisPool",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e8565b600154610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60015460ff9081161015620000e6576001805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b608051615bc2620001206000396000818161115501528181611195015281816115dd0152818161161d015261172c0152615bc26000f3fe6080604052600436106102395760003560e01c806301ffc9a71461023e57806302c435e51461027357806306fdde0314610296578063081812fc146102b8578063095ea7b3146102e55780630a2a6e37146103075780630defebeb1461032857806318160ddd146103715780631dede1071461038657806321d91ef4146103a657806323b872dd146103c757806327760dd7146103e75780632f745c591461041557806330cf4dc51461043557806332db2378146104695780633659cfe6146104895780634237ea8d146104a957806342842e0e146104be57806344712a6c146104de578063485cc9551461050e5780634f1ef2861461052e5780634f6ccce71461054157806352d1902d14610561578063538a85a11461057657806360267482146105965780636352211e146105ab578063663ba86e146105cb5780636dfab78e146105eb57806370a082311461060d578063715018a61461062d57806383aea6451461064257806383d44339146106705780638da5cb5b1461069e578063951053a6146106b357806395d89b41146106c857806398d41efb146106dd578063a22cb465146106f2578063b88a802f14610712578063b88d4fde14610727578063ba2d509514610747578063c415bf3d14610769578063c87b56dd1461077e578063d3f46b8b1461079e578063d80f94e5146107c0578063d96a094a146107d5578063e4305a29146107f5578063e515344714610853578063e961e1ff146108d7578063e985e9c5146108f8578063f2fde38b14610918575b600080fd5b34801561024a57600080fd5b5061025e610259366004614ef9565b610938565b60405190151581526020015b60405180910390f35b34801561027f57600080fd5b50610288610949565b60405190815260200161026a565b3480156102a257600080fd5b506102ab610d48565b60405161026a9190614f66565b3480156102c457600080fd5b506102d86102d3366004614f79565b610dda565b60405161026a9190614f92565b3480156102f157600080fd5b50610305610300366004614fbb565b610e01565b005b34801561031357600080fd5b50610167546102d8906001600160a01b031681565b34801561033457600080fd5b5061035c610343366004614f79565b6000602081905290815260409020805460019091015482565b6040805192835260208301919091520161026a565b34801561037d57600080fd5b5060cc54610288565b34801561039257600080fd5b506103056103a1366004614f79565b610f1b565b3480156103b257600080fd5b5061016a546102d8906001600160a01b031681565b3480156103d357600080fd5b506103056103e2366004614fe7565b611059565b3480156103f357600080fd5b50610288610402366004615028565b6101656020526000908152604090205481565b34801561042157600080fd5b50610288610430366004614fbb565b61108a565b34801561044157600080fd5b506102887f07b941733a7a0fb95acb53f7ec363f2e58bcfffba15469eb7d5ade1ddbb3447481565b34801561047557600080fd5b50610305610484366004615028565b611120565b34801561049557600080fd5b506103056104a4366004615028565b61114b565b3480156104b557600080fd5b50610305611213565b3480156104ca57600080fd5b506103056104d9366004614fe7565b611277565b3480156104ea57600080fd5b506104f3611292565b6040805182518152602092830151928101929092520161026a565b34801561051a57600080fd5b50610305610529366004615045565b6112ea565b61030561053c366004615120565b6115d3565b34801561054d57600080fd5b5061028861055c366004614f79565b61168c565b34801561056d57600080fd5b5061028861171f565b34801561058257600080fd5b50610305610591366004614f79565b6117cd565b3480156105a257600080fd5b506104f3611d01565b3480156105b757600080fd5b506102d86105c6366004614f79565b611d6b565b3480156105d757600080fd5b506102886105e6366004614f79565b611d9f565b3480156105f757600080fd5b50610288600080516020615a1e83398151915281565b34801561061957600080fd5b50610288610628366004615028565b611e98565b34801561063957600080fd5b50610305611f1e565b34801561064e57600080fd5b5061028861065d366004615028565b6101636020526000908152604090205481565b34801561067c57600080fd5b5061028861068b366004615028565b6101646020526000908152604090205481565b3480156106aa57600080fd5b506102d8611f32565b3480156106bf57600080fd5b506104f3611f41565b3480156106d457600080fd5b506102ab611fbd565b3480156106e957600080fd5b50610305611fcc565b3480156106fe57600080fd5b5061030561070d36600461517d565b612034565b34801561071e57600080fd5b5061030561203f565b34801561073357600080fd5b506103056107423660046151ab565b6122fe565b34801561075357600080fd5b50610288600080516020615abe83398151915281565b34801561077557600080fd5b50610305612336565b34801561078a57600080fd5b506102ab610799366004614f79565b61283e565b3480156107aa57600080fd5b50610288600080516020615b2583398151915281565b3480156107cc57600080fd5b506103056128ff565b3480156107e157600080fd5b506103056107f0366004614f79565b6129b2565b34801561080157600080fd5b50610836610810366004614f79565b6101626020526000908152604090208054600182015460029092015460ff909116919083565b60408051931515845260208401929092529082015260600161026a565b34801561085f57600080fd5b506108a861086e366004614f79565b6101616020526000908152604090208054600182015460028301546003840154600485015460059095015460ff9094169492939192909186565b6040805196151587526020870195909552938501929092526060840152608083015260a082015260c00161026a565b3480156108e357600080fd5b50610166546102d8906001600160a01b031681565b34801561090457600080fd5b5061025e610913366004615045565b6130a2565b34801561092457600080fd5b50610305610933366004615028565b6130d0565b600061094382613146565b92915050565b61016754604051630fa2d9ff60e41b815260009182916001600160a01b039091169063fa2d9ff09061097f903390600401614f92565b61010060405180830381865afa15801561099d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c19190615216565b5050600080516020615b25833981519152600090815260208181526101675460408051636ae994a760e01b81529051979a50600080516020615a3e83398151915299509297506001600160a01b031695636ae994a7955060048084019550919350918290030181865afa158015610a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6091906152a0565b90508160010154600003610a78576000935050505090565b610167546040805163238d642760e11b815290516000926001600160a01b03169163471ac84e9160048083019260209291908290030181865afa158015610ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae791906152bd565b9050811515600003610afe57600094505050505090565b33600090815261016560205260409020548111610b2057600094505050505090565b6000846006811115610b3457610b346152d6565b03610b4457600094505050505090565b60008060008060008061016760009054906101000a90046001600160a01b03166001600160a01b031663d35cb1ad6040518163ffffffff1660e01b815260040160c060405180830381865afa158015610ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc591906152ec565b949a5092985090965094509250905060008060018c6006811115610beb57610beb6152d6565b03610c10578a54889250606490610c0390600361534c565b610c0d9190615379565b90505b60028c6006811115610c2457610c246152d6565b03610c49578a54879250606490610c3c90600761534c565b610c469190615379565b90505b60038c6006811115610c5d57610c5d6152d6565b03610c82578a54869250606490610c7590600c61534c565b610c7f9190615379565b90505b60048c6006811115610c9657610c966152d6565b03610cbb578a54859250606490610cae90601261534c565b610cb89190615379565b90505b60058c6006811115610ccf57610ccf6152d6565b03610cf4578a54849250606490610ce790601a61534c565b610cf19190615379565b90505b60068c6006811115610d0857610d086152d6565b03610d2d578a54839250606490610d2090602261534c565b610d2a9190615379565b90505b610d378282615379565b9c5050505050505050505050505090565b606060988054610d579061538d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d839061538d565b8015610dd05780601f10610da557610100808354040283529160200191610dd0565b820191906000526020600020905b815481529060010190602001808311610db357829003601f168201915b5050505050905090565b6000610de58261316b565b506000908152609c60205260409020546001600160a01b031690565b6000610e0c82611d6b565b9050806001600160a01b0316836001600160a01b031603610e7e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610e9a5750610e9a81336130a2565b610f0c5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610e75565b610f168383613190565b505050565b610167546040805163a217fddf60e01b815290516001600160a01b03909216916391d1485491839163a217fddf916004808201926020929091908290030181865afa158015610f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9291906152bd565b336040518363ffffffff1660e01b8152600401610fb09291906153c7565b602060405180830381865afa158015610fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff191906152a0565b61103d5760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c792041646d696e2063616e20706572666f726d20616374696f6e0000006044820152606401610e75565b600090815261016160205260409020805460ff19166001179055565b61106333826131fe565b61107f5760405162461bcd60e51b8152600401610e75906153de565b610f1683838361325d565b600061109583611e98565b82106110f75760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610e75565b506001600160a01b0391909116600090815260ca60209081526040808320938352929052205490565b6111286133c4565b61016a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036111935760405162461bcd60e51b8152600401610e759061542b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166111c5613423565b6001600160a01b0316146111eb5760405162461bcd60e51b8152600401610e7590615465565b6111f48161343f565b6040805160008082526020820190925261121091839190613447565b50565b610167546001600160a01b0316331461123e5760405162461bcd60e51b8152600401610e759061549f565b600080516020615b258339815191526000908152602052600080516020615a3e83398151915254600080516020615b6d83398151915255565b610f16838383604051806020016040528060008152506122fe565b61129a614ec9565b50600080516020615b258339815191526000908152602090815260408051808201909152600080516020615a3e833981519152548152600080516020615b6d833981519152549181019190915290565b600154610100900460ff161580801561130757506001805460ff16105b806113275750611316306135b2565b15801561132757506001805460ff16145b61138a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610e75565b6001805460ff19168117905580156113ac576001805461ff0019166101001790555b6113ff6040518060400160405280601481526020017315195cdd11db1bd8985b13995d1ddbdc9ad3919560621b815250604051806040016040528060058152602001641511d3919560da1b8152506135c1565b6114076135f2565b61140f613619565b6114176135f2565b61016680546001600160a01b038086166001600160a01b0319928316179092556101678054928516929091169190911790556040805160c08101825261138881526161a86020820152620186a0918101919091526207a1206060820152622625a060808201526298968060a082015260005b600681101561158857600061149e6101695490565b6000818152610162602090815260409182902061016654835163313ce56760e01b8152935194955090936001600160a01b039091169263313ce5679260048083019391928290030181865afa1580156114fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151f91906154cf565b61152a90600a6155d6565b84836006811061153c5761153c6155e5565b602002015161154b919061534c565b60018083019190915560646002830155815460ff191617815561157361016980546001019055565b50508080611580906155fb565b915050611489565b50508015610f16576001805461ff00191681556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361161b5760405162461bcd60e51b8152600401610e759061542b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661164d613423565b6001600160a01b0316146116735760405162461bcd60e51b8152600401610e7590615465565b61167c8261343f565b61168882826001613447565b5050565b600061169760cc5490565b82106116fa5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610e75565b60cc828154811061170d5761170d6155e5565b90600052602060002001549050919050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117ba5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610e75565b50600080516020615a9e83398151915290565b61016754604051630a1b99af60e21b81526001600160a01b039091169063286e66bc906117fe903390600401614f92565b602060405180830381865afa15801561181b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183f91906152a0565b15156001036118605760405162461bcd60e51b8152600401610e7590615614565b3361186a82611d6b565b6001600160a01b0316146118b65760405162461bcd60e51b815260206004820152601360248201527231b0b63632b91034b9903737ba1037bbb732b960691b6044820152606401610e75565b6000818152610161602052604090205460ff161561190a5760405162461bcd60e51b81526020600482015260116024820152701d1bdad95b88189b1858dadb1a5cdd1959607a1b6044820152606401610e75565b600061191582611d9f565b90506000811161195b5760405162461bcd60e51b81526020600482015260116024820152704e6f2072657761726420746f206661726d60781b6044820152606401610e75565b6000606461196a83600a61534c565b6119749190615379565b61016654610167546040805163f481e86360e01b815290519394506001600160a01b0392831693634cc0f367938693169163f481e8639160048083019260209291908290030181865afa1580156119cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f39190615641565b6040518363ffffffff1660e01b8152600401611a109291906153c7565b600060405180830381600087803b158015611a2a57600080fd5b505af1158015611a3e573d6000803e3d6000fd5b5050610166546001600160a01b03169150634cc0f3679050611a60838561565e565b336040518363ffffffff1660e01b8152600401611a7e9291906153c7565b600060405180830381600087803b158015611a9857600080fd5b505af1158015611aac573d6000803e3d6000fd5b505061016754604051630fa2d9ff60e41b8152600093508392506001600160a01b039091169063fa2d9ff090611ae6903390600401614f92565b61010060405180830381865afa158015611b04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b289190615216565b5093975091955060019450505050505b60648111611ca7576001600160a01b03821615611ca7576000611b5b8284613648565b90508015611c115760006064611b71838961534c565b611b7b9190615379565b61016654604051634cc0f36760e01b81529192506001600160a01b031690634cc0f36790611baf90849030906004016153c7565b600060405180830381600087803b158015611bc957600080fd5b505af1158015611bdd573d6000803e3d6000fd5b505050506001600160a01b0384166000908152610164602052604081208054839290611c0a908490615671565b9091555050505b61016754604051630fa2d9ff60e41b81526001600160a01b039091169063fa2d9ff090611c42908690600401614f92565b61010060405180830381865afa158015611c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c849190615216565b50939950919750869550611c9f94508593506155fb92505050565b915050611b38565b506000858152610161602052604090819020426003909101555185907f18b858dd8351526e5e7ab4ec353f5309024990391b3eb1e14a753249345ac5da90611cf29087815260200190565b60405180910390a25050505050565b611d09614ec9565b50600080516020615abe8339815191526000908152602090815260408051808201909152600080516020615a7e8339815191525481527f7ae3c50dab2a4efefa12dcfbd46eb63dd82ec1805ae28aeb47fe2451bfc1cdaa549181019190915290565b600080611d7783613d5b565b90506001600160a01b0381166109435760405162461bcd60e51b8152600401610e7590615684565b600081815261016160209081526040808320600180820154855261016284528285208351606081018552815460ff16151581529181015494820194909452600290930154918301919091529062015180611dfb816101c261534c565b8360040154611e0a9190615671565b421115611e1c57506000949350505050565b60028301546005840154600385015460006103e8611e3a858561534c565b611e449190615379565b90506000611e528683615379565b9050600081611e61854261565e565b611e6b919061534c565b90506064886040015182611e7f919061534c565b611e899190615379565b9b9a5050505050505050505050565b60006001600160a01b038216611f025760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610e75565b506001600160a01b03166000908152609b602052604090205490565b611f266133c4565b611f306000613d76565b565b6034546001600160a01b031690565b611f49614ec9565b50600080516020615a1e83398151915260009081526020908152604080518082019091527fe48cbce158a88b2ae025b935f2c891db41fa49d66e958301265adefc644e90755481527fe48cbce158a88b2ae025b935f2c891db41fa49d66e958301265adefc644e9076549181019190915290565b606060998054610d579061538d565b610167546001600160a01b03163314611ff75760405162461bcd60e51b8152600401610e759061549f565b600080516020615b2583398151915260009081526020819052600080516020615b6d8339815191528054600080516020615a3e8339815191525555565b611688338383613dc8565b61016754604051630a1b99af60e21b81526001600160a01b039091169063286e66bc90612070903390600401614f92565b602060405180830381865afa15801561208d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b191906152a0565b15156001036120d25760405162461bcd60e51b8152600401610e7590615614565b336000908152610164602090815260408083205461016754825163f481e86360e01b815292519194936001600160a01b039091169263f481e86392600480830193928290030181865afa15801561212d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121519190615641565b90506000821161219d5760405162461bcd60e51b8152602060048201526017602482015276139bc81c995dd85c99081d1bc818994818db185a5b5959604a1b6044820152606401610e75565b600060646121ac84600a61534c565b6121b69190615379565b6101665460405163a9059cbb60e01b81529192506001600160a01b03169063a9059cbb906121ea90859085906004016156b6565b6020604051808303816000875af1158015612209573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222d91906152a0565b50610166546001600160a01b031663a9059cbb3361224b848761565e565b6040518363ffffffff1660e01b81526004016122689291906156b6565b6020604051808303816000875af1158015612287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ab91906152a0565b5033600081815261016460205260408120557fba8de60c3403ec381d1d484652ea1980e3c3e56359195c92525bff4ce47ad98e6122e8838661565e565b60405190815260200160405180910390a2505050565b61230833836131fe565b6123245760405162461bcd60e51b8152600401610e75906153de565b61233084848484613e92565b50505050565b61016754604051630a1b99af60e21b81526001600160a01b039091169063286e66bc90612367903390600401614f92565b602060405180830381865afa158015612384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a891906152a0565b15156001036123c95760405162461bcd60e51b8152600401610e7590615614565b61016754604051630fa2d9ff60e41b81526000916001600160a01b03169063fa2d9ff0906123fb903390600401614f92565b61010060405180830381865afa158015612419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243d9190615216565b5050600080516020615b2583398151915260009081526020819052939650600080516020615a3e833981519152955092935061247c9250610949915050565b3360009081526101636020908152604080832054815160e08101835293845261c3509284019290925262030d4090830152620f42406060830152624c4b40608083015263017d784060a08301526305f5e10060c08301529192508261251e5760405162461bcd60e51b8152602060048201526018602482015277139bc814995dd85c990818d85b8818994818db185a5b595960421b6044820152606401610e75565b60005b600781101561265b578086600681111561253d5761253d6152d6565b14801561255c57506000866006811115612559576125596152d6565b14155b156126495761016660009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d991906154cf565b6125e490600a6155d6565b8282600781106125f6576125f66155e5565b602002015163ffffffff1661260b919061534c565b8310156126495760405162461bcd60e51b815260206004820152600c60248201526b4e6f7420456c696769626c6560a01b6044820152606401610e75565b80612653816155fb565b915050612521565b506000606461266b85600a61534c565b6126759190615379565b61016654610167546040805163f481e86360e01b815290519394506001600160a01b039283169363a9059cbb939092169163f481e863916004808201926020929091908290030181865afa1580156126d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f59190615641565b836040518363ffffffff1660e01b81526004016127139291906156b6565b6020604051808303816000875af1158015612732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275691906152a0565b50610166546001600160a01b031663a9059cbb33612774848861565e565b6040518363ffffffff1660e01b81526004016127919291906156b6565b6020604051808303816000875af11580156127b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d491906152a0565b50336000908152610165602052604081204290556001860180548692906127fc90849061565e565b909155505060405184815233907feff26bb1aaac7ce27452afaf8402dbd160686540ece1c14d857cf0c272b5cba49060200160405180910390a2505050505050565b60606128498261316b565b6000612853613ec5565b60008481526101616020908152604091829020825160c081018452815460ff1615158152600182015492810183905260028201549381019390935260038101546060840152600481015460808401526005015460a0830152825192935090916128cb57604051806020016040528060008152506128f6565b826128d582613ee5565b6040516020016128e69291906156cf565b6040516020818303038152906040525b95945050505050565b6129076133c4565b600080516020615abe833981519152600090815260205261016654600080516020615a7e833981519152805460405163a9059cbb60e01b815291926001600160a01b03169163a9059cbb91612961913391906004016156b6565b6020604051808303816000875af1158015612980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a491906152a0565b506000808255600190910155565b61016754604051630a1b99af60e21b81526001600160a01b039091169063286e66bc906129e3903390600401614f92565b602060405180830381865afa158015612a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2491906152a0565b1515600103612a455760405162461bcd60e51b8152600401610e7590615614565b61016754604051630fa2d9ff60e41b815260009182916001600160a01b039091169063fa2d9ff090612a7b903390600401614f92565b61010060405180830381865afa158015612a99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abd9190615216565b5050610167546040805163f481e86360e01b815290519799509497506000966001600160a01b03909116955063f481e8639460048082019550602094509192508290030181865afa158015612b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3a9190615641565b9050600061016760009054906101000a90046001600160a01b03166001600160a01b0316636ae994a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb691906152a0565b6000868152610162602052604090209091508115612c065760405162461bcd60e51b815260206004820152600d60248201526c13585c9ad95d0818db1bdcd959609a1b6044820152606401610e75565b84612c4b5760405162461bcd60e51b8152602060048201526015602482015274149959da5cdd1c985d1a5bdb881c995c5d5a5c9959605a1b6044820152606401610e75565b6000816001015411612c8e5760405162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a590818d85c9960a21b6044820152606401610e75565b805460ff16612cd65760405162461bcd60e51b815260206004820152601460248201527343617264206973206e6f74206d696e7461626c6560601b6044820152606401610e75565b6040805160e081018252620186a0815262030d406020820152620f424091810191909152624c4b4060608201526301312d0060808201526305f5e10060a0820152631dcd650060c082015260005b6007811015612e5f5780866006811115612d4057612d406152d6565b03612e4d5761016660009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbd91906154cf565b612dc890600a6155d6565b828260078110612dda57612dda6155e5565b602002015163ffffffff16612def919061534c565b33600090815261016360205260409020546001850154612e0f9190615671565b1115612e4d5760405162461bcd60e51b815260206004820152600d60248201526c26b0bc10213abc9022b93937b960991b6044820152606401610e75565b80612e57816155fb565b915050612d24565b506000606483600101546005612e75919061534c565b612e7f9190615379565b6101665460018501549192506001600160a01b0316906323b872dd9033903090612eaa90869061565e565b6040518463ffffffff1660e01b8152600401612ec8939291906156fe565b6020604051808303816000875af1158015612ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0b91906152a0565b50612f31606484600101546011612f22919061534c565b612f2c9190615379565b613f77565b612f3a81613fbc565b606483600101546014612f4d919061534c565b612f579190615379565b6001600160a01b0386166000908152610164602052604081208054909190612f80908490615671565b90915550506101665460018401546001600160a01b03909116906342966c6890606490612fae90603a61534c565b612fb89190615379565b6040518263ffffffff1660e01b8152600401612fd691815260200190565b600060405180830381600087803b158015612ff057600080fd5b505af1158015613004573d6000803e3d6000fd5b5050505060006130146101685490565b60008181526101616020526040902060018082018c905586015460058201554260048201819055600382015590915061304b61430c565b600282015561305f61016880546001019055565b61306933836143c6565b604051829033907fe3d4187f6ca4248660cc0ac8b8056515bac4a8132be2eca31d6d0cc170722a7e90600090a350505050505050505050565b6001600160a01b039182166000908152609d6020908152604080832093909416825291909152205460ff1690565b6130d86133c4565b6001600160a01b03811661313d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e75565b61121081613d76565b60006001600160e01b0319821663780e9d6360e01b14806109435750610943826143e0565b61317481614430565b6112105760405162461bcd60e51b8152600401610e7590615684565b6000818152609c6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906131c582611d6b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061320a83611d6b565b9050806001600160a01b0316846001600160a01b03161480613231575061323181856130a2565b806132555750836001600160a01b031661324a84610dda565b6001600160a01b0316145b949350505050565b826001600160a01b031661327082611d6b565b6001600160a01b0316146132965760405162461bcd60e51b8152600401610e7590615722565b6001600160a01b0382166132f85760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610e75565b613305838383600161444d565b826001600160a01b031661331882611d6b565b6001600160a01b03161461333e5760405162461bcd60e51b8152600401610e7590615722565b6000818152609c6020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652609b8552838620805460001901905590871680865283862080546001019055868652609a9094528285208054909216841790915590518493600080516020615b0583398151915291a4610f168383836001614459565b336133cd611f32565b6001600160a01b031614611f305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e75565b600080516020615a9e833981519152546001600160a01b031690565b6112106133c4565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561347a57610f1683614548565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156134d4575060408051601f3d908101601f191682019092526134d1918101906152bd565b60015b6135375760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610e75565b600080516020615a9e83398151915281146135a65760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610e75565b50610f168383836145e2565b6001600160a01b03163b151590565b600154610100900460ff166135e85760405162461bcd60e51b8152600401610e7590615767565b6116888282614607565b600154610100900460ff16611f305760405162461bcd60e51b8152600401610e7590615767565b600154610100900460ff166136405760405162461bcd60e51b8152600401610e7590615767565b611f30614647565b61016754604051630fa2d9ff60e41b815260009182916001600160a01b039091169063fa2d9ff09061367e908690600401614f92565b61010060405180830381865afa15801561369c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c09190615216565b509396505050600188108015945092506136de915050575060058411155b8015613791575061016660009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375d91906154cf565b61376890600a6155d6565b6137749061138861534c565b6001600160a01b0384166000908152610163602052604090205410155b156137a0576005915050610943565b600684101580156137b25750600a8411155b80156137d0575060018160068111156137cd576137cd6152d6565b10155b8015613883575061016660009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561382b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061384f91906154cf565b61385a90600a6155d6565b613866906161a861534c565b6001600160a01b0384166000908152610163602052604090205410155b15613892576001915050610943565b600b84101580156138a4575060148411155b80156138c2575060028160068111156138bf576138bf6152d6565b10155b8015613976575061016660009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561391d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061394191906154cf565b61394c90600a6155d6565b61395990620186a061534c565b6001600160a01b0384166000908152610163602052604090205410155b15613985576001915050610943565b60158410158015613997575060288411155b80156139b5575060038160068111156139b2576139b26152d6565b10155b8015613a69575061016660009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3491906154cf565b613a3f90600a6155d6565b613a4c906207a12061534c565b6001600160a01b0384166000908152610163602052604090205410155b15613a78576001915050610943565b60298410158015613a8a5750603c8411155b8015613aa857506004816006811115613aa557613aa56152d6565b10155b8015613b5c575061016660009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2791906154cf565b613b3290600a6155d6565b613b3f90622625a061534c565b6001600160a01b0384166000908152610163602052604090205410155b15613b6b576001915050610943565b603d8410158015613b7d575060508411155b8015613b9b57506005816006811115613b9857613b986152d6565b10155b8015613c4f575061016660009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1a91906154cf565b613c2590600a6155d6565b613c32906298968061534c565b6001600160a01b0384166000908152610163602052604090205410155b15613c5e576001915050610943565b60518410158015613c70575060648411155b8015613c8d57506006816006811115613c8b57613c8b6152d6565b145b8015613d42575061016660009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d0c91906154cf565b613d1790600a6155d6565b613d25906302faf08061534c565b6001600160a01b0384166000908152610163602052604090205410155b15613d51576001915050610943565b5060009392505050565b6000908152609a60205260409020546001600160a01b031690565b603480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603613e255760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b6044820152606401610e75565b6001600160a01b038381166000818152609d6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b613e9d84848461325d565b613ea984848484614677565b6123305760405162461bcd60e51b8152600401610e75906157b2565b6060604051806060016040528060288152602001615b4560289139905090565b60606000613ef28361477f565b60010190506000816001600160401b03811115613f1157613f1161507e565b6040519080825280601f01601f191660200182016040528015613f3b576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084613f4557509392505050565b600080516020615b2583398151915260009081526020819052600080516020615a3e833981519152805490918391839190613fb3908490615671565b90915550505050565b60008061016a60009054906101000a90046001600160a01b03166001600160a01b031663dc3676b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015614013573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061403791906152bd565b9050600061016a60009054906101000a90046001600160a01b03166001600160a01b03166316fed3e26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561408f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b39190615641565b905060005b828110156142065761016a5460405163e4305a2960e01b815260048101839052600091829182916001600160a01b03169063e4305a2990602401608060405180830381865afa15801561410f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141339190615804565b93509350935050600082826064868c61414c919061534c565b6141569190615379565b6141609190615379565b61416a919061534c565b90506141768189615671565b97508060000361418957505050506141f4565b61016a54604051635b2c9e4760e11b815260048101879052602481018390526001600160a01b039091169063b6593c8e90604401600060405180830381600087803b1580156141d757600080fd5b505af11580156141eb573d6000803e3d6000fd5b50505050505050505b806141fe816155fb565b9150506140b8565b506101665461016a546040516323b872dd60e01b81526001600160a01b03928316926323b872dd926142429233929091169088906004016156fe565b6020604051808303816000875af1158015614261573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061428591906152a0565b50610166546001600160a01b03166323b872dd33836142a4878961565e565b6040518463ffffffff1660e01b81526004016142c2939291906156fe565b6020604051808303816000875af11580156142e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061430591906152a0565b5050505050565b60008061431a6103e8614855565b90506102bb811161432d57600591505090565b6102bb8111801561434057506103848111155b1561434d57600691505090565b6103848111801561436057506103df8111155b1561436d57600791505090565b6103df8111801561438057506103e48111155b1561438d57600891505090565b6103e4811180156143a057506103e68111155b156143ad57600f91505090565b806103e7036143be57601491505090565b600891505090565b6116888282604051806020016040528060008152506148bf565b60006001600160e01b031982166380ac58cd60e01b148061441157506001600160e01b03198216635b5e139f60e01b145b8061094357506301ffc9a760e01b6001600160e01b0319831614610943565b60008061443c83613d5b565b6001600160a01b0316141592915050565b612330848484846148f2565b600082815261016160205260409020600501546001600160a01b0385166144ae576001600160a01b03841660009081526101636020526040812080548392906144a3908490615671565b909155506143059050565b6001600160a01b0384166144e5576001600160a01b03851660009081526101636020526040812080548392906144a390849061565e565b6001600160a01b038516600090815261016360205260408120805483929061450e90849061565e565b90915550506001600160a01b038416600090815261016360205260408120805483929061453c908490615671565b90915550505050505050565b614551816135b2565b6145b35760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610e75565b600080516020615a9e83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6145eb83614a2b565b6000825111806145f85750805b15610f16576123308383614a6b565b600154610100900460ff1661462e5760405162461bcd60e51b8152600401610e7590615767565b609861463a8382615888565b506099610f168282615888565b600154610100900460ff1661466e5760405162461bcd60e51b8152600401610e7590615767565b611f3033613d76565b600061468b846001600160a01b03166135b2565b1561477457604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906146c2903390899088908890600401615947565b6020604051808303816000875af19250505080156146fd575060408051601f3d908101601f191682019092526146fa91810190615984565b60015b61475a573d80801561472b576040519150601f19603f3d011682016040523d82523d6000602084013e614730565b606091505b5080516000036147525760405162461bcd60e51b8152600401610e75906157b2565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050613255565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106147be5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b83106147e8576904ee2d6d415b85acef8160201b830492506020015b662386f26fc10000831061480657662386f26fc10000830492506010015b6305f5e100831061481e576305f5e100830492506008015b612710831061483257612710830492506004015b60648310614844576064830492506002015b600a83106109435760010192915050565b610160805460009182614867836155fb565b909155505061016054604080514260208201526001600160601b03193360601b1691810191909152605481019190915282906074016040516020818303038152906040528051906020012060001c61094391906159a1565b6148c98383614b54565b6148d66000848484614677565b610f165760405162461bcd60e51b8152600401610e75906157b2565b6148fe84848484614c67565b600181111561496d5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610e75565b816001600160a01b0385166149c9576149c48160cc8054600083815260cd60205260408120829055600182018355919091527f47197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe0155565b6149ec565b836001600160a01b0316856001600160a01b0316146149ec576149ec8582614cef565b6001600160a01b038416614a0857614a0381614d8c565b614305565b846001600160a01b0316846001600160a01b031614614305576143058482614e3b565b614a3481614548565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060614a76836135b2565b614ad15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610e75565b600080846001600160a01b031684604051614aec91906159b5565b600060405180830381855af49150503d8060008114614b27576040519150601f19603f3d011682016040523d82523d6000602084013e614b2c565b606091505b50915091506128f68282604051806060016040528060278152602001615ade60279139614e7f565b6001600160a01b038216614baa5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610e75565b614bb381614430565b15614bd05760405162461bcd60e51b8152600401610e75906159d1565b614bde60008383600161444d565b614be781614430565b15614c045760405162461bcd60e51b8152600401610e75906159d1565b6001600160a01b0382166000818152609b6020908152604080832080546001019055848352609a90915280822080546001600160a01b031916841790555183929190600080516020615b05833981519152908290a4611688600083836001614459565b6001811115612330576001600160a01b03841615614cad576001600160a01b0384166000908152609b602052604081208054839290614ca790849061565e565b90915550505b6001600160a01b03831615612330576001600160a01b0383166000908152609b602052604081208054839290614ce4908490615671565b909155505050505050565b60006001614cfc84611e98565b614d06919061565e565b600083815260cb6020526040902054909150808214614d59576001600160a01b038416600090815260ca60209081526040808320858452825280832054848452818420819055835260cb90915290208190555b50600091825260cb602090815260408084208490556001600160a01b03909416835260ca81528383209183525290812055565b60cc54600090614d9e9060019061565e565b600083815260cd602052604081205460cc8054939450909284908110614dc657614dc66155e5565b906000526020600020015490508060cc8381548110614de757614de76155e5565b600091825260208083209091019290925582815260cd909152604080822084905585825281205560cc805480614e1f57614e1f615a07565b6001900381819060005260206000200160009055905550505050565b6000614e4683611e98565b6001600160a01b03909316600090815260ca60209081526040808320868452825280832085905593825260cb9052919091209190915550565b60608315614e8e575081614e98565b614e988383614e9f565b9392505050565b815115614eaf5781518083602001fd5b8060405162461bcd60e51b8152600401610e759190614f66565b604051806040016040528060008152602001600081525090565b6001600160e01b03198116811461121057600080fd5b600060208284031215614f0b57600080fd5b8135614e9881614ee3565b60005b83811015614f31578181015183820152602001614f19565b50506000910152565b60008151808452614f52816020860160208601614f16565b601f01601f19169290920160200192915050565b602081526000614e986020830184614f3a565b600060208284031215614f8b57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461121057600080fd5b60008060408385031215614fce57600080fd5b8235614fd981614fa6565b946020939093013593505050565b600080600060608486031215614ffc57600080fd5b833561500781614fa6565b9250602084013561501781614fa6565b929592945050506040919091013590565b60006020828403121561503a57600080fd5b8135614e9881614fa6565b6000806040838503121561505857600080fd5b823561506381614fa6565b9150602083013561507381614fa6565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126150a557600080fd5b81356001600160401b03808211156150bf576150bf61507e565b604051601f8301601f19908116603f011681019082821181831017156150e7576150e761507e565b8160405283815286602085880101111561510057600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561513357600080fd5b823561513e81614fa6565b915060208301356001600160401b0381111561515957600080fd5b61516585828601615094565b9150509250929050565b801515811461121057600080fd5b6000806040838503121561519057600080fd5b823561519b81614fa6565b915060208301356150738161516f565b600080600080608085870312156151c157600080fd5b84356151cc81614fa6565b935060208501356151dc81614fa6565b92506040850135915060608501356001600160401b038111156151fe57600080fd5b61520a87828801615094565b91505092959194509250565b600080600080600080600080610100898b03121561523357600080fd5b885161523e8161516f565b60208a015190985061524f8161516f565b60408a01519097506007811061526457600080fd5b60608a015190965061527581614fa6565b60808a015160a08b015160c08c015160e0909c01519a9d999c50979a91999098919650945092505050565b6000602082840312156152b257600080fd5b8151614e988161516f565b6000602082840312156152cf57600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b60008060008060008060c0878903121561530557600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761094357610943615336565b634e487b7160e01b600052601260045260246000fd5b60008261538857615388615363565b500490565b600181811c908216806153a157607f821691505b6020821081036153c157634e487b7160e01b600052602260045260246000fd5b50919050565b9182526001600160a01b0316602082015260400190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602c90820152600080516020615a5e83398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c90820152600080516020615a5e83398151915260408201526b6163746976652070726f787960a01b606082015260800190565b60208082526016908201527513db9b1e481d985b1a185b1b184818d85b8818d85b1b60521b604082015260600190565b6000602082840312156154e157600080fd5b815160ff81168114614e9857600080fd5b600181815b8085111561552d57816000190482111561551357615513615336565b8085161561552057918102915b93841c93908002906154f7565b509250929050565b60008261554457506001610943565b8161555157506000610943565b816001811461556757600281146155715761558d565b6001915050610943565b60ff84111561558257615582615336565b50506001821b610943565b5060208310610133831016604e8410600b84101617156155b0575081810a610943565b6155ba83836154f2565b80600019048211156155ce576155ce615336565b029392505050565b6000614e9860ff841683615535565b634e487b7160e01b600052603260045260246000fd5b60006001820161560d5761560d615336565b5060010190565b6020808252601390820152721059191c995cdcc8189b1858dadb1a5cdd1959606a1b604082015260600190565b60006020828403121561565357600080fd5b8151614e9881614fa6565b8181038181111561094357610943615336565b8082018082111561094357610943615336565b602080825260189082015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604082015260600190565b6001600160a01b03929092168252602082015260400190565b600083516156e1818460208801614f16565b8351908301906156f5818360208801614f16565b01949350505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000806000806080858703121561581a57600080fd5b505082516020840151604085015160609095015191969095509092509050565b601f821115610f1657600081815260208120601f850160051c810160208610156158615750805b601f850160051c820191505b818110156158805782815560010161586d565b505050505050565b81516001600160401b038111156158a1576158a161507e565b6158b5816158af845461538d565b8461583a565b602080601f8311600181146158ea57600084156158d25750858301515b600019600386901b1c1916600185901b178555615880565b600085815260208120601f198616915b82811015615919578886015182559484019460019091019084016158fa565b50858210156159375787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061597a90830184614f3a565b9695505050505050565b60006020828403121561599657600080fd5b8151614e9881614ee3565b6000826159b0576159b0615363565b500690565b600082516159c7818460208701614f16565b9190910192915050565b6020808252601c908201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b604082015260600190565b634e487b7160e01b600052603160045260246000fdfeef78ff2707f55cf683ecba27f753a1f73d88a2972299daeedcdcce2c52b7821d335d3c6b885408497fbfb0b6def492ee75738904e5f4f2ba351dbd9fcd1022c046756e6374696f6e206d7573742062652063616c6c6564207468726f756768207ae3c50dab2a4efefa12dcfbd46eb63dd82ec1805ae28aeb47fe2451bfc1cda9360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc791b07db9f5ba47b7333684f8aab1753657d4cf52dbb1ca2e58c7c7643deb25c416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4caf09f7dd9cf5930a0d30d4dba10a4d06c1e6d90491f8198b355f99152771b068747470733a2f2f676c6f62616c6e6574776f726b2e66696e616e63652f6170692f696d6167652f335d3c6b885408497fbfb0b6def492ee75738904e5f4f2ba351dbd9fcd1022c1a26469706673582212207bdade76611b725031535c57fb0f5b33958d8a553a7a120c32bb7ebb6887a38b64736f6c63430008110033",
  "deployedBytecode": "0x6080604052600436106102395760003560e01c806301ffc9a71461023e57806302c435e51461027357806306fdde0314610296578063081812fc146102b8578063095ea7b3146102e55780630a2a6e37146103075780630defebeb1461032857806318160ddd146103715780631dede1071461038657806321d91ef4146103a657806323b872dd146103c757806327760dd7146103e75780632f745c591461041557806330cf4dc51461043557806332db2378146104695780633659cfe6146104895780634237ea8d146104a957806342842e0e146104be57806344712a6c146104de578063485cc9551461050e5780634f1ef2861461052e5780634f6ccce71461054157806352d1902d14610561578063538a85a11461057657806360267482146105965780636352211e146105ab578063663ba86e146105cb5780636dfab78e146105eb57806370a082311461060d578063715018a61461062d57806383aea6451461064257806383d44339146106705780638da5cb5b1461069e578063951053a6146106b357806395d89b41146106c857806398d41efb146106dd578063a22cb465146106f2578063b88a802f14610712578063b88d4fde14610727578063ba2d509514610747578063c415bf3d14610769578063c87b56dd1461077e578063d3f46b8b1461079e578063d80f94e5146107c0578063d96a094a146107d5578063e4305a29146107f5578063e515344714610853578063e961e1ff146108d7578063e985e9c5146108f8578063f2fde38b14610918575b600080fd5b34801561024a57600080fd5b5061025e610259366004614ef9565b610938565b60405190151581526020015b60405180910390f35b34801561027f57600080fd5b50610288610949565b60405190815260200161026a565b3480156102a257600080fd5b506102ab610d48565b60405161026a9190614f66565b3480156102c457600080fd5b506102d86102d3366004614f79565b610dda565b60405161026a9190614f92565b3480156102f157600080fd5b50610305610300366004614fbb565b610e01565b005b34801561031357600080fd5b50610167546102d8906001600160a01b031681565b34801561033457600080fd5b5061035c610343366004614f79565b6000602081905290815260409020805460019091015482565b6040805192835260208301919091520161026a565b34801561037d57600080fd5b5060cc54610288565b34801561039257600080fd5b506103056103a1366004614f79565b610f1b565b3480156103b257600080fd5b5061016a546102d8906001600160a01b031681565b3480156103d357600080fd5b506103056103e2366004614fe7565b611059565b3480156103f357600080fd5b50610288610402366004615028565b6101656020526000908152604090205481565b34801561042157600080fd5b50610288610430366004614fbb565b61108a565b34801561044157600080fd5b506102887f07b941733a7a0fb95acb53f7ec363f2e58bcfffba15469eb7d5ade1ddbb3447481565b34801561047557600080fd5b50610305610484366004615028565b611120565b34801561049557600080fd5b506103056104a4366004615028565b61114b565b3480156104b557600080fd5b50610305611213565b3480156104ca57600080fd5b506103056104d9366004614fe7565b611277565b3480156104ea57600080fd5b506104f3611292565b6040805182518152602092830151928101929092520161026a565b34801561051a57600080fd5b50610305610529366004615045565b6112ea565b61030561053c366004615120565b6115d3565b34801561054d57600080fd5b5061028861055c366004614f79565b61168c565b34801561056d57600080fd5b5061028861171f565b34801561058257600080fd5b50610305610591366004614f79565b6117cd565b3480156105a257600080fd5b506104f3611d01565b3480156105b757600080fd5b506102d86105c6366004614f79565b611d6b565b3480156105d757600080fd5b506102886105e6366004614f79565b611d9f565b3480156105f757600080fd5b50610288600080516020615a1e83398151915281565b34801561061957600080fd5b50610288610628366004615028565b611e98565b34801561063957600080fd5b50610305611f1e565b34801561064e57600080fd5b5061028861065d366004615028565b6101636020526000908152604090205481565b34801561067c57600080fd5b5061028861068b366004615028565b6101646020526000908152604090205481565b3480156106aa57600080fd5b506102d8611f32565b3480156106bf57600080fd5b506104f3611f41565b3480156106d457600080fd5b506102ab611fbd565b3480156106e957600080fd5b50610305611fcc565b3480156106fe57600080fd5b5061030561070d36600461517d565b612034565b34801561071e57600080fd5b5061030561203f565b34801561073357600080fd5b506103056107423660046151ab565b6122fe565b34801561075357600080fd5b50610288600080516020615abe83398151915281565b34801561077557600080fd5b50610305612336565b34801561078a57600080fd5b506102ab610799366004614f79565b61283e565b3480156107aa57600080fd5b50610288600080516020615b2583398151915281565b3480156107cc57600080fd5b506103056128ff565b3480156107e157600080fd5b506103056107f0366004614f79565b6129b2565b34801561080157600080fd5b50610836610810366004614f79565b6101626020526000908152604090208054600182015460029092015460ff909116919083565b60408051931515845260208401929092529082015260600161026a565b34801561085f57600080fd5b506108a861086e366004614f79565b6101616020526000908152604090208054600182015460028301546003840154600485015460059095015460ff9094169492939192909186565b6040805196151587526020870195909552938501929092526060840152608083015260a082015260c00161026a565b3480156108e357600080fd5b50610166546102d8906001600160a01b031681565b34801561090457600080fd5b5061025e610913366004615045565b6130a2565b34801561092457600080fd5b50610305610933366004615028565b6130d0565b600061094382613146565b92915050565b61016754604051630fa2d9ff60e41b815260009182916001600160a01b039091169063fa2d9ff09061097f903390600401614f92565b61010060405180830381865afa15801561099d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c19190615216565b5050600080516020615b25833981519152600090815260208181526101675460408051636ae994a760e01b81529051979a50600080516020615a3e83398151915299509297506001600160a01b031695636ae994a7955060048084019550919350918290030181865afa158015610a3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a6091906152a0565b90508160010154600003610a78576000935050505090565b610167546040805163238d642760e11b815290516000926001600160a01b03169163471ac84e9160048083019260209291908290030181865afa158015610ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae791906152bd565b9050811515600003610afe57600094505050505090565b33600090815261016560205260409020548111610b2057600094505050505090565b6000846006811115610b3457610b346152d6565b03610b4457600094505050505090565b60008060008060008061016760009054906101000a90046001600160a01b03166001600160a01b031663d35cb1ad6040518163ffffffff1660e01b815260040160c060405180830381865afa158015610ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc591906152ec565b949a5092985090965094509250905060008060018c6006811115610beb57610beb6152d6565b03610c10578a54889250606490610c0390600361534c565b610c0d9190615379565b90505b60028c6006811115610c2457610c246152d6565b03610c49578a54879250606490610c3c90600761534c565b610c469190615379565b90505b60038c6006811115610c5d57610c5d6152d6565b03610c82578a54869250606490610c7590600c61534c565b610c7f9190615379565b90505b60048c6006811115610c9657610c966152d6565b03610cbb578a54859250606490610cae90601261534c565b610cb89190615379565b90505b60058c6006811115610ccf57610ccf6152d6565b03610cf4578a54849250606490610ce790601a61534c565b610cf19190615379565b90505b60068c6006811115610d0857610d086152d6565b03610d2d578a54839250606490610d2090602261534c565b610d2a9190615379565b90505b610d378282615379565b9c5050505050505050505050505090565b606060988054610d579061538d565b80601f0160208091040260200160405190810160405280929190818152602001828054610d839061538d565b8015610dd05780601f10610da557610100808354040283529160200191610dd0565b820191906000526020600020905b815481529060010190602001808311610db357829003601f168201915b5050505050905090565b6000610de58261316b565b506000908152609c60205260409020546001600160a01b031690565b6000610e0c82611d6b565b9050806001600160a01b0316836001600160a01b031603610e7e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b0382161480610e9a5750610e9a81336130a2565b610f0c5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610e75565b610f168383613190565b505050565b610167546040805163a217fddf60e01b815290516001600160a01b03909216916391d1485491839163a217fddf916004808201926020929091908290030181865afa158015610f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9291906152bd565b336040518363ffffffff1660e01b8152600401610fb09291906153c7565b602060405180830381865afa158015610fcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ff191906152a0565b61103d5760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c792041646d696e2063616e20706572666f726d20616374696f6e0000006044820152606401610e75565b600090815261016160205260409020805460ff19166001179055565b61106333826131fe565b61107f5760405162461bcd60e51b8152600401610e75906153de565b610f1683838361325d565b600061109583611e98565b82106110f75760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610e75565b506001600160a01b0391909116600090815260ca60209081526040808320938352929052205490565b6111286133c4565b61016a80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036111935760405162461bcd60e51b8152600401610e759061542b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166111c5613423565b6001600160a01b0316146111eb5760405162461bcd60e51b8152600401610e7590615465565b6111f48161343f565b6040805160008082526020820190925261121091839190613447565b50565b610167546001600160a01b0316331461123e5760405162461bcd60e51b8152600401610e759061549f565b600080516020615b258339815191526000908152602052600080516020615a3e83398151915254600080516020615b6d83398151915255565b610f16838383604051806020016040528060008152506122fe565b61129a614ec9565b50600080516020615b258339815191526000908152602090815260408051808201909152600080516020615a3e833981519152548152600080516020615b6d833981519152549181019190915290565b600154610100900460ff161580801561130757506001805460ff16105b806113275750611316306135b2565b15801561132757506001805460ff16145b61138a5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610e75565b6001805460ff19168117905580156113ac576001805461ff0019166101001790555b6113ff6040518060400160405280601481526020017315195cdd11db1bd8985b13995d1ddbdc9ad3919560621b815250604051806040016040528060058152602001641511d3919560da1b8152506135c1565b6114076135f2565b61140f613619565b6114176135f2565b61016680546001600160a01b038086166001600160a01b0319928316179092556101678054928516929091169190911790556040805160c08101825261138881526161a86020820152620186a0918101919091526207a1206060820152622625a060808201526298968060a082015260005b600681101561158857600061149e6101695490565b6000818152610162602090815260409182902061016654835163313ce56760e01b8152935194955090936001600160a01b039091169263313ce5679260048083019391928290030181865afa1580156114fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151f91906154cf565b61152a90600a6155d6565b84836006811061153c5761153c6155e5565b602002015161154b919061534c565b60018083019190915560646002830155815460ff191617815561157361016980546001019055565b50508080611580906155fb565b915050611489565b50508015610f16576001805461ff00191681556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016300361161b5760405162461bcd60e51b8152600401610e759061542b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661164d613423565b6001600160a01b0316146116735760405162461bcd60e51b8152600401610e7590615465565b61167c8261343f565b61168882826001613447565b5050565b600061169760cc5490565b82106116fa5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610e75565b60cc828154811061170d5761170d6155e5565b90600052602060002001549050919050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146117ba5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610e75565b50600080516020615a9e83398151915290565b61016754604051630a1b99af60e21b81526001600160a01b039091169063286e66bc906117fe903390600401614f92565b602060405180830381865afa15801561181b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183f91906152a0565b15156001036118605760405162461bcd60e51b8152600401610e7590615614565b3361186a82611d6b565b6001600160a01b0316146118b65760405162461bcd60e51b815260206004820152601360248201527231b0b63632b91034b9903737ba1037bbb732b960691b6044820152606401610e75565b6000818152610161602052604090205460ff161561190a5760405162461bcd60e51b81526020600482015260116024820152701d1bdad95b88189b1858dadb1a5cdd1959607a1b6044820152606401610e75565b600061191582611d9f565b90506000811161195b5760405162461bcd60e51b81526020600482015260116024820152704e6f2072657761726420746f206661726d60781b6044820152606401610e75565b6000606461196a83600a61534c565b6119749190615379565b61016654610167546040805163f481e86360e01b815290519394506001600160a01b0392831693634cc0f367938693169163f481e8639160048083019260209291908290030181865afa1580156119cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119f39190615641565b6040518363ffffffff1660e01b8152600401611a109291906153c7565b600060405180830381600087803b158015611a2a57600080fd5b505af1158015611a3e573d6000803e3d6000fd5b5050610166546001600160a01b03169150634cc0f3679050611a60838561565e565b336040518363ffffffff1660e01b8152600401611a7e9291906153c7565b600060405180830381600087803b158015611a9857600080fd5b505af1158015611aac573d6000803e3d6000fd5b505061016754604051630fa2d9ff60e41b8152600093508392506001600160a01b039091169063fa2d9ff090611ae6903390600401614f92565b61010060405180830381865afa158015611b04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b289190615216565b5093975091955060019450505050505b60648111611ca7576001600160a01b03821615611ca7576000611b5b8284613648565b90508015611c115760006064611b71838961534c565b611b7b9190615379565b61016654604051634cc0f36760e01b81529192506001600160a01b031690634cc0f36790611baf90849030906004016153c7565b600060405180830381600087803b158015611bc957600080fd5b505af1158015611bdd573d6000803e3d6000fd5b505050506001600160a01b0384166000908152610164602052604081208054839290611c0a908490615671565b9091555050505b61016754604051630fa2d9ff60e41b81526001600160a01b039091169063fa2d9ff090611c42908690600401614f92565b61010060405180830381865afa158015611c60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c849190615216565b50939950919750869550611c9f94508593506155fb92505050565b915050611b38565b506000858152610161602052604090819020426003909101555185907f18b858dd8351526e5e7ab4ec353f5309024990391b3eb1e14a753249345ac5da90611cf29087815260200190565b60405180910390a25050505050565b611d09614ec9565b50600080516020615abe8339815191526000908152602090815260408051808201909152600080516020615a7e8339815191525481527f7ae3c50dab2a4efefa12dcfbd46eb63dd82ec1805ae28aeb47fe2451bfc1cdaa549181019190915290565b600080611d7783613d5b565b90506001600160a01b0381166109435760405162461bcd60e51b8152600401610e7590615684565b600081815261016160209081526040808320600180820154855261016284528285208351606081018552815460ff16151581529181015494820194909452600290930154918301919091529062015180611dfb816101c261534c565b8360040154611e0a9190615671565b421115611e1c57506000949350505050565b60028301546005840154600385015460006103e8611e3a858561534c565b611e449190615379565b90506000611e528683615379565b9050600081611e61854261565e565b611e6b919061534c565b90506064886040015182611e7f919061534c565b611e899190615379565b9b9a5050505050505050505050565b60006001600160a01b038216611f025760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610e75565b506001600160a01b03166000908152609b602052604090205490565b611f266133c4565b611f306000613d76565b565b6034546001600160a01b031690565b611f49614ec9565b50600080516020615a1e83398151915260009081526020908152604080518082019091527fe48cbce158a88b2ae025b935f2c891db41fa49d66e958301265adefc644e90755481527fe48cbce158a88b2ae025b935f2c891db41fa49d66e958301265adefc644e9076549181019190915290565b606060998054610d579061538d565b610167546001600160a01b03163314611ff75760405162461bcd60e51b8152600401610e759061549f565b600080516020615b2583398151915260009081526020819052600080516020615b6d8339815191528054600080516020615a3e8339815191525555565b611688338383613dc8565b61016754604051630a1b99af60e21b81526001600160a01b039091169063286e66bc90612070903390600401614f92565b602060405180830381865afa15801561208d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b191906152a0565b15156001036120d25760405162461bcd60e51b8152600401610e7590615614565b336000908152610164602090815260408083205461016754825163f481e86360e01b815292519194936001600160a01b039091169263f481e86392600480830193928290030181865afa15801561212d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121519190615641565b90506000821161219d5760405162461bcd60e51b8152602060048201526017602482015276139bc81c995dd85c99081d1bc818994818db185a5b5959604a1b6044820152606401610e75565b600060646121ac84600a61534c565b6121b69190615379565b6101665460405163a9059cbb60e01b81529192506001600160a01b03169063a9059cbb906121ea90859085906004016156b6565b6020604051808303816000875af1158015612209573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222d91906152a0565b50610166546001600160a01b031663a9059cbb3361224b848761565e565b6040518363ffffffff1660e01b81526004016122689291906156b6565b6020604051808303816000875af1158015612287573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ab91906152a0565b5033600081815261016460205260408120557fba8de60c3403ec381d1d484652ea1980e3c3e56359195c92525bff4ce47ad98e6122e8838661565e565b60405190815260200160405180910390a2505050565b61230833836131fe565b6123245760405162461bcd60e51b8152600401610e75906153de565b61233084848484613e92565b50505050565b61016754604051630a1b99af60e21b81526001600160a01b039091169063286e66bc90612367903390600401614f92565b602060405180830381865afa158015612384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123a891906152a0565b15156001036123c95760405162461bcd60e51b8152600401610e7590615614565b61016754604051630fa2d9ff60e41b81526000916001600160a01b03169063fa2d9ff0906123fb903390600401614f92565b61010060405180830381865afa158015612419573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243d9190615216565b5050600080516020615b2583398151915260009081526020819052939650600080516020615a3e833981519152955092935061247c9250610949915050565b3360009081526101636020908152604080832054815160e08101835293845261c3509284019290925262030d4090830152620f42406060830152624c4b40608083015263017d784060a08301526305f5e10060c08301529192508261251e5760405162461bcd60e51b8152602060048201526018602482015277139bc814995dd85c990818d85b8818994818db185a5b595960421b6044820152606401610e75565b60005b600781101561265b578086600681111561253d5761253d6152d6565b14801561255c57506000866006811115612559576125596152d6565b14155b156126495761016660009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d991906154cf565b6125e490600a6155d6565b8282600781106125f6576125f66155e5565b602002015163ffffffff1661260b919061534c565b8310156126495760405162461bcd60e51b815260206004820152600c60248201526b4e6f7420456c696769626c6560a01b6044820152606401610e75565b80612653816155fb565b915050612521565b506000606461266b85600a61534c565b6126759190615379565b61016654610167546040805163f481e86360e01b815290519394506001600160a01b039283169363a9059cbb939092169163f481e863916004808201926020929091908290030181865afa1580156126d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f59190615641565b836040518363ffffffff1660e01b81526004016127139291906156b6565b6020604051808303816000875af1158015612732573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061275691906152a0565b50610166546001600160a01b031663a9059cbb33612774848861565e565b6040518363ffffffff1660e01b81526004016127919291906156b6565b6020604051808303816000875af11580156127b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127d491906152a0565b50336000908152610165602052604081204290556001860180548692906127fc90849061565e565b909155505060405184815233907feff26bb1aaac7ce27452afaf8402dbd160686540ece1c14d857cf0c272b5cba49060200160405180910390a2505050505050565b60606128498261316b565b6000612853613ec5565b60008481526101616020908152604091829020825160c081018452815460ff1615158152600182015492810183905260028201549381019390935260038101546060840152600481015460808401526005015460a0830152825192935090916128cb57604051806020016040528060008152506128f6565b826128d582613ee5565b6040516020016128e69291906156cf565b6040516020818303038152906040525b95945050505050565b6129076133c4565b600080516020615abe833981519152600090815260205261016654600080516020615a7e833981519152805460405163a9059cbb60e01b815291926001600160a01b03169163a9059cbb91612961913391906004016156b6565b6020604051808303816000875af1158015612980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129a491906152a0565b506000808255600190910155565b61016754604051630a1b99af60e21b81526001600160a01b039091169063286e66bc906129e3903390600401614f92565b602060405180830381865afa158015612a00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a2491906152a0565b1515600103612a455760405162461bcd60e51b8152600401610e7590615614565b61016754604051630fa2d9ff60e41b815260009182916001600160a01b039091169063fa2d9ff090612a7b903390600401614f92565b61010060405180830381865afa158015612a99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abd9190615216565b5050610167546040805163f481e86360e01b815290519799509497506000966001600160a01b03909116955063f481e8639460048082019550602094509192508290030181865afa158015612b16573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3a9190615641565b9050600061016760009054906101000a90046001600160a01b03166001600160a01b0316636ae994a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bb691906152a0565b6000868152610162602052604090209091508115612c065760405162461bcd60e51b815260206004820152600d60248201526c13585c9ad95d0818db1bdcd959609a1b6044820152606401610e75565b84612c4b5760405162461bcd60e51b8152602060048201526015602482015274149959da5cdd1c985d1a5bdb881c995c5d5a5c9959605a1b6044820152606401610e75565b6000816001015411612c8e5760405162461bcd60e51b815260206004820152600c60248201526b125b9d985b1a590818d85c9960a21b6044820152606401610e75565b805460ff16612cd65760405162461bcd60e51b815260206004820152601460248201527343617264206973206e6f74206d696e7461626c6560601b6044820152606401610e75565b6040805160e081018252620186a0815262030d406020820152620f424091810191909152624c4b4060608201526301312d0060808201526305f5e10060a0820152631dcd650060c082015260005b6007811015612e5f5780866006811115612d4057612d406152d6565b03612e4d5761016660009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dbd91906154cf565b612dc890600a6155d6565b828260078110612dda57612dda6155e5565b602002015163ffffffff16612def919061534c565b33600090815261016360205260409020546001850154612e0f9190615671565b1115612e4d5760405162461bcd60e51b815260206004820152600d60248201526c26b0bc10213abc9022b93937b960991b6044820152606401610e75565b80612e57816155fb565b915050612d24565b506000606483600101546005612e75919061534c565b612e7f9190615379565b6101665460018501549192506001600160a01b0316906323b872dd9033903090612eaa90869061565e565b6040518463ffffffff1660e01b8152600401612ec8939291906156fe565b6020604051808303816000875af1158015612ee7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f0b91906152a0565b50612f31606484600101546011612f22919061534c565b612f2c9190615379565b613f77565b612f3a81613fbc565b606483600101546014612f4d919061534c565b612f579190615379565b6001600160a01b0386166000908152610164602052604081208054909190612f80908490615671565b90915550506101665460018401546001600160a01b03909116906342966c6890606490612fae90603a61534c565b612fb89190615379565b6040518263ffffffff1660e01b8152600401612fd691815260200190565b600060405180830381600087803b158015612ff057600080fd5b505af1158015613004573d6000803e3d6000fd5b5050505060006130146101685490565b60008181526101616020526040902060018082018c905586015460058201554260048201819055600382015590915061304b61430c565b600282015561305f61016880546001019055565b61306933836143c6565b604051829033907fe3d4187f6ca4248660cc0ac8b8056515bac4a8132be2eca31d6d0cc170722a7e90600090a350505050505050505050565b6001600160a01b039182166000908152609d6020908152604080832093909416825291909152205460ff1690565b6130d86133c4565b6001600160a01b03811661313d5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e75565b61121081613d76565b60006001600160e01b0319821663780e9d6360e01b14806109435750610943826143e0565b61317481614430565b6112105760405162461bcd60e51b8152600401610e7590615684565b6000818152609c6020526040902080546001600160a01b0319166001600160a01b03841690811790915581906131c582611d6b565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061320a83611d6b565b9050806001600160a01b0316846001600160a01b03161480613231575061323181856130a2565b806132555750836001600160a01b031661324a84610dda565b6001600160a01b0316145b949350505050565b826001600160a01b031661327082611d6b565b6001600160a01b0316146132965760405162461bcd60e51b8152600401610e7590615722565b6001600160a01b0382166132f85760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610e75565b613305838383600161444d565b826001600160a01b031661331882611d6b565b6001600160a01b03161461333e5760405162461bcd60e51b8152600401610e7590615722565b6000818152609c6020908152604080832080546001600160a01b03199081169091556001600160a01b03878116808652609b8552838620805460001901905590871680865283862080546001019055868652609a9094528285208054909216841790915590518493600080516020615b0583398151915291a4610f168383836001614459565b336133cd611f32565b6001600160a01b031614611f305760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e75565b600080516020615a9e833981519152546001600160a01b031690565b6112106133c4565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff161561347a57610f1683614548565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156134d4575060408051601f3d908101601f191682019092526134d1918101906152bd565b60015b6135375760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610e75565b600080516020615a9e83398151915281146135a65760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610e75565b50610f168383836145e2565b6001600160a01b03163b151590565b600154610100900460ff166135e85760405162461bcd60e51b8152600401610e7590615767565b6116888282614607565b600154610100900460ff16611f305760405162461bcd60e51b8152600401610e7590615767565b600154610100900460ff166136405760405162461bcd60e51b8152600401610e7590615767565b611f30614647565b61016754604051630fa2d9ff60e41b815260009182916001600160a01b039091169063fa2d9ff09061367e908690600401614f92565b61010060405180830381865afa15801561369c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c09190615216565b509396505050600188108015945092506136de915050575060058411155b8015613791575061016660009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613739573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061375d91906154cf565b61376890600a6155d6565b6137749061138861534c565b6001600160a01b0384166000908152610163602052604090205410155b156137a0576005915050610943565b600684101580156137b25750600a8411155b80156137d0575060018160068111156137cd576137cd6152d6565b10155b8015613883575061016660009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561382b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061384f91906154cf565b61385a90600a6155d6565b613866906161a861534c565b6001600160a01b0384166000908152610163602052604090205410155b15613892576001915050610943565b600b84101580156138a4575060148411155b80156138c2575060028160068111156138bf576138bf6152d6565b10155b8015613976575061016660009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561391d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061394191906154cf565b61394c90600a6155d6565b61395990620186a061534c565b6001600160a01b0384166000908152610163602052604090205410155b15613985576001915050610943565b60158410158015613997575060288411155b80156139b5575060038160068111156139b2576139b26152d6565b10155b8015613a69575061016660009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a3491906154cf565b613a3f90600a6155d6565b613a4c906207a12061534c565b6001600160a01b0384166000908152610163602052604090205410155b15613a78576001915050610943565b60298410158015613a8a5750603c8411155b8015613aa857506004816006811115613aa557613aa56152d6565b10155b8015613b5c575061016660009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b2791906154cf565b613b3290600a6155d6565b613b3f90622625a061534c565b6001600160a01b0384166000908152610163602052604090205410155b15613b6b576001915050610943565b603d8410158015613b7d575060508411155b8015613b9b57506005816006811115613b9857613b986152d6565b10155b8015613c4f575061016660009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613bf6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c1a91906154cf565b613c2590600a6155d6565b613c32906298968061534c565b6001600160a01b0384166000908152610163602052604090205410155b15613c5e576001915050610943565b60518410158015613c70575060648411155b8015613c8d57506006816006811115613c8b57613c8b6152d6565b145b8015613d42575061016660009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ce8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d0c91906154cf565b613d1790600a6155d6565b613d25906302faf08061534c565b6001600160a01b0384166000908152610163602052604090205410155b15613d51576001915050610943565b5060009392505050565b6000908152609a60205260409020546001600160a01b031690565b603480546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603613e255760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b6044820152606401610e75565b6001600160a01b038381166000818152609d6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b613e9d84848461325d565b613ea984848484614677565b6123305760405162461bcd60e51b8152600401610e75906157b2565b6060604051806060016040528060288152602001615b4560289139905090565b60606000613ef28361477f565b60010190506000816001600160401b03811115613f1157613f1161507e565b6040519080825280601f01601f191660200182016040528015613f3b576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084613f4557509392505050565b600080516020615b2583398151915260009081526020819052600080516020615a3e833981519152805490918391839190613fb3908490615671565b90915550505050565b60008061016a60009054906101000a90046001600160a01b03166001600160a01b031663dc3676b76040518163ffffffff1660e01b8152600401602060405180830381865afa158015614013573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061403791906152bd565b9050600061016a60009054906101000a90046001600160a01b03166001600160a01b03166316fed3e26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561408f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140b39190615641565b905060005b828110156142065761016a5460405163e4305a2960e01b815260048101839052600091829182916001600160a01b03169063e4305a2990602401608060405180830381865afa15801561410f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141339190615804565b93509350935050600082826064868c61414c919061534c565b6141569190615379565b6141609190615379565b61416a919061534c565b90506141768189615671565b97508060000361418957505050506141f4565b61016a54604051635b2c9e4760e11b815260048101879052602481018390526001600160a01b039091169063b6593c8e90604401600060405180830381600087803b1580156141d757600080fd5b505af11580156141eb573d6000803e3d6000fd5b50505050505050505b806141fe816155fb565b9150506140b8565b506101665461016a546040516323b872dd60e01b81526001600160a01b03928316926323b872dd926142429233929091169088906004016156fe565b6020604051808303816000875af1158015614261573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061428591906152a0565b50610166546001600160a01b03166323b872dd33836142a4878961565e565b6040518463ffffffff1660e01b81526004016142c2939291906156fe565b6020604051808303816000875af11580156142e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061430591906152a0565b5050505050565b60008061431a6103e8614855565b90506102bb811161432d57600591505090565b6102bb8111801561434057506103848111155b1561434d57600691505090565b6103848111801561436057506103df8111155b1561436d57600791505090565b6103df8111801561438057506103e48111155b1561438d57600891505090565b6103e4811180156143a057506103e68111155b156143ad57600f91505090565b806103e7036143be57601491505090565b600891505090565b6116888282604051806020016040528060008152506148bf565b60006001600160e01b031982166380ac58cd60e01b148061441157506001600160e01b03198216635b5e139f60e01b145b8061094357506301ffc9a760e01b6001600160e01b0319831614610943565b60008061443c83613d5b565b6001600160a01b0316141592915050565b612330848484846148f2565b600082815261016160205260409020600501546001600160a01b0385166144ae576001600160a01b03841660009081526101636020526040812080548392906144a3908490615671565b909155506143059050565b6001600160a01b0384166144e5576001600160a01b03851660009081526101636020526040812080548392906144a390849061565e565b6001600160a01b038516600090815261016360205260408120805483929061450e90849061565e565b90915550506001600160a01b038416600090815261016360205260408120805483929061453c908490615671565b90915550505050505050565b614551816135b2565b6145b35760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610e75565b600080516020615a9e83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b6145eb83614a2b565b6000825111806145f85750805b15610f16576123308383614a6b565b600154610100900460ff1661462e5760405162461bcd60e51b8152600401610e7590615767565b609861463a8382615888565b506099610f168282615888565b600154610100900460ff1661466e5760405162461bcd60e51b8152600401610e7590615767565b611f3033613d76565b600061468b846001600160a01b03166135b2565b1561477457604051630a85bd0160e11b81526001600160a01b0385169063150b7a02906146c2903390899088908890600401615947565b6020604051808303816000875af19250505080156146fd575060408051601f3d908101601f191682019092526146fa91810190615984565b60015b61475a573d80801561472b576040519150601f19603f3d011682016040523d82523d6000602084013e614730565b606091505b5080516000036147525760405162461bcd60e51b8152600401610e75906157b2565b805181602001fd5b6001600160e01b031916630a85bd0160e11b149050613255565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106147be5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b83106147e8576904ee2d6d415b85acef8160201b830492506020015b662386f26fc10000831061480657662386f26fc10000830492506010015b6305f5e100831061481e576305f5e100830492506008015b612710831061483257612710830492506004015b60648310614844576064830492506002015b600a83106109435760010192915050565b610160805460009182614867836155fb565b909155505061016054604080514260208201526001600160601b03193360601b1691810191909152605481019190915282906074016040516020818303038152906040528051906020012060001c61094391906159a1565b6148c98383614b54565b6148d66000848484614677565b610f165760405162461bcd60e51b8152600401610e75906157b2565b6148fe84848484614c67565b600181111561496d5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610e75565b816001600160a01b0385166149c9576149c48160cc8054600083815260cd60205260408120829055600182018355919091527f47197230e1e4b29fc0bd84d7d78966c0925452aff72a2a121538b102457e9ebe0155565b6149ec565b836001600160a01b0316856001600160a01b0316146149ec576149ec8582614cef565b6001600160a01b038416614a0857614a0381614d8c565b614305565b846001600160a01b0316846001600160a01b031614614305576143058482614e3b565b614a3481614548565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060614a76836135b2565b614ad15760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610e75565b600080846001600160a01b031684604051614aec91906159b5565b600060405180830381855af49150503d8060008114614b27576040519150601f19603f3d011682016040523d82523d6000602084013e614b2c565b606091505b50915091506128f68282604051806060016040528060278152602001615ade60279139614e7f565b6001600160a01b038216614baa5760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610e75565b614bb381614430565b15614bd05760405162461bcd60e51b8152600401610e75906159d1565b614bde60008383600161444d565b614be781614430565b15614c045760405162461bcd60e51b8152600401610e75906159d1565b6001600160a01b0382166000818152609b6020908152604080832080546001019055848352609a90915280822080546001600160a01b031916841790555183929190600080516020615b05833981519152908290a4611688600083836001614459565b6001811115612330576001600160a01b03841615614cad576001600160a01b0384166000908152609b602052604081208054839290614ca790849061565e565b90915550505b6001600160a01b03831615612330576001600160a01b0383166000908152609b602052604081208054839290614ce4908490615671565b909155505050505050565b60006001614cfc84611e98565b614d06919061565e565b600083815260cb6020526040902054909150808214614d59576001600160a01b038416600090815260ca60209081526040808320858452825280832054848452818420819055835260cb90915290208190555b50600091825260cb602090815260408084208490556001600160a01b03909416835260ca81528383209183525290812055565b60cc54600090614d9e9060019061565e565b600083815260cd602052604081205460cc8054939450909284908110614dc657614dc66155e5565b906000526020600020015490508060cc8381548110614de757614de76155e5565b600091825260208083209091019290925582815260cd909152604080822084905585825281205560cc805480614e1f57614e1f615a07565b6001900381819060005260206000200160009055905550505050565b6000614e4683611e98565b6001600160a01b03909316600090815260ca60209081526040808320868452825280832085905593825260cb9052919091209190915550565b60608315614e8e575081614e98565b614e988383614e9f565b9392505050565b815115614eaf5781518083602001fd5b8060405162461bcd60e51b8152600401610e759190614f66565b604051806040016040528060008152602001600081525090565b6001600160e01b03198116811461121057600080fd5b600060208284031215614f0b57600080fd5b8135614e9881614ee3565b60005b83811015614f31578181015183820152602001614f19565b50506000910152565b60008151808452614f52816020860160208601614f16565b601f01601f19169290920160200192915050565b602081526000614e986020830184614f3a565b600060208284031215614f8b57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b6001600160a01b038116811461121057600080fd5b60008060408385031215614fce57600080fd5b8235614fd981614fa6565b946020939093013593505050565b600080600060608486031215614ffc57600080fd5b833561500781614fa6565b9250602084013561501781614fa6565b929592945050506040919091013590565b60006020828403121561503a57600080fd5b8135614e9881614fa6565b6000806040838503121561505857600080fd5b823561506381614fa6565b9150602083013561507381614fa6565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126150a557600080fd5b81356001600160401b03808211156150bf576150bf61507e565b604051601f8301601f19908116603f011681019082821181831017156150e7576150e761507e565b8160405283815286602085880101111561510057600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561513357600080fd5b823561513e81614fa6565b915060208301356001600160401b0381111561515957600080fd5b61516585828601615094565b9150509250929050565b801515811461121057600080fd5b6000806040838503121561519057600080fd5b823561519b81614fa6565b915060208301356150738161516f565b600080600080608085870312156151c157600080fd5b84356151cc81614fa6565b935060208501356151dc81614fa6565b92506040850135915060608501356001600160401b038111156151fe57600080fd5b61520a87828801615094565b91505092959194509250565b600080600080600080600080610100898b03121561523357600080fd5b885161523e8161516f565b60208a015190985061524f8161516f565b60408a01519097506007811061526457600080fd5b60608a015190965061527581614fa6565b60808a015160a08b015160c08c015160e0909c01519a9d999c50979a91999098919650945092505050565b6000602082840312156152b257600080fd5b8151614e988161516f565b6000602082840312156152cf57600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b60008060008060008060c0878903121561530557600080fd5b865195506020870151945060408701519350606087015192506080870151915060a087015190509295509295509295565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761094357610943615336565b634e487b7160e01b600052601260045260246000fd5b60008261538857615388615363565b500490565b600181811c908216806153a157607f821691505b6020821081036153c157634e487b7160e01b600052602260045260246000fd5b50919050565b9182526001600160a01b0316602082015260400190565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602c90820152600080516020615a5e83398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c90820152600080516020615a5e83398151915260408201526b6163746976652070726f787960a01b606082015260800190565b60208082526016908201527513db9b1e481d985b1a185b1b184818d85b8818d85b1b60521b604082015260600190565b6000602082840312156154e157600080fd5b815160ff81168114614e9857600080fd5b600181815b8085111561552d57816000190482111561551357615513615336565b8085161561552057918102915b93841c93908002906154f7565b509250929050565b60008261554457506001610943565b8161555157506000610943565b816001811461556757600281146155715761558d565b6001915050610943565b60ff84111561558257615582615336565b50506001821b610943565b5060208310610133831016604e8410600b84101617156155b0575081810a610943565b6155ba83836154f2565b80600019048211156155ce576155ce615336565b029392505050565b6000614e9860ff841683615535565b634e487b7160e01b600052603260045260246000fd5b60006001820161560d5761560d615336565b5060010190565b6020808252601390820152721059191c995cdcc8189b1858dadb1a5cdd1959606a1b604082015260600190565b60006020828403121561565357600080fd5b8151614e9881614fa6565b8181038181111561094357610943615336565b8082018082111561094357610943615336565b602080825260189082015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604082015260600190565b6001600160a01b03929092168252602082015260400190565b600083516156e1818460208801614f16565b8351908301906156f5818360208801614f16565b01949350505050565b6001600160a01b039384168152919092166020820152604081019190915260600190565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6000806000806080858703121561581a57600080fd5b505082516020840151604085015160609095015191969095509092509050565b601f821115610f1657600081815260208120601f850160051c810160208610156158615750805b601f850160051c820191505b818110156158805782815560010161586d565b505050505050565b81516001600160401b038111156158a1576158a161507e565b6158b5816158af845461538d565b8461583a565b602080601f8311600181146158ea57600084156158d25750858301515b600019600386901b1c1916600185901b178555615880565b600085815260208120601f198616915b82811015615919578886015182559484019460019091019084016158fa565b50858210156159375787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b038581168252841660208201526040810183905260806060820181905260009061597a90830184614f3a565b9695505050505050565b60006020828403121561599657600080fd5b8151614e9881614ee3565b6000826159b0576159b0615363565b500690565b600082516159c7818460208701614f16565b9190910192915050565b6020808252601c908201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b604082015260600190565b634e487b7160e01b600052603160045260246000fdfeef78ff2707f55cf683ecba27f753a1f73d88a2972299daeedcdcce2c52b7821d335d3c6b885408497fbfb0b6def492ee75738904e5f4f2ba351dbd9fcd1022c046756e6374696f6e206d7573742062652063616c6c6564207468726f756768207ae3c50dab2a4efefa12dcfbd46eb63dd82ec1805ae28aeb47fe2451bfc1cda9360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc791b07db9f5ba47b7333684f8aab1753657d4cf52dbb1ca2e58c7c7643deb25c416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef4caf09f7dd9cf5930a0d30d4dba10a4d06c1e6d90491f8198b355f99152771b068747470733a2f2f676c6f62616c6e6574776f726b2e66696e616e63652f6170692f696d6167652f335d3c6b885408497fbfb0b6def492ee75738904e5f4f2ba351dbd9fcd1022c1a26469706673582212207bdade76611b725031535c57fb0f5b33958d8a553a7a120c32bb7ebb6887a38b64736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
