{
  "_format": "hh-sol-artifact-1",
  "contractName": "NFTGenesis",
  "sourceName": "contracts/NFTGenesis.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": false,
          "internalType": "uint256[]",
          "name": "_tokenIds",
          "type": "uint256[]"
        }
      ],
      "name": "BuyMultipleNFT",
      "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": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "DistributeRewards",
      "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": [
        {
          "internalType": "uint256",
          "name": "_price",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_percentage",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "_maxMinted",
          "type": "uint256"
        }
      ],
      "name": "addNft",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "amountNftTypes",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "cardId",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "buyMultipleNFT",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "cardMap",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "price",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "genesisPercentage",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "totalMinted",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "maxMinted",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "cardId",
          "type": "uint256"
        }
      ],
      "name": "claimRewards",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "typePool",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "distributeGenesisRewards",
      "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": [],
      "name": "gnetERC20",
      "outputs": [
        {
          "internalType": "contract GNET",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract GNET",
          "name": "_gnetERC20",
          "type": "address"
        },
        {
          "internalType": "contract USDT",
          "name": "_usdtERC20",
          "type": "address"
        },
        {
          "internalType": "contract NFT",
          "name": "_valhallaNFT",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_receiver",
          "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": [
        {
          "internalType": "uint256",
          "name": "cardId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "_address",
          "type": "address"
        }
      ],
      "name": "myNftRewards",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "nftGenesis",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "ownedNfts",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "currentRewards",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "nftGenesisPool",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "nftGenesisPoolMarker",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "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": "uint256",
          "name": "nftType",
          "type": "uint256"
        }
      ],
      "name": "percentageByNftType",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "receiverAddress",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "safeMint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "safeTransferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "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": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "tokenOfOwnerByIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "tokenId",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "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": "usdtERC20",
      "outputs": [
        {
          "internalType": "contract USDT",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    }
  ],
  "bytecode": "0x60a0604052306080523480156200001557600080fd5b506200002062000026565b620000e8565b600054610100900460ff1615620000935760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff9081161015620000e6576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b60805161320e6200012060003960008181610aee01528181610b2e01528181610c0401528181610c440152610d4f015261320e6000f3fe6080604052600436106101b55760003560e01c806301ffc9a7146101ba57806306fdde03146101ef578063081812fc14610211578063095ea7b3146102495780630962ef791461026b57806316fed3e21461028b57806318160ddd146102ac5780631d06c3b2146102cb57806323b872dd146102fc5780632f745c591461031c5780633659cfe61461033c57806340d097c31461035c57806342842e0e1461037c5780634f1ef2861461039c5780634f6ccce7146103af57806352d1902d146103cf5780636352211e146103e457806370a0823114610404578063715018a6146104245780638da5cb5b1461043957806395d89b411461044e578063a22cb46514610463578063b6593c8e14610483578063b696741f146104a3578063b71bc8bc146104f8578063b88d4fde14610518578063bb71246014610538578063c78e5b3714610566578063c87b56dd1461057d578063dc3676b71461059d578063e4305a29146105b2578063e7cb1f3e14610615578063e961e1ff14610635578063e985e9c514610656578063ed65af7414610676578063f2fde38b14610697578063f8c8765e146106b7578063fadca712146106d7575b600080fd5b3480156101c657600080fd5b506101da6101d5366004612738565b6106f7565b60405190151581526020015b60405180910390f35b3480156101fb57600080fd5b50610204610708565b6040516101e691906127a5565b34801561021d57600080fd5b5061023161022c3660046127b8565b61079a565b6040516001600160a01b0390911681526020016101e6565b34801561025557600080fd5b506102696102643660046127e6565b6107c1565b005b34801561027757600080fd5b506102696102863660046127b8565b6108db565b34801561029757600080fd5b5061016754610231906001600160a01b031681565b3480156102b857600080fd5b5060cb545b6040519081526020016101e6565b3480156102d757600080fd5b506102bd6102e63660046127b8565b6000908152610164602052604090206001015490565b34801561030857600080fd5b50610269610317366004612812565b610a1d565b34801561032857600080fd5b506102bd6103373660046127e6565b610a4e565b34801561034857600080fd5b50610269610357366004612853565b610ae4565b34801561036857600080fd5b50610269610377366004612853565b610bac565b34801561038857600080fd5b50610269610397366004612812565b610bdf565b6102696103aa366004612912565b610bfa565b3480156103bb57600080fd5b506102bd6103ca3660046127b8565b610caf565b3480156103db57600080fd5b506102bd610d42565b3480156103f057600080fd5b506102316103ff3660046127b8565b610df0565b34801561041057600080fd5b506102bd61041f366004612853565b610e24565b34801561043057600080fd5b50610269610eaa565b34801561044557600080fd5b50610231610ebe565b34801561045a57600080fd5b50610204610ecd565b34801561046f57600080fd5b5061026961047e36600461296f565b610edc565b34801561048f57600080fd5b5061026961049e3660046129a8565b610ee7565b3480156104af57600080fd5b506104e36104be3660046127e6565b6101656020908152600092835260408084209091529082529020805460019091015482565b604080519283526020830191909152016101e6565b34801561050457600080fd5b506102bd6105133660046129ca565b610fa1565b34801561052457600080fd5b506102696105333660046129ef565b611023565b34801561054457600080fd5b506102bd6105533660046127b8565b6101666020526000908152604090205481565b34801561057257600080fd5b506102bd6101685481565b34801561058957600080fd5b506102046105983660046127b8565b61105b565b3480156105a957600080fd5b506102bd6110cf565b3480156105be57600080fd5b506105f56105cd3660046127b8565b6101646020526000908152604090208054600182015460028301546003909301549192909184565b6040805194855260208501939093529183015260608201526080016101e6565b34801561062157600080fd5b50610269610630366004612a5a565b6110e0565b34801561064157600080fd5b5061016154610231906001600160a01b031681565b34801561066257600080fd5b506101da610671366004612a86565b6111b7565b34801561068257600080fd5b5061016254610231906001600160a01b031681565b3480156106a357600080fd5b506102696106b2366004612853565b6111e5565b3480156106c357600080fd5b506102696106d2366004612ab4565b61125b565b3480156106e357600080fd5b506102696106f23660046129a8565b61141c565b600061070282611698565b92915050565b60606065805461071790612b10565b80601f016020809104026020016040519081016040528092919081815260200182805461074390612b10565b80156107905780601f1061076557610100808354040283529160200191610790565b820191906000526020600020905b81548152906001019060200180831161077357829003601f168201915b5050505050905090565b60006107a5826116bd565b506000908152606960205260409020546001600160a01b031690565b60006107cc82610df0565b9050806001600160a01b0316836001600160a01b03160361083e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061085a575061085a81336111b7565b6108cc5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610835565b6108d683836116e2565b505050565b60006108e78233610fa1565b90506000811161092a5760405162461bcd60e51b815260206004820152600e60248201526d139bc81c995dd85c991cc81e595d60921b6044820152606401610835565b3360009081526101656020908152604080832085845282528083206101669092528220546001820155610168805491928492610967908490612b60565b90915550506101615460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156109be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e29190612b73565b5060405182815233907fba8de60c3403ec381d1d484652ea1980e3c3e56359195c92525bff4ce47ad98e9060200160405180910390a2505050565b610a273382611750565b610a435760405162461bcd60e51b815260040161083590612b90565b6108d68383836117af565b6000610a5983610e24565b8210610abb5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610835565b506001600160a01b0391909116600090815260c960209081526040808320938352929052205490565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610b2c5760405162461bcd60e51b815260040161083590612bdd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610b5e61190e565b6001600160a01b031614610b845760405162461bcd60e51b815260040161083590612c17565b610b8d8161192a565b60408051600080825260208201909252610ba991839190611932565b50565b610bb4611a9d565b6000610bc061015f5490565b9050610bd161015f80546001019055565b610bdb8282611afc565b5050565b6108d683838360405180602001604052806000815250611023565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c425760405162461bcd60e51b815260040161083590612bdd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c7461190e565b6001600160a01b031614610c9a5760405162461bcd60e51b815260040161083590612c17565b610ca38261192a565b610bdb82826001611932565b6000610cba60cb5490565b8210610d1d5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610835565b60cb8281548110610d3057610d30612c51565b90600052602060002001549050919050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ddd5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610835565b5060008051602061317283398151915290565b600080610dfc83611b16565b90506001600160a01b0381166107025760405162461bcd60e51b815260040161083590612c67565b60006001600160a01b038216610e8e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610835565b506001600160a01b031660009081526068602052604090205490565b610eb2611a9d565b610ebc6000611b31565b565b6097546001600160a01b031690565b60606066805461071790612b10565b610bdb338383611b83565b610163546001600160a01b03163314610f425760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c792041646d696e2063616e20706572666f726d20616374696f6e0000006044820152606401610835565b60008281526101646020526040902060020154610f5f9082612c99565b6000838152610166602052604081208054909190610f7e908490612cbb565b92505081905550806101686000828254610f989190612cbb565b90915550505050565b6001600160a01b038116600090815261016560209081526040808320858452825280832081518083018352815481526001909101548184019081528685526101669093529083205491519091908111610fff57600092505050610702565b815160208301516110109083612b60565b61101a9190612cce565b95945050505050565b61102d3383611750565b6110495760405162461bcd60e51b815260040161083590612b90565b61105584848484611c4d565b50505050565b6060611066826116bd565b600061107d60408051602081019091526000815290565b9050600081511161109d57604051806020016040528060008152506110c8565b806110a784611c80565b6040516020016110b8929190612ce5565b6040516020818303038152906040525b9392505050565b60006110db6101605490565b905090565b6110e8611a9d565b60006110f46101605490565b6000818152610164602090815260409182902061016254835163313ce56760e01b8152935194955090936001600160a01b039091169263313ce5679260048083019391928290030181865afa158015611151573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111759190612d14565b61118090600a612e1b565b61118a9086612cce565b81556001810184905560006002820155600381018390556111b061016080546001019055565b5050505050565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b6111ed611a9d565b6001600160a01b0381166112525760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610835565b610ba981611b31565b600054610100900460ff161580801561127b5750600054600160ff909116105b8061129c575061128a30611d12565b15801561129c575060005460ff166001145b6112ff5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610835565b6000805460ff191660011790558015611322576000805461ff0019166101001790555b61136a6040518060400160405280600a8152602001694e465447656e6573697360b01b815250604051806040016040528060048152602001634e46544760e01b815250611d21565b611372611d52565b61137a611d79565b611382611d52565b61016180546001600160a01b038088166001600160a01b0319928316179092556101638054868416908316179055610167805485841690831617905561016280549287169290911691909117905580156111b0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6000816001600160401b0381111561143657611436612870565b60405190808252806020026020018201604052801561145f578160200160208202803683370190505b506000848152610164602052604090206101625461016754825493945091926001600160a01b03918216926323b872dd9233929116906114a0908890612cce565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af11580156114f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115189190612b73565b508281600201546115299190612cbb565b8160030154116115705760405162461bcd60e51b815260206004820152601260248201527113585e081b5a5b9d1959081c995858da195960721b6044820152606401610835565b60005b838110156115d457600061158761015f5490565b90508084838151811061159c5761159c612c51565b6020026020010181815250506115b761015f80546001019055565b6115c13382611afc565b50806115cc81612e2a565b915050611573565b5060006115e18533610fa1565b905080156115f2576115f2856108db565b336000908152610165602090815260408083208884529091528120805490918691839190611621908490612cbb565b925050819055508483600201600082825461163c9190612cbb565b909155505060008681526101666020526040908190205460018301555133907fb2f20abb34405506b7fc439c3ea3526bf9c45147381635896d278204620f542a90611688908790612e43565b60405180910390a2505050505050565b60006001600160e01b0319821663780e9d6360e01b1480610702575061070282611da8565b6116c681611df8565b610ba95760405162461bcd60e51b815260040161083590612c67565b600081815260696020526040902080546001600160a01b0319166001600160a01b038416908117909155819061171782610df0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061175c83610df0565b9050806001600160a01b0316846001600160a01b03161480611783575061178381856111b7565b806117a75750836001600160a01b031661179c8461079a565b6001600160a01b0316145b949350505050565b826001600160a01b03166117c282610df0565b6001600160a01b0316146117e85760405162461bcd60e51b815260040161083590612e87565b6001600160a01b03821661184a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610835565b6118578383836001611e15565b826001600160a01b031661186a82610df0565b6001600160a01b0316146118905760405162461bcd60e51b815260040161083590612e87565b600081815260696020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260688552838620805460001901905590871680865283862080546001019055868652606790945282852080549092168417909155905184936000805160206131b983398151915291a4505050565b600080516020613172833981519152546001600160a01b031690565b610ba9611a9d565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611965576108d683611e21565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156119bf575060408051601f3d908101601f191682019092526119bc91810190612ecc565b60015b611a225760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610835565b6000805160206131728339815191528114611a915760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610835565b506108d6838383611ebb565b33611aa6610ebe565b6001600160a01b031614610ebc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610835565b610bdb828260405180602001604052806000815250611ee0565b6000908152606760205260409020546001600160a01b031690565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603611be05760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b6044820152606401610835565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611c588484846117af565b611c6484848484611f13565b6110555760405162461bcd60e51b815260040161083590612ee5565b60606000611c8d8361201b565b60010190506000816001600160401b03811115611cac57611cac612870565b6040519080825280601f01601f191660200182016040528015611cd6576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611ce057509392505050565b6001600160a01b03163b151590565b600054610100900460ff16611d485760405162461bcd60e51b815260040161083590612f37565b610bdb82826120f1565b600054610100900460ff16610ebc5760405162461bcd60e51b815260040161083590612f37565b600054610100900460ff16611da05760405162461bcd60e51b815260040161083590612f37565b610ebc612131565b60006001600160e01b031982166380ac58cd60e01b1480611dd957506001600160e01b03198216635b5e139f60e01b145b8061070257506301ffc9a760e01b6001600160e01b0319831614610702565b600080611e0483611b16565b6001600160a01b0316141592915050565b61105584848484612161565b611e2a81611d12565b611e8c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610835565b60008051602061317283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b611ec48361229a565b600082511180611ed15750805b156108d65761105583836122da565b611eea83836123c3565b611ef76000848484611f13565b6108d65760405162461bcd60e51b815260040161083590612ee5565b6000611f27846001600160a01b0316611d12565b1561201057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611f5e903390899088908890600401612f82565b6020604051808303816000875af1925050508015611f99575060408051601f3d908101601f19168201909252611f9691810190612fbf565b60015b611ff6573d808015611fc7576040519150601f19603f3d011682016040523d82523d6000602084013e611fcc565b606091505b508051600003611fee5760405162461bcd60e51b815260040161083590612ee5565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117a7565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061205a5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310612084576904ee2d6d415b85acef8160201b830492506020015b662386f26fc1000083106120a257662386f26fc10000830492506010015b6305f5e10083106120ba576305f5e100830492506008015b61271083106120ce57612710830492506004015b606483106120e0576064830492506002015b600a83106107025760010192915050565b600054610100900460ff166121185760405162461bcd60e51b815260040161083590612f37565b6065612124838261302a565b5060666108d6828261302a565b600054610100900460ff166121585760405162461bcd60e51b815260040161083590612f37565b610ebc33611b31565b61216d848484846124cc565b60018111156121dc5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610835565b816001600160a01b038516612238576122338160cb8054600083815260cc60205260408120829055600182018355919091527fa7ce836d032b2bf62b7e2097a8e0a6d8aeb35405ad15271e96d3b0188a1d06fb0155565b61225b565b836001600160a01b0316856001600160a01b03161461225b5761225b8582612554565b6001600160a01b03841661227757612272816125f1565b6111b0565b846001600160a01b0316846001600160a01b0316146111b0576111b084826126a0565b6122a381611e21565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606122e583611d12565b6123405760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610835565b600080846001600160a01b03168460405161235b91906130e9565b600060405180830381855af49150503d8060008114612396576040519150601f19603f3d011682016040523d82523d6000602084013e61239b565b606091505b509150915061101a8282604051806060016040528060278152602001613192602791396126e4565b6001600160a01b0382166124195760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610835565b61242281611df8565b1561243f5760405162461bcd60e51b815260040161083590613105565b61244d600083836001611e15565b61245681611df8565b156124735760405162461bcd60e51b815260040161083590613105565b6001600160a01b038216600081815260686020908152604080832080546001019055848352606790915280822080546001600160a01b0319168417905551839291906000805160206131b9833981519152908290a45050565b6001811115611055576001600160a01b03841615612512576001600160a01b0384166000908152606860205260408120805483929061250c908490612b60565b90915550505b6001600160a01b03831615611055576001600160a01b03831660009081526068602052604081208054839290612549908490612cbb565b909155505050505050565b6000600161256184610e24565b61256b9190612b60565b600083815260ca60205260409020549091508082146125be576001600160a01b038416600090815260c960209081526040808320858452825280832054848452818420819055835260ca90915290208190555b50600091825260ca602090815260408084208490556001600160a01b03909416835260c981528383209183525290812055565b60cb5460009061260390600190612b60565b600083815260cc602052604081205460cb805493945090928490811061262b5761262b612c51565b906000526020600020015490508060cb838154811061264c5761264c612c51565b600091825260208083209091019290925582815260cc909152604080822084905585825281205560cb8054806126845761268461313b565b6001900381819060005260206000200160009055905550505050565b60006126ab83610e24565b6001600160a01b03909316600090815260c960209081526040808320868452825280832085905593825260ca9052919091209190915550565b606083156126f35750816110c8565b6110c883838151156127085781518083602001fd5b8060405162461bcd60e51b815260040161083591906127a5565b6001600160e01b031981168114610ba957600080fd5b60006020828403121561274a57600080fd5b81356110c881612722565b60005b83811015612770578181015183820152602001612758565b50506000910152565b60008151808452612791816020860160208601612755565b601f01601f19169290920160200192915050565b6020815260006110c86020830184612779565b6000602082840312156127ca57600080fd5b5035919050565b6001600160a01b0381168114610ba957600080fd5b600080604083850312156127f957600080fd5b8235612804816127d1565b946020939093013593505050565b60008060006060848603121561282757600080fd5b8335612832816127d1565b92506020840135612842816127d1565b929592945050506040919091013590565b60006020828403121561286557600080fd5b81356110c8816127d1565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261289757600080fd5b81356001600160401b03808211156128b1576128b1612870565b604051601f8301601f19908116603f011681019082821181831017156128d9576128d9612870565b816040528381528660208588010111156128f257600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561292557600080fd5b8235612930816127d1565b915060208301356001600160401b0381111561294b57600080fd5b61295785828601612886565b9150509250929050565b8015158114610ba957600080fd5b6000806040838503121561298257600080fd5b823561298d816127d1565b9150602083013561299d81612961565b809150509250929050565b600080604083850312156129bb57600080fd5b50508035926020909101359150565b600080604083850312156129dd57600080fd5b82359150602083013561299d816127d1565b60008060008060808587031215612a0557600080fd5b8435612a10816127d1565b93506020850135612a20816127d1565b92506040850135915060608501356001600160401b03811115612a4257600080fd5b612a4e87828801612886565b91505092959194509250565b600080600060608486031215612a6f57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612a9957600080fd5b8235612aa4816127d1565b9150602083013561299d816127d1565b60008060008060808587031215612aca57600080fd5b8435612ad5816127d1565b93506020850135612ae5816127d1565b92506040850135612af5816127d1565b91506060850135612b05816127d1565b939692955090935050565b600181811c90821680612b2457607f821691505b602082108103612b4457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561070257610702612b4a565b600060208284031215612b8557600080fd5b81516110c881612961565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602c9082015260008051602061315283398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c9082015260008051602061315283398151915260408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b602080825260189082015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604082015260600190565b600082612cb657634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561070257610702612b4a565b808202811582820484141761070257610702612b4a565b60008351612cf7818460208801612755565b835190830190612d0b818360208801612755565b01949350505050565b600060208284031215612d2657600080fd5b815160ff811681146110c857600080fd5b600181815b80851115612d72578160001904821115612d5857612d58612b4a565b80851615612d6557918102915b93841c9390800290612d3c565b509250929050565b600082612d8957506001610702565b81612d9657506000610702565b8160018114612dac5760028114612db657612dd2565b6001915050610702565b60ff841115612dc757612dc7612b4a565b50506001821b610702565b5060208310610133831016604e8410600b8410161715612df5575081810a610702565b612dff8383612d37565b8060001904821115612e1357612e13612b4a565b029392505050565b60006110c860ff841683612d7a565b600060018201612e3c57612e3c612b4a565b5060010190565b6020808252825182820181905260009190848201906040850190845b81811015612e7b57835183529284019291840191600101612e5f565b50909695505050505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b600060208284031215612ede57600080fd5b5051919050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612fb590830184612779565b9695505050505050565b600060208284031215612fd157600080fd5b81516110c881612722565b601f8211156108d657600081815260208120601f850160051c810160208610156130035750805b601f850160051c820191505b818110156130225782815560010161300f565b505050505050565b81516001600160401b0381111561304357613043612870565b613057816130518454612b10565b84612fdc565b602080601f83116001811461308c57600084156130745750858301515b600019600386901b1c1916600185901b178555613022565b600085815260208120601f198616915b828110156130bb5788860151825594840194600190910190840161309c565b50858210156130d95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082516130fb818460208701612755565b9190910192915050565b6020808252601c908201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b604082015260600190565b634e487b7160e01b600052603160045260246000fdfe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122043118b94fb29ceda7a5f35bdbf093f7b9202b4f0ad803b0ec40215c531a89e0b64736f6c63430008110033",
  "deployedBytecode": "0x6080604052600436106101b55760003560e01c806301ffc9a7146101ba57806306fdde03146101ef578063081812fc14610211578063095ea7b3146102495780630962ef791461026b57806316fed3e21461028b57806318160ddd146102ac5780631d06c3b2146102cb57806323b872dd146102fc5780632f745c591461031c5780633659cfe61461033c57806340d097c31461035c57806342842e0e1461037c5780634f1ef2861461039c5780634f6ccce7146103af57806352d1902d146103cf5780636352211e146103e457806370a0823114610404578063715018a6146104245780638da5cb5b1461043957806395d89b411461044e578063a22cb46514610463578063b6593c8e14610483578063b696741f146104a3578063b71bc8bc146104f8578063b88d4fde14610518578063bb71246014610538578063c78e5b3714610566578063c87b56dd1461057d578063dc3676b71461059d578063e4305a29146105b2578063e7cb1f3e14610615578063e961e1ff14610635578063e985e9c514610656578063ed65af7414610676578063f2fde38b14610697578063f8c8765e146106b7578063fadca712146106d7575b600080fd5b3480156101c657600080fd5b506101da6101d5366004612738565b6106f7565b60405190151581526020015b60405180910390f35b3480156101fb57600080fd5b50610204610708565b6040516101e691906127a5565b34801561021d57600080fd5b5061023161022c3660046127b8565b61079a565b6040516001600160a01b0390911681526020016101e6565b34801561025557600080fd5b506102696102643660046127e6565b6107c1565b005b34801561027757600080fd5b506102696102863660046127b8565b6108db565b34801561029757600080fd5b5061016754610231906001600160a01b031681565b3480156102b857600080fd5b5060cb545b6040519081526020016101e6565b3480156102d757600080fd5b506102bd6102e63660046127b8565b6000908152610164602052604090206001015490565b34801561030857600080fd5b50610269610317366004612812565b610a1d565b34801561032857600080fd5b506102bd6103373660046127e6565b610a4e565b34801561034857600080fd5b50610269610357366004612853565b610ae4565b34801561036857600080fd5b50610269610377366004612853565b610bac565b34801561038857600080fd5b50610269610397366004612812565b610bdf565b6102696103aa366004612912565b610bfa565b3480156103bb57600080fd5b506102bd6103ca3660046127b8565b610caf565b3480156103db57600080fd5b506102bd610d42565b3480156103f057600080fd5b506102316103ff3660046127b8565b610df0565b34801561041057600080fd5b506102bd61041f366004612853565b610e24565b34801561043057600080fd5b50610269610eaa565b34801561044557600080fd5b50610231610ebe565b34801561045a57600080fd5b50610204610ecd565b34801561046f57600080fd5b5061026961047e36600461296f565b610edc565b34801561048f57600080fd5b5061026961049e3660046129a8565b610ee7565b3480156104af57600080fd5b506104e36104be3660046127e6565b6101656020908152600092835260408084209091529082529020805460019091015482565b604080519283526020830191909152016101e6565b34801561050457600080fd5b506102bd6105133660046129ca565b610fa1565b34801561052457600080fd5b506102696105333660046129ef565b611023565b34801561054457600080fd5b506102bd6105533660046127b8565b6101666020526000908152604090205481565b34801561057257600080fd5b506102bd6101685481565b34801561058957600080fd5b506102046105983660046127b8565b61105b565b3480156105a957600080fd5b506102bd6110cf565b3480156105be57600080fd5b506105f56105cd3660046127b8565b6101646020526000908152604090208054600182015460028301546003909301549192909184565b6040805194855260208501939093529183015260608201526080016101e6565b34801561062157600080fd5b50610269610630366004612a5a565b6110e0565b34801561064157600080fd5b5061016154610231906001600160a01b031681565b34801561066257600080fd5b506101da610671366004612a86565b6111b7565b34801561068257600080fd5b5061016254610231906001600160a01b031681565b3480156106a357600080fd5b506102696106b2366004612853565b6111e5565b3480156106c357600080fd5b506102696106d2366004612ab4565b61125b565b3480156106e357600080fd5b506102696106f23660046129a8565b61141c565b600061070282611698565b92915050565b60606065805461071790612b10565b80601f016020809104026020016040519081016040528092919081815260200182805461074390612b10565b80156107905780601f1061076557610100808354040283529160200191610790565b820191906000526020600020905b81548152906001019060200180831161077357829003601f168201915b5050505050905090565b60006107a5826116bd565b506000908152606960205260409020546001600160a01b031690565b60006107cc82610df0565b9050806001600160a01b0316836001600160a01b03160361083e5760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b60648201526084015b60405180910390fd5b336001600160a01b038216148061085a575061085a81336111b7565b6108cc5760405162461bcd60e51b815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610835565b6108d683836116e2565b505050565b60006108e78233610fa1565b90506000811161092a5760405162461bcd60e51b815260206004820152600e60248201526d139bc81c995dd85c991cc81e595d60921b6044820152606401610835565b3360009081526101656020908152604080832085845282528083206101669092528220546001820155610168805491928492610967908490612b60565b90915550506101615460405163a9059cbb60e01b8152336004820152602481018490526001600160a01b039091169063a9059cbb906044016020604051808303816000875af11580156109be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e29190612b73565b5060405182815233907fba8de60c3403ec381d1d484652ea1980e3c3e56359195c92525bff4ce47ad98e9060200160405180910390a2505050565b610a273382611750565b610a435760405162461bcd60e51b815260040161083590612b90565b6108d68383836117af565b6000610a5983610e24565b8210610abb5760405162461bcd60e51b815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201526a74206f6620626f756e647360a81b6064820152608401610835565b506001600160a01b0391909116600090815260c960209081526040808320938352929052205490565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610b2c5760405162461bcd60e51b815260040161083590612bdd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610b5e61190e565b6001600160a01b031614610b845760405162461bcd60e51b815260040161083590612c17565b610b8d8161192a565b60408051600080825260208201909252610ba991839190611932565b50565b610bb4611a9d565b6000610bc061015f5490565b9050610bd161015f80546001019055565b610bdb8282611afc565b5050565b6108d683838360405180602001604052806000815250611023565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163003610c425760405162461bcd60e51b815260040161083590612bdd565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610c7461190e565b6001600160a01b031614610c9a5760405162461bcd60e51b815260040161083590612c17565b610ca38261192a565b610bdb82826001611932565b6000610cba60cb5490565b8210610d1d5760405162461bcd60e51b815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201526b7574206f6620626f756e647360a01b6064820152608401610835565b60cb8281548110610d3057610d30612c51565b90600052602060002001549050919050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610ddd5760405162461bcd60e51b815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c6044820152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b6064820152608401610835565b5060008051602061317283398151915290565b600080610dfc83611b16565b90506001600160a01b0381166107025760405162461bcd60e51b815260040161083590612c67565b60006001600160a01b038216610e8e5760405162461bcd60e51b815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f7420612076616044820152683634b21037bbb732b960b91b6064820152608401610835565b506001600160a01b031660009081526068602052604090205490565b610eb2611a9d565b610ebc6000611b31565b565b6097546001600160a01b031690565b60606066805461071790612b10565b610bdb338383611b83565b610163546001600160a01b03163314610f425760405162461bcd60e51b815260206004820152601d60248201527f4f6e6c792041646d696e2063616e20706572666f726d20616374696f6e0000006044820152606401610835565b60008281526101646020526040902060020154610f5f9082612c99565b6000838152610166602052604081208054909190610f7e908490612cbb565b92505081905550806101686000828254610f989190612cbb565b90915550505050565b6001600160a01b038116600090815261016560209081526040808320858452825280832081518083018352815481526001909101548184019081528685526101669093529083205491519091908111610fff57600092505050610702565b815160208301516110109083612b60565b61101a9190612cce565b95945050505050565b61102d3383611750565b6110495760405162461bcd60e51b815260040161083590612b90565b61105584848484611c4d565b50505050565b6060611066826116bd565b600061107d60408051602081019091526000815290565b9050600081511161109d57604051806020016040528060008152506110c8565b806110a784611c80565b6040516020016110b8929190612ce5565b6040516020818303038152906040525b9392505050565b60006110db6101605490565b905090565b6110e8611a9d565b60006110f46101605490565b6000818152610164602090815260409182902061016254835163313ce56760e01b8152935194955090936001600160a01b039091169263313ce5679260048083019391928290030181865afa158015611151573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111759190612d14565b61118090600a612e1b565b61118a9086612cce565b81556001810184905560006002820155600381018390556111b061016080546001019055565b5050505050565b6001600160a01b039182166000908152606a6020908152604080832093909416825291909152205460ff1690565b6111ed611a9d565b6001600160a01b0381166112525760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610835565b610ba981611b31565b600054610100900460ff161580801561127b5750600054600160ff909116105b8061129c575061128a30611d12565b15801561129c575060005460ff166001145b6112ff5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610835565b6000805460ff191660011790558015611322576000805461ff0019166101001790555b61136a6040518060400160405280600a8152602001694e465447656e6573697360b01b815250604051806040016040528060048152602001634e46544760e01b815250611d21565b611372611d52565b61137a611d79565b611382611d52565b61016180546001600160a01b038088166001600160a01b0319928316179092556101638054868416908316179055610167805485841690831617905561016280549287169290911691909117905580156111b0576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050505050565b6000816001600160401b0381111561143657611436612870565b60405190808252806020026020018201604052801561145f578160200160208202803683370190505b506000848152610164602052604090206101625461016754825493945091926001600160a01b03918216926323b872dd9233929116906114a0908890612cce565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303816000875af11580156114f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115189190612b73565b508281600201546115299190612cbb565b8160030154116115705760405162461bcd60e51b815260206004820152601260248201527113585e081b5a5b9d1959081c995858da195960721b6044820152606401610835565b60005b838110156115d457600061158761015f5490565b90508084838151811061159c5761159c612c51565b6020026020010181815250506115b761015f80546001019055565b6115c13382611afc565b50806115cc81612e2a565b915050611573565b5060006115e18533610fa1565b905080156115f2576115f2856108db565b336000908152610165602090815260408083208884529091528120805490918691839190611621908490612cbb565b925050819055508483600201600082825461163c9190612cbb565b909155505060008681526101666020526040908190205460018301555133907fb2f20abb34405506b7fc439c3ea3526bf9c45147381635896d278204620f542a90611688908790612e43565b60405180910390a2505050505050565b60006001600160e01b0319821663780e9d6360e01b1480610702575061070282611da8565b6116c681611df8565b610ba95760405162461bcd60e51b815260040161083590612c67565b600081815260696020526040902080546001600160a01b0319166001600160a01b038416908117909155819061171782610df0565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008061175c83610df0565b9050806001600160a01b0316846001600160a01b03161480611783575061178381856111b7565b806117a75750836001600160a01b031661179c8461079a565b6001600160a01b0316145b949350505050565b826001600160a01b03166117c282610df0565b6001600160a01b0316146117e85760405162461bcd60e51b815260040161083590612e87565b6001600160a01b03821661184a5760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610835565b6118578383836001611e15565b826001600160a01b031661186a82610df0565b6001600160a01b0316146118905760405162461bcd60e51b815260040161083590612e87565b600081815260696020908152604080832080546001600160a01b03199081169091556001600160a01b0387811680865260688552838620805460001901905590871680865283862080546001019055868652606790945282852080549092168417909155905184936000805160206131b983398151915291a4505050565b600080516020613172833981519152546001600160a01b031690565b610ba9611a9d565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611965576108d683611e21565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156119bf575060408051601f3d908101601f191682019092526119bc91810190612ecc565b60015b611a225760405162461bcd60e51b815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201526d6f6e206973206e6f74205555505360901b6064820152608401610835565b6000805160206131728339815191528114611a915760405162461bcd60e51b815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f786044820152681a58589b195555525160ba1b6064820152608401610835565b506108d6838383611ebb565b33611aa6610ebe565b6001600160a01b031614610ebc5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610835565b610bdb828260405180602001604052806000815250611ee0565b6000908152606760205260409020546001600160a01b031690565b609780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b816001600160a01b0316836001600160a01b031603611be05760405162461bcd60e51b815260206004820152601960248201527822a9219b99189d1030b8383937bb32903a379031b0b63632b960391b6044820152606401610835565b6001600160a01b038381166000818152606a6020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b611c588484846117af565b611c6484848484611f13565b6110555760405162461bcd60e51b815260040161083590612ee5565b60606000611c8d8361201b565b60010190506000816001600160401b03811115611cac57611cac612870565b6040519080825280601f01601f191660200182016040528015611cd6576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a8504945084611ce057509392505050565b6001600160a01b03163b151590565b600054610100900460ff16611d485760405162461bcd60e51b815260040161083590612f37565b610bdb82826120f1565b600054610100900460ff16610ebc5760405162461bcd60e51b815260040161083590612f37565b600054610100900460ff16611da05760405162461bcd60e51b815260040161083590612f37565b610ebc612131565b60006001600160e01b031982166380ac58cd60e01b1480611dd957506001600160e01b03198216635b5e139f60e01b145b8061070257506301ffc9a760e01b6001600160e01b0319831614610702565b600080611e0483611b16565b6001600160a01b0316141592915050565b61105584848484612161565b611e2a81611d12565b611e8c5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610835565b60008051602061317283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b611ec48361229a565b600082511180611ed15750805b156108d65761105583836122da565b611eea83836123c3565b611ef76000848484611f13565b6108d65760405162461bcd60e51b815260040161083590612ee5565b6000611f27846001600160a01b0316611d12565b1561201057604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290611f5e903390899088908890600401612f82565b6020604051808303816000875af1925050508015611f99575060408051601f3d908101601f19168201909252611f9691810190612fbf565b60015b611ff6573d808015611fc7576040519150601f19603f3d011682016040523d82523d6000602084013e611fcc565b606091505b508051600003611fee5760405162461bcd60e51b815260040161083590612ee5565b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117a7565b506001949350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b831061205a5772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6904ee2d6d415b85acef8160201b8310612084576904ee2d6d415b85acef8160201b830492506020015b662386f26fc1000083106120a257662386f26fc10000830492506010015b6305f5e10083106120ba576305f5e100830492506008015b61271083106120ce57612710830492506004015b606483106120e0576064830492506002015b600a83106107025760010192915050565b600054610100900460ff166121185760405162461bcd60e51b815260040161083590612f37565b6065612124838261302a565b5060666108d6828261302a565b600054610100900460ff166121585760405162461bcd60e51b815260040161083590612f37565b610ebc33611b31565b61216d848484846124cc565b60018111156121dc5760405162461bcd60e51b815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e7365637574697665207472604482015274185b9cd9995c9cc81b9bdd081cdd5c1c1bdc9d1959605a1b6064820152608401610835565b816001600160a01b038516612238576122338160cb8054600083815260cc60205260408120829055600182018355919091527fa7ce836d032b2bf62b7e2097a8e0a6d8aeb35405ad15271e96d3b0188a1d06fb0155565b61225b565b836001600160a01b0316856001600160a01b03161461225b5761225b8582612554565b6001600160a01b03841661227757612272816125f1565b6111b0565b846001600160a01b0316846001600160a01b0316146111b0576111b084826126a0565b6122a381611e21565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606122e583611d12565b6123405760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610835565b600080846001600160a01b03168460405161235b91906130e9565b600060405180830381855af49150503d8060008114612396576040519150601f19603f3d011682016040523d82523d6000602084013e61239b565b606091505b509150915061101a8282604051806060016040528060278152602001613192602791396126e4565b6001600160a01b0382166124195760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610835565b61242281611df8565b1561243f5760405162461bcd60e51b815260040161083590613105565b61244d600083836001611e15565b61245681611df8565b156124735760405162461bcd60e51b815260040161083590613105565b6001600160a01b038216600081815260686020908152604080832080546001019055848352606790915280822080546001600160a01b0319168417905551839291906000805160206131b9833981519152908290a45050565b6001811115611055576001600160a01b03841615612512576001600160a01b0384166000908152606860205260408120805483929061250c908490612b60565b90915550505b6001600160a01b03831615611055576001600160a01b03831660009081526068602052604081208054839290612549908490612cbb565b909155505050505050565b6000600161256184610e24565b61256b9190612b60565b600083815260ca60205260409020549091508082146125be576001600160a01b038416600090815260c960209081526040808320858452825280832054848452818420819055835260ca90915290208190555b50600091825260ca602090815260408084208490556001600160a01b03909416835260c981528383209183525290812055565b60cb5460009061260390600190612b60565b600083815260cc602052604081205460cb805493945090928490811061262b5761262b612c51565b906000526020600020015490508060cb838154811061264c5761264c612c51565b600091825260208083209091019290925582815260cc909152604080822084905585825281205560cb8054806126845761268461313b565b6001900381819060005260206000200160009055905550505050565b60006126ab83610e24565b6001600160a01b03909316600090815260c960209081526040808320868452825280832085905593825260ca9052919091209190915550565b606083156126f35750816110c8565b6110c883838151156127085781518083602001fd5b8060405162461bcd60e51b815260040161083591906127a5565b6001600160e01b031981168114610ba957600080fd5b60006020828403121561274a57600080fd5b81356110c881612722565b60005b83811015612770578181015183820152602001612758565b50506000910152565b60008151808452612791816020860160208601612755565b601f01601f19169290920160200192915050565b6020815260006110c86020830184612779565b6000602082840312156127ca57600080fd5b5035919050565b6001600160a01b0381168114610ba957600080fd5b600080604083850312156127f957600080fd5b8235612804816127d1565b946020939093013593505050565b60008060006060848603121561282757600080fd5b8335612832816127d1565b92506020840135612842816127d1565b929592945050506040919091013590565b60006020828403121561286557600080fd5b81356110c8816127d1565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261289757600080fd5b81356001600160401b03808211156128b1576128b1612870565b604051601f8301601f19908116603f011681019082821181831017156128d9576128d9612870565b816040528381528660208588010111156128f257600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561292557600080fd5b8235612930816127d1565b915060208301356001600160401b0381111561294b57600080fd5b61295785828601612886565b9150509250929050565b8015158114610ba957600080fd5b6000806040838503121561298257600080fd5b823561298d816127d1565b9150602083013561299d81612961565b809150509250929050565b600080604083850312156129bb57600080fd5b50508035926020909101359150565b600080604083850312156129dd57600080fd5b82359150602083013561299d816127d1565b60008060008060808587031215612a0557600080fd5b8435612a10816127d1565b93506020850135612a20816127d1565b92506040850135915060608501356001600160401b03811115612a4257600080fd5b612a4e87828801612886565b91505092959194509250565b600080600060608486031215612a6f57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215612a9957600080fd5b8235612aa4816127d1565b9150602083013561299d816127d1565b60008060008060808587031215612aca57600080fd5b8435612ad5816127d1565b93506020850135612ae5816127d1565b92506040850135612af5816127d1565b91506060850135612b05816127d1565b939692955090935050565b600181811c90821680612b2457607f821691505b602082108103612b4457634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561070257610702612b4a565b600060208284031215612b8557600080fd5b81516110c881612961565b6020808252602d908201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560408201526c1c881bdc88185c1c1c9bdd9959609a1b606082015260800190565b6020808252602c9082015260008051602061315283398151915260408201526b19195b1959d85d1958d85b1b60a21b606082015260800190565b6020808252602c9082015260008051602061315283398151915260408201526b6163746976652070726f787960a01b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b602080825260189082015277115490cdcc8c4e881a5b9d985b1a59081d1bdad95b88125160421b604082015260600190565b600082612cb657634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561070257610702612b4a565b808202811582820484141761070257610702612b4a565b60008351612cf7818460208801612755565b835190830190612d0b818360208801612755565b01949350505050565b600060208284031215612d2657600080fd5b815160ff811681146110c857600080fd5b600181815b80851115612d72578160001904821115612d5857612d58612b4a565b80851615612d6557918102915b93841c9390800290612d3c565b509250929050565b600082612d8957506001610702565b81612d9657506000610702565b8160018114612dac5760028114612db657612dd2565b6001915050610702565b60ff841115612dc757612dc7612b4a565b50506001821b610702565b5060208310610133831016604e8410600b8410161715612df5575081810a610702565b612dff8383612d37565b8060001904821115612e1357612e13612b4a565b029392505050565b60006110c860ff841683612d7a565b600060018201612e3c57612e3c612b4a565b5060010190565b6020808252825182820181905260009190848201906040850190845b81811015612e7b57835183529284019291840191600101612e5f565b50909695505050505050565b60208082526025908201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060408201526437bbb732b960d91b606082015260800190565b600060208284031215612ede57600080fd5b5051919050565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090612fb590830184612779565b9695505050505050565b600060208284031215612fd157600080fd5b81516110c881612722565b601f8211156108d657600081815260208120601f850160051c810160208610156130035750805b601f850160051c820191505b818110156130225782815560010161300f565b505050505050565b81516001600160401b0381111561304357613043612870565b613057816130518454612b10565b84612fdc565b602080601f83116001811461308c57600084156130745750858301515b600019600386901b1c1916600185901b178555613022565b600085815260208120601f198616915b828110156130bb5788860151825594840194600190910190840161309c565b50858210156130d95787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600082516130fb818460208701612755565b9190910192915050565b6020808252601c908201527b115490cdcc8c4e881d1bdad95b88185b1c9958591e481b5a5b9d195960221b604082015260600190565b634e487b7160e01b600052603160045260246000fdfe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa264697066735822122043118b94fb29ceda7a5f35bdbf093f7b9202b4f0ad803b0ec40215c531a89e0b64736f6c63430008110033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
