[ { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" }, { "internalType": "string", "name": "symbol_", "type": "string" }, { "internalType": "string", "name": "baseURI_", "type": "string" }, { "internalType": "address", "name": "_mintFeeReceiver", "type": "address" }, { "internalType": "uint256", "name": "_whitelistMintFee", "type": "uint256" }, { "internalType": "uint256", "name": "_publicMintFee", "type": "uint256" }, { "internalType": "uint256", "name": "_maxSupply", "type": "uint256" }, { "internalType": "address", "name": "royaltyReceiver", "type": "address" }, { "internalType": "uint96", "name": "royaltyFeeNumerator", "type": "uint96" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "numerator", "type": "uint256" }, { "internalType": "uint256", "name": "denominator", "type": "uint256" } ], "name": "ERC2981InvalidDefaultRoyalty", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC2981InvalidDefaultRoyaltyReceiver", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "numerator", "type": "uint256" }, { "internalType": "uint256", "name": "denominator", "type": "uint256" } ], "name": "ERC2981InvalidTokenRoyalty", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC2981InvalidTokenRoyaltyReceiver", "type": "error" }, { "inputs": [], "name": "ERC721EnumerableForbiddenBatchMint", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721IncorrectOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721InsufficientApproval", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC721InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "operator", "type": "address" } ], "name": "ERC721InvalidOperator", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC721InvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC721InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC721InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ERC721NonexistentToken", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "uint256", "name": "index", "type": "uint256" } ], "name": "ERC721OutOfBoundsIndex", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [], "name": "ReentrancyGuardReentrantCall", "type": "error" }, { "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": "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" }, { "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": "getApproved", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "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": "maxSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mintCap", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "mintFeeReceiver", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "quantity", "type": "uint8" } ], "name": "mintPublic", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "quantity", "type": "uint16" } ], "name": "mintReserved", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32[]", "name": "whitelistMerkleProof", "type": "bytes32[]" }, { "internalType": "uint8", "name": "quantity", "type": "uint8" } ], "name": "mintWhitelist", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "minted", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "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": [], "name": "publicMintActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "publicMintFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "uint256", "name": "salePrice", "type": "uint256" } ], "name": "royaltyInfo", "outputs": [ { "internalType": "address", "name": "", "type": "address" }, { "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": "string", "name": "baseURI_", "type": "string" } ], "name": "setBaseURI", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint96", "name": "feeNumerator", "type": "uint96" } ], "name": "setDefaultRoyalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newMaxSupply", "type": "uint256" } ], "name": "setMaxSupply", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint8", "name": "_mintCap", "type": "uint8" } ], "name": "setMintCap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "mintFeeReceiver_", "type": "address" } ], "name": "setMintFeeReceiver", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "name_", "type": "string" } ], "name": "setName", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_publicMintActive", "type": "bool" } ], "name": "setPublicMintActive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_publicMintFee", "type": "uint256" } ], "name": "setPublicMintFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "symbol_", "type": "string" } ], "name": "setSymbol", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "uint96", "name": "feeNumerator", "type": "uint96" } ], "name": "setTokenRoyalty", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "merkleRoot", "type": "bytes32" } ], "name": "setWhitelistMerkleRoot", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "_whitelistMintActive", "type": "bool" } ], "name": "setWhitelistMintActive", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_whitelistMintFee", "type": "uint256" } ], "name": "setWhitelistMintFee", "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": [], "name": "whitelistMerkleRoot", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "whitelistMintActive", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "whitelistMintFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" } ]
60806040526002601860026101000a81548160ff021916908360ff1602179055503480156200002d57600080fd5b50604051620058cc380380620058cc83398181016040528101906200005391906200068f565b338989816002908162000067919062000a0c565b50806003908162000079919062000a0c565b505050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000f15760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000e8919062000b04565b60405180910390fd5b62000102816200019460201b60201c565b506001600d8190555086601190816200011c919062000a0c565b5085601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508460148190555083601581905550826013819055506200018582826200025a60201b60201c565b50505050505050505062000b98565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006200026c6200040960201b60201c565b6bffffffffffffffffffffffff16905080826bffffffffffffffffffffffff161115620002d45781816040517f6f483d09000000000000000000000000000000000000000000000000000000008152600401620002cb92919062000b6b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620003495760006040517fb6d9900a00000000000000000000000000000000000000000000000000000000815260040162000340919062000b04565b60405180910390fd5b60405180604001604052808473ffffffffffffffffffffffffffffffffffffffff168152602001836bffffffffffffffffffffffff168152506000808201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b6000612710905090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200047c8262000431565b810181811067ffffffffffffffff821117156200049e576200049d62000442565b5b80604052505050565b6000620004b362000413565b9050620004c1828262000471565b919050565b600067ffffffffffffffff821115620004e457620004e362000442565b5b620004ef8262000431565b9050602081019050919050565b60005b838110156200051c578082015181840152602081019050620004ff565b60008484015250505050565b60006200053f6200053984620004c6565b620004a7565b9050828152602081018484840111156200055e576200055d6200042c565b5b6200056b848285620004fc565b509392505050565b600082601f8301126200058b576200058a62000427565b5b81516200059d84826020860162000528565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620005d382620005a6565b9050919050565b620005e581620005c6565b8114620005f157600080fd5b50565b6000815190506200060581620005da565b92915050565b6000819050919050565b62000620816200060b565b81146200062c57600080fd5b50565b600081519050620006408162000615565b92915050565b60006bffffffffffffffffffffffff82169050919050565b620006698162000646565b81146200067557600080fd5b50565b60008151905062000689816200065e565b92915050565b60008060008060008060008060006101208a8c031215620006b557620006b46200041d565b5b60008a015167ffffffffffffffff811115620006d657620006d562000422565b5b620006e48c828d0162000573565b99505060208a015167ffffffffffffffff81111562000708576200070762000422565b5b620007168c828d0162000573565b98505060408a015167ffffffffffffffff8111156200073a576200073962000422565b5b620007488c828d0162000573565b97505060606200075b8c828d01620005f4565b96505060806200076e8c828d016200062f565b95505060a0620007818c828d016200062f565b94505060c0620007948c828d016200062f565b93505060e0620007a78c828d01620005f4565b925050610100620007bb8c828d0162000678565b9150509295985092959850929598565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200081e57607f821691505b602082108103620008345762000833620007d6565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200089e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200085f565b620008aa86836200085f565b95508019841693508086168417925050509392505050565b6000819050919050565b6000620008ed620008e7620008e1846200060b565b620008c2565b6200060b565b9050919050565b6000819050919050565b6200090983620008cc565b620009216200091882620008f4565b8484546200086c565b825550505050565b600090565b6200093862000929565b62000945818484620008fe565b505050565b5b818110156200096d57620009616000826200092e565b6001810190506200094b565b5050565b601f821115620009bc5762000986816200083a565b62000991846200084f565b81016020851015620009a1578190505b620009b9620009b0856200084f565b8301826200094a565b50505b505050565b600082821c905092915050565b6000620009e160001984600802620009c1565b1980831691505092915050565b6000620009fc8383620009ce565b9150826002028217905092915050565b62000a1782620007cb565b67ffffffffffffffff81111562000a335762000a3262000442565b5b62000a3f825462000805565b62000a4c82828562000971565b600060209050601f83116001811462000a84576000841562000a6f578287015190505b62000a7b8582620009ee565b86555062000aeb565b601f19841662000a94866200083a565b60005b8281101562000abe5784890151825560018201915060208501945060208101905062000a97565b8683101562000ade578489015162000ada601f891682620009ce565b8355505b6001600288020188555050505b505050505050565b62000afe81620005c6565b82525050565b600060208201905062000b1b600083018462000af3565b92915050565b600062000b4262000b3c62000b368462000646565b620008c2565b6200060b565b9050919050565b62000b548162000b21565b82525050565b62000b65816200060b565b82525050565b600060408201905062000b82600083018562000b49565b62000b91602083018462000b5a565b9392505050565b614d248062000ba86000396000f3fe6080604052600436106102725760003560e01c80636f8b44b01161014f578063bd32fb66116100c1578063d5abeb011161007a578063d5abeb0114610962578063d883656a1461098d578063dd9d6274146109a9578063e2fe1f89146109d2578063e985e9c5146109fb578063f2fde38b14610a3857610272565b8063bd32fb6614610858578063c47f002714610881578063c87b56dd146108aa578063cc30647f146108e7578063d258195f14610910578063d2d2070a1461093957610272565b806395d89b411161011357806395d89b411461075c578063a22cb46514610787578063aa98e0c6146107b0578063b67c25a3146107db578063b84c824614610806578063b88d4fde1461082f57610272565b80636f8b44b01461068957806370a08231146106b2578063715018a6146106ef57806376c71ca1146107065780638da5cb5b1461073157610272565b80632a55205a116101e8578063544f7fc6116101ac578063544f7fc61461058857806355f804b3146105b35780635944c753146105dc5780636352211e1461060557806364de1e851461064257806367dce1ed1461066d57610272565b80632a55205a1461047e5780632b707c71146104bc5780632f745c59146104e557806342842e0e146105225780634f6ccce71461054b57610272565b8063145f3c271161023a578063145f3c271461036e57806318160ddd1461039957806318bea1c4146103c45780631e7269c5146103ed57806323b872dd1461042a5780632a425b581461045357610272565b806301ffc9a71461027757806304634d8d146102b457806306fdde03146102dd578063081812fc14610308578063095ea7b314610345575b600080fd5b34801561028357600080fd5b5061029e6004803603810190610299919061365b565b610a61565b6040516102ab91906136a3565b60405180910390f35b3480156102c057600080fd5b506102db60048036038101906102d69190613760565b610a73565b005b3480156102e957600080fd5b506102f2610a89565b6040516102ff9190613830565b60405180910390f35b34801561031457600080fd5b5061032f600480360381019061032a9190613888565b610b1b565b60405161033c91906138c4565b60405180910390f35b34801561035157600080fd5b5061036c600480360381019061036791906138df565b610b37565b005b34801561037a57600080fd5b50610383610b4d565b604051610390919061392e565b60405180910390f35b3480156103a557600080fd5b506103ae610b53565b6040516103bb919061392e565b60405180910390f35b3480156103d057600080fd5b506103eb60048036038101906103e69190613975565b610b60565b005b3480156103f957600080fd5b50610414600480360381019061040f91906139a2565b610b85565b604051610421919061392e565b60405180910390f35b34801561043657600080fd5b50610451600480360381019061044c91906139cf565b610b9d565b005b34801561045f57600080fd5b50610468610c9f565b60405161047591906138c4565b60405180910390f35b34801561048a57600080fd5b506104a560048036038101906104a09190613a22565b610cc5565b6040516104b3929190613a62565b60405180910390f35b3480156104c857600080fd5b506104e360048036038101906104de9190613975565b610eaf565b005b3480156104f157600080fd5b5061050c600480360381019061050791906138df565b610ed4565b604051610519919061392e565b60405180910390f35b34801561052e57600080fd5b50610549600480360381019061054491906139cf565b610f7d565b005b34801561055757600080fd5b50610572600480360381019061056d9190613888565b610f9d565b60405161057f919061392e565b60405180910390f35b34801561059457600080fd5b5061059d611013565b6040516105aa919061392e565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d59190613bc0565b611019565b005b3480156105e857600080fd5b5061060360048036038101906105fe9190613c09565b611034565b005b34801561061157600080fd5b5061062c60048036038101906106279190613888565b61104c565b60405161063991906138c4565b60405180910390f35b34801561064e57600080fd5b5061065761105e565b60405161066491906136a3565b60405180910390f35b61068760048036038101906106829190613c95565b611071565b005b34801561069557600080fd5b506106b060048036038101906106ab9190613888565b6111d9565b005b3480156106be57600080fd5b506106d960048036038101906106d491906139a2565b6111eb565b6040516106e6919061392e565b60405180910390f35b3480156106fb57600080fd5b506107046112a5565b005b34801561071257600080fd5b5061071b6112e8565b6040516107289190613cd1565b60405180910390f35b34801561073d57600080fd5b506107466112fb565b60405161075391906138c4565b60405180910390f35b34801561076857600080fd5b50610771611325565b60405161077e9190613830565b60405180910390f35b34801561079357600080fd5b506107ae60048036038101906107a99190613cec565b6113b7565b005b3480156107bc57600080fd5b506107c56113cd565b6040516107d29190613d45565b60405180910390f35b3480156107e757600080fd5b506107f06113d3565b6040516107fd91906136a3565b60405180910390f35b34801561081257600080fd5b5061082d60048036038101906108289190613bc0565b6113e6565b005b34801561083b57600080fd5b5061085660048036038101906108519190613e01565b611401565b005b34801561086457600080fd5b5061087f600480360381019061087a9190613eb0565b61141e565b005b34801561088d57600080fd5b506108a860048036038101906108a39190613bc0565b611430565b005b3480156108b657600080fd5b506108d160048036038101906108cc9190613888565b61144b565b6040516108de9190613830565b60405180910390f35b3480156108f357600080fd5b5061090e60048036038101906109099190613888565b6114b4565b005b34801561091c57600080fd5b5061093760048036038101906109329190613f17565b6114c6565b005b34801561094557600080fd5b50610960600480360381019061095b9190613c95565b611527565b005b34801561096e57600080fd5b5061097761154d565b604051610984919061392e565b60405180910390f35b6109a760048036038101906109a29190613fa4565b611553565b005b3480156109b557600080fd5b506109d060048036038101906109cb91906139a2565b611770565b005b3480156109de57600080fd5b506109f960048036038101906109f49190613888565b6117bc565b005b348015610a0757600080fd5b50610a226004803603810190610a1d9190614004565b6117ce565b604051610a2f91906136a3565b60405180910390f35b348015610a4457600080fd5b50610a5f6004803603810190610a5a91906139a2565b611862565b005b6000610a6c826118e8565b9050919050565b610a7b6118fa565b610a858282611981565b5050565b6060600f8054610a9890614073565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac490614073565b8015610b115780601f10610ae657610100808354040283529160200191610b11565b820191906000526020600020905b815481529060010190602001808311610af457829003601f168201915b5050505050905090565b6000610b2682611b22565b50610b3082611baa565b9050919050565b610b498282610b44611be7565b611bef565b5050565b60155481565b6000600a80549050905090565b610b686118fa565b80601860006101000a81548160ff02191690831515021790555050565b60126020528060005260406000206000915090505481565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610c0f5760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610c0691906138c4565b60405180910390fd5b6000610c238383610c1e611be7565b611c01565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610c99578382826040517f64283d7b000000000000000000000000000000000000000000000000000000008152600401610c90939291906140a4565b60405180910390fd5b50505050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806000600160008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610e5a5760006040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610e64611c17565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610e90919061410a565b610e9a919061417b565b90508160000151819350935050509250929050565b610eb76118fa565b80601860016101000a81548160ff02191690831515021790555050565b6000610edf836111eb565b8210610f245782826040517fa57d13dc000000000000000000000000000000000000000000000000000000008152600401610f1b929190613a62565b60405180910390fd5b600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f9883838360405180602001604052806000815250611401565b505050565b6000610fa7610b53565b8210610fed576000826040517fa57d13dc000000000000000000000000000000000000000000000000000000008152600401610fe4929190613a62565b60405180910390fd5b600a8281548110611001576110006141ac565b5b90600052602060002001549050919050565b60145481565b6110216118fa565b80601190816110309190614387565b5050565b61103c6118fa565b611047838383611c21565b505050565b600061105782611b22565b9050919050565b601860009054906101000a900460ff1681565b611079611dd9565b6110858160ff16611e1f565b601860019054906101000a900460ff166110d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110cb906144a5565b60405180910390fd5b601860029054906101000a900460ff1660ff168160ff16601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461113591906144c5565b1115611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116d90614545565b60405180910390fd5b60008160ff16601554611189919061410a565b905061119481611f08565b6111c0601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611f4e565b6111cd338360ff16611fe2565b506111d6612079565b50565b6111e16118fa565b8060138190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361125e5760006040517f89c62b6400000000000000000000000000000000000000000000000000000000815260040161125591906138c4565b60405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6112ad6118fa565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112df906145b1565b60405180910390fd5b601860029054906101000a900460ff1681565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606010805461133490614073565b80601f016020809104026020016040519081016040528092919081815260200182805461136090614073565b80156113ad5780601f10611382576101008083540402835291602001916113ad565b820191906000526020600020905b81548152906001019060200180831161139057829003601f168201915b5050505050905090565b6113c96113c2611be7565b8383612083565b5050565b60175481565b601860019054906101000a900460ff1681565b6113ee6118fa565b80601090816113fd9190614387565b5050565b61140c848484610b9d565b611418848484846121f2565b50505050565b6114266118fa565b8060178190555050565b6114386118fa565b80600f90816114479190614387565b5050565b606061145682611b22565b5060006114616123a9565b9050600081511161148157604051806020016040528060008152506114ac565b8061148b8461243b565b60405160200161149c92919061460d565b6040516020818303038152906040525b915050919050565b6114bc6118fa565b8060148190555050565b6114ce6118fa565b60fa8161ffff161115611516576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150d9061467d565b60405180910390fd5b611524338261ffff16611fe2565b50565b61152f6118fa565b80601860026101000a81548160ff021916908360ff16021790555050565b60135481565b61155b611dd9565b6115678160ff16611e1f565b601860009054906101000a900460ff166115b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ad906146e9565b60405180910390fd5b61162a838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050506017543360405160200161160f9190614751565b60405160208183030381529060405280519060200120612509565b611669576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611660906147b8565b60405180910390fd5b601860029054906101000a900460ff1660ff168160ff16601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546116ca91906144c5565b111561170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290614545565b60405180910390fd5b60008160ff1660145461171e919061410a565b905061172981611f08565b611755601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682611f4e565b611762338360ff16611fe2565b5061176b612079565b505050565b6117786118fa565b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6117c46118fa565b8060158190555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61186a6118fa565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036118dc5760006040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016118d391906138c4565b60405180910390fd5b6118e581612520565b50565b60006118f3826125e6565b9050919050565b611902611be7565b73ffffffffffffffffffffffffffffffffffffffff166119206112fb565b73ffffffffffffffffffffffffffffffffffffffff161461197f57611943611be7565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161197691906138c4565b60405180910390fd5b565b600061198b611c17565b6bffffffffffffffffffffffff16905080826bffffffffffffffffffffffff1611156119f05781816040517f6f483d090000000000000000000000000000000000000000000000000000000081526004016119e7929190614809565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611a625760006040517fb6d9900a000000000000000000000000000000000000000000000000000000008152600401611a5991906138c4565b60405180910390fd5b60405180604001604052808473ffffffffffffffffffffffffffffffffffffffff168152602001836bffffffffffffffffffffffff168152506000808201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b600080611b2e83612660565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ba157826040517f7e273289000000000000000000000000000000000000000000000000000000008152600401611b98919061392e565b60405180910390fd5b80915050919050565b60006006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b611bfc838383600161269d565b505050565b6000611c0e848484612862565b90509392505050565b6000612710905090565b6000611c2b611c17565b6bffffffffffffffffffffffff16905080826bffffffffffffffffffffffff161115611c92578382826040517fdfd1fc1b000000000000000000000000000000000000000000000000000000008152600401611c8993929190614832565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d06578360006040517f969f0852000000000000000000000000000000000000000000000000000000008152600401611cfd929190614869565b60405180910390fd5b60405180604001604052808473ffffffffffffffffffffffffffffffffffffffff168152602001836bffffffffffffffffffffffff168152506001600086815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555090505050505050565b6002600d5403611e15576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002600d81905550565b601354611e2a610b53565b1115611e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e62906148de565b60405180910390fd5b60008111611eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea59061494a565b60405180910390fd5b60135481611eba610b53565b611ec491906144c5565b1115611f05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efc906149b6565b60405180910390fd5b50565b80341015611f4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4290614a22565b60405180910390fd5b50565b60008111611f91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f8890614a8e565b60405180910390fd5b80471015611fd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcb90614afa565b60405180910390fd5b611fde828261297f565b5050565b60005b8181101561201e576000600e60008154611ffe90614b1a565b91905081905590506120108482612a6c565b508080600101915050611fe5565b5080601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461206e91906144c5565b925050819055505050565b6001600d81905550565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120f457816040517f5b08ba180000000000000000000000000000000000000000000000000000000081526004016120eb91906138c4565b60405180910390fd5b80600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121e591906136a3565b60405180910390a3505050565b60008373ffffffffffffffffffffffffffffffffffffffff163b11156123a3578273ffffffffffffffffffffffffffffffffffffffff1663150b7a02612236611be7565b8685856040518563ffffffff1660e01b81526004016122589493929190614bb7565b6020604051808303816000875af192505050801561229457506040513d601f19601f820116820180604052508101906122919190614c18565b60015b612318573d80600081146122c4576040519150601f19603f3d011682016040523d82523d6000602084013e6122c9565b606091505b50600081510361231057836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161230791906138c4565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146123a157836040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161239891906138c4565b60405180910390fd5b505b50505050565b6060601180546123b890614073565b80601f01602080910402602001604051908101604052809291908181526020018280546123e490614073565b80156124315780601f1061240657610100808354040283529160200191612431565b820191906000526020600020905b81548152906001019060200180831161241457829003601f168201915b5050505050905090565b60606000600161244a84612a8a565b01905060008167ffffffffffffffff81111561246957612468613a95565b5b6040519080825280601f01601f19166020018201604052801561249b5781602001600182028036833780820191505090505b509050600082602001820190505b6001156124fe578080600190039150507f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a85816124f2576124f161414c565b5b049450600085036124a9575b819350505050919050565b6000826125168584612bdd565b1490509392505050565b6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612659575061265882612c2d565b5b9050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806126d65750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561280a5760006126e684611b22565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561275157508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b8015612764575061276281846117ce565b155b156127a657826040517fa9fbf51f00000000000000000000000000000000000000000000000000000000815260040161279d91906138c4565b60405180910390fd5b811561280857838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836006600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b600080612870858585612d0f565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128b4576128af84612f29565b6128f3565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146128f2576128f18185612f72565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff160361293557612930846130d3565b612974565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146129735761297285856131a4565b5b5b809150509392505050565b804710156129c457306040517fcd7860590000000000000000000000000000000000000000000000000000000081526004016129bb91906138c4565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516129ea90614c76565b60006040518083038185875af1925050503d8060008114612a27576040519150601f19603f3d011682016040523d82523d6000602084013e612a2c565b606091505b5050905080612a67576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b612a8682826040518060200160405280600081525061322f565b5050565b600080600090507a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310612ae8577a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008381612ade57612add61414c565b5b0492506040810190505b6d04ee2d6d415b85acef81000000008310612b25576d04ee2d6d415b85acef81000000008381612b1b57612b1a61414c565b5b0492506020810190505b662386f26fc100008310612b5457662386f26fc100008381612b4a57612b4961414c565b5b0492506010810190505b6305f5e1008310612b7d576305f5e1008381612b7357612b7261414c565b5b0492506008810190505b6127108310612ba2576127108381612b9857612b9761414c565b5b0492506004810190505b60648310612bc55760648381612bbb57612bba61414c565b5b0492506002810190505b600a8310612bd4576001810190505b80915050919050565b60008082905060005b8451811015612c2257612c1382868381518110612c0657612c056141ac565b5b602002602001015161324b565b91508080600101915050612be6565b508091505092915050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612cf857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d085750612d0782613276565b5b9050919050565b600080612d1b84612660565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612d5d57612d5c8184866132f0565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612dee57612d9f60008560008061269d565b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614612e71576001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846004600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b600a80549050600b600083815260200190815260200160002081905550600a81908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000612f7d836111eb565b9050600060096000848152602001908152602001600020549050818114613062576000600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816009600083815260200190815260200160002081905550505b6009600084815260200190815260200160002060009055600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600a805490506130e79190614c8b565b90506000600b60008481526020019081526020016000205490506000600a8381548110613117576131166141ac565b5b9060005260206000200154905080600a8381548110613139576131386141ac565b5b906000526020600020018190555081600b600083815260200190815260200160002081905550600b600085815260200190815260200160002060009055600a80548061318857613187614cbf565b5b6001900381819060005260206000200160009055905550505050565b600060016131b1846111eb565b6131bb9190614c8b565b905081600860008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806009600084815260200190815260200160002081905550505050565b61323983836133b4565b61324660008484846121f2565b505050565b60008183106132635761325e82846134ad565b61326e565b61326d83836134ad565b5b905092915050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806132e957506132e8826134c4565b5b9050919050565b6132fb83838361352e565b6133af57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361337057806040517f7e273289000000000000000000000000000000000000000000000000000000008152600401613367919061392e565b60405180910390fd5b81816040517f177e802f0000000000000000000000000000000000000000000000000000000081526004016133a6929190613a62565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036134265760006040517f64a0ae9200000000000000000000000000000000000000000000000000000000815260040161341d91906138c4565b60405180910390fd5b600061343483836000611c01565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146134a85760006040517f73c6ac6e00000000000000000000000000000000000000000000000000000000815260040161349f91906138c4565b60405180910390fd5b505050565b600082600052816020526040600020905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156135e657508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806135a757506135a684846117ce565b5b806135e557508273ffffffffffffffffffffffffffffffffffffffff166135cd83611baa565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61363881613603565b811461364357600080fd5b50565b6000813590506136558161362f565b92915050565b600060208284031215613671576136706135f9565b5b600061367f84828501613646565b91505092915050565b60008115159050919050565b61369d81613688565b82525050565b60006020820190506136b86000830184613694565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006136e9826136be565b9050919050565b6136f9816136de565b811461370457600080fd5b50565b600081359050613716816136f0565b92915050565b60006bffffffffffffffffffffffff82169050919050565b61373d8161371c565b811461374857600080fd5b50565b60008135905061375a81613734565b92915050565b60008060408385031215613777576137766135f9565b5b600061378585828601613707565b92505060206137968582860161374b565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b60005b838110156137da5780820151818401526020810190506137bf565b60008484015250505050565b6000601f19601f8301169050919050565b6000613802826137a0565b61380c81856137ab565b935061381c8185602086016137bc565b613825816137e6565b840191505092915050565b6000602082019050818103600083015261384a81846137f7565b905092915050565b6000819050919050565b61386581613852565b811461387057600080fd5b50565b6000813590506138828161385c565b92915050565b60006020828403121561389e5761389d6135f9565b5b60006138ac84828501613873565b91505092915050565b6138be816136de565b82525050565b60006020820190506138d960008301846138b5565b92915050565b600080604083850312156138f6576138f56135f9565b5b600061390485828601613707565b925050602061391585828601613873565b9150509250929050565b61392881613852565b82525050565b6000602082019050613943600083018461391f565b92915050565b61395281613688565b811461395d57600080fd5b50565b60008135905061396f81613949565b92915050565b60006020828403121561398b5761398a6135f9565b5b600061399984828501613960565b91505092915050565b6000602082840312156139b8576139b76135f9565b5b60006139c684828501613707565b91505092915050565b6000806000606084860312156139e8576139e76135f9565b5b60006139f686828701613707565b9350506020613a0786828701613707565b9250506040613a1886828701613873565b9150509250925092565b60008060408385031215613a3957613a386135f9565b5b6000613a4785828601613873565b9250506020613a5885828601613873565b9150509250929050565b6000604082019050613a7760008301856138b5565b613a84602083018461391f565b9392505050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613acd826137e6565b810181811067ffffffffffffffff82111715613aec57613aeb613a95565b5b80604052505050565b6000613aff6135ef565b9050613b0b8282613ac4565b919050565b600067ffffffffffffffff821115613b2b57613b2a613a95565b5b613b34826137e6565b9050602081019050919050565b82818337600083830152505050565b6000613b63613b5e84613b10565b613af5565b905082815260208101848484011115613b7f57613b7e613a90565b5b613b8a848285613b41565b509392505050565b600082601f830112613ba757613ba6613a8b565b5b8135613bb7848260208601613b50565b91505092915050565b600060208284031215613bd657613bd56135f9565b5b600082013567ffffffffffffffff811115613bf457613bf36135fe565b5b613c0084828501613b92565b91505092915050565b600080600060608486031215613c2257613c216135f9565b5b6000613c3086828701613873565b9350506020613c4186828701613707565b9250506040613c528682870161374b565b9150509250925092565b600060ff82169050919050565b613c7281613c5c565b8114613c7d57600080fd5b50565b600081359050613c8f81613c69565b92915050565b600060208284031215613cab57613caa6135f9565b5b6000613cb984828501613c80565b91505092915050565b613ccb81613c5c565b82525050565b6000602082019050613ce66000830184613cc2565b92915050565b60008060408385031215613d0357613d026135f9565b5b6000613d1185828601613707565b9250506020613d2285828601613960565b9150509250929050565b6000819050919050565b613d3f81613d2c565b82525050565b6000602082019050613d5a6000830184613d36565b92915050565b600067ffffffffffffffff821115613d7b57613d7a613a95565b5b613d84826137e6565b9050602081019050919050565b6000613da4613d9f84613d60565b613af5565b905082815260208101848484011115613dc057613dbf613a90565b5b613dcb848285613b41565b509392505050565b600082601f830112613de857613de7613a8b565b5b8135613df8848260208601613d91565b91505092915050565b60008060008060808587031215613e1b57613e1a6135f9565b5b6000613e2987828801613707565b9450506020613e3a87828801613707565b9350506040613e4b87828801613873565b925050606085013567ffffffffffffffff811115613e6c57613e6b6135fe565b5b613e7887828801613dd3565b91505092959194509250565b613e8d81613d2c565b8114613e9857600080fd5b50565b600081359050613eaa81613e84565b92915050565b600060208284031215613ec657613ec56135f9565b5b6000613ed484828501613e9b565b91505092915050565b600061ffff82169050919050565b613ef481613edd565b8114613eff57600080fd5b50565b600081359050613f1181613eeb565b92915050565b600060208284031215613f2d57613f2c6135f9565b5b6000613f3b84828501613f02565b91505092915050565b600080fd5b600080fd5b60008083601f840112613f6457613f63613a8b565b5b8235905067ffffffffffffffff811115613f8157613f80613f44565b5b602083019150836020820283011115613f9d57613f9c613f49565b5b9250929050565b600080600060408486031215613fbd57613fbc6135f9565b5b600084013567ffffffffffffffff811115613fdb57613fda6135fe565b5b613fe786828701613f4e565b93509350506020613ffa86828701613c80565b9150509250925092565b6000806040838503121561401b5761401a6135f9565b5b600061402985828601613707565b925050602061403a85828601613707565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061408b57607f821691505b60208210810361409e5761409d614044565b5b50919050565b60006060820190506140b960008301866138b5565b6140c6602083018561391f565b6140d360408301846138b5565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061411582613852565b915061412083613852565b925082820261412e81613852565b91508282048414831517614145576141446140db565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061418682613852565b915061419183613852565b9250826141a1576141a061414c565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830261423d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614200565b6142478683614200565b95508019841693508086168417925050509392505050565b6000819050919050565b600061428461427f61427a84613852565b61425f565b613852565b9050919050565b6000819050919050565b61429e83614269565b6142b26142aa8261428b565b84845461420d565b825550505050565b600090565b6142c76142ba565b6142d2818484614295565b505050565b5b818110156142f6576142eb6000826142bf565b6001810190506142d8565b5050565b601f82111561433b5761430c816141db565b614315846141f0565b81016020851015614324578190505b614338614330856141f0565b8301826142d7565b50505b505050565b600082821c905092915050565b600061435e60001984600802614340565b1980831691505092915050565b6000614377838361434d565b9150826002028217905092915050565b614390826137a0565b67ffffffffffffffff8111156143a9576143a8613a95565b5b6143b38254614073565b6143be8282856142fa565b600060209050601f8311600181146143f157600084156143df578287015190505b6143e9858261436b565b865550614451565b601f1984166143ff866141db565b60005b8281101561442757848901518255600182019150602085019450602081019050614402565b868310156144445784890151614440601f89168261434d565b8355505b6001600288020188555050505b505050505050565b7f5055424c49435f4d494e545f494e414354495645000000000000000000000000600082015250565b600061448f6014836137ab565b915061449a82614459565b602082019050919050565b600060208201905081810360008301526144be81614482565b9050919050565b60006144d082613852565b91506144db83613852565b92508282019050808211156144f3576144f26140db565b5b92915050565b7f524541434845445f4d494e545f43415000000000000000000000000000000000600082015250565b600061452f6010836137ab565b915061453a826144f9565b602082019050919050565b6000602082019050818103600083015261455e81614522565b9050919050565b7f46554e4354494f4e5f44495341424c4544000000000000000000000000000000600082015250565b600061459b6011836137ab565b91506145a682614565565b602082019050919050565b600060208201905081810360008301526145ca8161458e565b9050919050565b600081905092915050565b60006145e7826137a0565b6145f181856145d1565b93506146018185602086016137bc565b80840191505092915050565b600061461982856145dc565b915061462582846145dc565b91508190509392505050565b7f455843454544535f4d494e545f4341505f323530000000000000000000000000600082015250565b60006146676014836137ab565b915061467282614631565b602082019050919050565b600060208201905081810360008301526146968161465a565b9050919050565b7f57484954454c4953545f4d494e545f494e414354495645000000000000000000600082015250565b60006146d36017836137ab565b91506146de8261469d565b602082019050919050565b60006020820190508181036000830152614702816146c6565b9050919050565b60008160601b9050919050565b600061472182614709565b9050919050565b600061473382614716565b9050919050565b61474b614746826136de565b614728565b82525050565b600061475d828461473a565b60148201915081905092915050565b7f494e56414c49445f4d45524b4c455f50524f4f46000000000000000000000000600082015250565b60006147a26014836137ab565b91506147ad8261476c565b602082019050919050565b600060208201905081810360008301526147d181614795565b9050919050565b60006147f36147ee6147e98461371c565b61425f565b613852565b9050919050565b614803816147d8565b82525050565b600060408201905061481e60008301856147fa565b61482b602083018461391f565b9392505050565b6000606082019050614847600083018661391f565b61485460208301856147fa565b614861604083018461391f565b949350505050565b600060408201905061487e600083018561391f565b61488b60208301846138b5565b9392505050565b7f524541434845445f4d41585f535550504c590000000000000000000000000000600082015250565b60006148c86012836137ab565b91506148d382614892565b602082019050919050565b600060208201905081810360008301526148f7816148bb565b9050919050565b7f5155414e544954595f4c4553535f5448414e5f4f4e4500000000000000000000600082015250565b60006149346016836137ab565b915061493f826148fe565b602082019050919050565b6000602082019050818103600083015261496381614927565b9050919050565b7f5155414e544954595f45584345454445445f4d41585f535550504c5900000000600082015250565b60006149a0601c836137ab565b91506149ab8261496a565b602082019050919050565b600060208201905081810360008301526149cf81614993565b9050919050565b7f494e53554646494349454e545f4554485f524543454956454400000000000000600082015250565b6000614a0c6019836137ab565b9150614a17826149d6565b602082019050919050565b60006020820190508181036000830152614a3b816149ff565b9050919050565b7f494e56414c49445f414d4f554e54000000000000000000000000000000000000600082015250565b6000614a78600e836137ab565b9150614a8382614a42565b602082019050919050565b60006020820190508181036000830152614aa781614a6b565b9050919050565b7f494e53554646494349454e545f4554485f42414c414e43450000000000000000600082015250565b6000614ae46018836137ab565b9150614aef82614aae565b602082019050919050565b60006020820190508181036000830152614b1381614ad7565b9050919050565b6000614b2582613852565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614b5757614b566140db565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b6000614b8982614b62565b614b938185614b6d565b9350614ba38185602086016137bc565b614bac816137e6565b840191505092915050565b6000608082019050614bcc60008301876138b5565b614bd960208301866138b5565b614be6604083018561391f565b8181036060830152614bf88184614b7e565b905095945050505050565b600081519050614c128161362f565b92915050565b600060208284031215614c2e57614c2d6135f9565b5b6000614c3c84828501614c03565b91505092915050565b600081905092915050565b50565b6000614c60600083614c45565b9150614c6b82614c50565b600082019050919050565b6000614c8182614c53565b9150819050919050565b6000614c9682613852565b9150614ca183613852565b9250828203905081811115614cb957614cb86140db565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212203083592437a373b6a325b63b96d6a2807f48f29cefea0113e09ac4d673d4cf5864736f6c634300081600330000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000016000000000000000000000000000000000000000000000000000000000000001a0000000000000000000000000480212e90ffc19a2896046750c40826f58ee5b20000000000000000000000000000000000000000000000000008700cc7577000000000000000000000000000000000000000000000000000000aa87bee53800000000000000000000000000000000000000000000000000000000000000000f30000000000000000000000000a2a435d8b13bb4ae530743daad6c930bcacfd3cf00000000000000000000000000000000000000000000000000000000000001f40000000000000000000000000000000000000000000000000000000000000016416e696d616c69612054756e64726120546974616e73000000000000000000000000000000000000000000000000000000000000000000000000000000000008414e494d2054554e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000043697066733a2f2f6261667962656966707463327a687070616f746d61766a733676676178366165686c697772656c653669626f69777969746b3463666833376c65692f0000000000000000000000000000000000000000000000000000000000