[ { "inputs": [ { "internalType": "address", "name": "_treasury", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "AccessControlBadConfirmation", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "bytes32", "name": "neededRole", "type": "bytes32" } ], "name": "AccessControlUnauthorizedAccount", "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": "EnforcedPause", "type": "error" }, { "inputs": [], "name": "ExpectedPause", "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": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "previousAdminRole", "type": "bytes32" }, { "indexed": true, "internalType": "bytes32", "name": "newAdminRole", "type": "bytes32" } ], "name": "RoleAdminChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleGranted", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": true, "internalType": "address", "name": "sender", "type": "address" } ], "name": "RoleRevoked", "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": false, "internalType": "address", "name": "account", "type": "address" } ], "name": "Unpaused", "type": "event" }, { "inputs": [], "name": "CONTROLLER_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEFAULT_ADMIN_ROLE", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_TOKENS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PAID_TOKENS", "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": [], "name": "barn", "outputs": [ { "internalType": "contract IBarn", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "coqMinted", "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": [], "name": "getPaidTokens", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" } ], "name": "getRoleAdmin", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "getTokenTraits", "outputs": [ { "components": [ { "internalType": "bool", "name": "isRevealed", "type": "bool" }, { "internalType": "bool", "name": "isCoq", "type": "bool" }, { "internalType": "uint8", "name": "background", "type": "uint8" }, { "internalType": "uint8", "name": "accessory", "type": "uint8" }, { "internalType": "uint8", "name": "body", "type": "uint8" }, { "internalType": "uint8", "name": "weapon", "type": "uint8" }, { "internalType": "uint8", "name": "head", "type": "uint8" }, { "internalType": "uint8", "name": "alphaIndex", "type": "uint8" } ], "internalType": "struct ICoqVsHunter.AvtHtr", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "user", "type": "address" } ], "name": "getTokensOf", "outputs": [ { "internalType": "uint256[]", "name": "tokenIds", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "grantRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "hasRole", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "hunterMinted", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint16", "name": "amount", "type": "uint16" } ], "name": "mint", "outputs": [ { "internalType": "uint16[]", "name": "tokenIds", "type": "uint16[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "amount", "type": "uint16" } ], "name": "mintAndBurn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "minted", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "ownerOf", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pause", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "paused", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "callerConfirmation", "type": "address" } ], "name": "renounceRole", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16[]", "name": "tokenIds", "type": "uint16[]" }, { "internalType": "uint256", "name": "seed", "type": "uint256" } ], "name": "reveal", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes32", "name": "role", "type": "bytes32" }, { "internalType": "address", "name": "account", "type": "address" } ], "name": "revokeRole", "outputs": [], "stateMutability": "nonpayable", "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": "contract IBarn", "name": "_barn", "type": "address" } ], "name": "setBarn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "contract ITraits", "name": "_traits", "type": "address" } ], "name": "setTraits", "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": [], "name": "traits", "outputs": [ { "internalType": "contract ITraits", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "tokenId", "type": "uint256" } ], "name": "transferFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "treasury", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unknownMinted", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60806040523480156200001157600080fd5b5060405162005476380380620054768339818101604052810190620000379190620004bf565b6040518060400160405280600b81526020017f436f71567348756e7465720000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4347414d450000000000000000000000000000000000000000000000000000008152508160009081620000b491906200076b565b508060019081620000c691906200076b565b5050506000600a60006101000a81548160ff021916908315150217905550620001086000801b620000fc6200012460201b60201c565b6200012c60201b60201c565b506200011d816103206200023060201b60201c565b506200090f565b600033905090565b6000620001408383620003e060201b60201c565b62000225576001600d600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620001c16200012460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600190506200022a565b600090505b92915050565b6000620002426200044b60201b60201c565b6bffffffffffffffffffffffff16905080826bffffffffffffffffffffffff161115620002aa5781816040517f6f483d09000000000000000000000000000000000000000000000000000000008152600401620002a1929190620008b4565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200031f5760006040517fb6d9900a000000000000000000000000000000000000000000000000000000008152600401620003169190620008f2565b60405180910390fd5b60405180604001604052808473ffffffffffffffffffffffffffffffffffffffff168152602001836bffffffffffffffffffffffff16815250600b60008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550905050505050565b6000600d600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000612710905090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000487826200045a565b9050919050565b62000499816200047a565b8114620004a557600080fd5b50565b600081519050620004b9816200048e565b92915050565b600060208284031215620004d857620004d762000455565b5b6000620004e884828501620004a8565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200057357607f821691505b6020821081036200058957620005886200052b565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620005f37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620005b4565b620005ff8683620005b4565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200064c62000646620006408462000617565b62000621565b62000617565b9050919050565b6000819050919050565b62000668836200062b565b62000680620006778262000653565b848454620005c1565b825550505050565b600090565b6200069762000688565b620006a48184846200065d565b505050565b5b81811015620006cc57620006c06000826200068d565b600181019050620006aa565b5050565b601f8211156200071b57620006e5816200058f565b620006f084620005a4565b8101602085101562000700578190505b620007186200070f85620005a4565b830182620006a9565b50505b505050565b600082821c905092915050565b6000620007406000198460080262000720565b1980831691505092915050565b60006200075b83836200072d565b9150826002028217905092915050565b6200077682620004f1565b67ffffffffffffffff811115620007925762000791620004fc565b5b6200079e82546200055a565b620007ab828285620006d0565b600060209050601f831160018114620007e35760008415620007ce578287015190505b620007da85826200074d565b8655506200084a565b601f198416620007f3866200058f565b60005b828110156200081d57848901518255600182019150602085019450602081019050620007f6565b868310156200083d578489015162000839601f8916826200072d565b8355505b6001600288020188555050505b505050505050565b60006bffffffffffffffffffffffff82169050919050565b60006200088b620008856200087f8462000852565b62000621565b62000617565b9050919050565b6200089d816200086a565b82525050565b620008ae8162000617565b82525050565b6000604082019050620008cb600083018562000892565b620008da6020830184620008a3565b9392505050565b620008ec816200047a565b82525050565b6000602082019050620009096000830184620008e1565b92915050565b614b57806200091f6000396000f3fe608060405234801561001057600080fd5b50600436106102745760003560e01c806361d027b311610151578063a22cb465116100c3578063d547741f11610087578063d547741f1461079a578063e1fc334f146107b6578063e985e9c5146107d4578063efef8eb314610804578063f47aae0d14610822578063f47c84c51461084057610274565b8063a22cb465146106e4578063ad0be4bd14610700578063b88d4fde14610730578063c084f5401461074c578063c87b56dd1461076a57610274565b80638456cb59116101155780638456cb59146106205780638bd96cc71461062a57806391d148541461064857806394e568471461067857806395d89b41146106a8578063a217fddf146106c657610274565b806361d027b31461056a5780636352211e146105885780636f4f7366146105b857806370a08231146105d45780637440ad931461060457610274565b80632a55205a116101ea5780633f4ba83a116101ae5780633f4ba83a146104ba5780634018b1f8146104c457806342842e0e146104e25780634f02c420146104fe5780634f6ccce71461051c5780635c975abb1461054c57610274565b80632a55205a146104055780632f2ff15d146104365780632f745c591461045257806336568abe146104825780633b342a851461049e57610274565b80630986b2101161023c5780630986b2101461033157806311296ef11461036157806318160ddd1461037d578063194f480e1461039b57806323b872dd146103b9578063248a9ca3146103d557610274565b806301ffc9a71461027957806306fdde03146102a9578063081812fc146102c7578063092c5b3b146102f7578063095ea7b314610315575b600080fd5b610293600480360381019061028e91906136ac565b61085e565b6040516102a091906136f4565b60405180910390f35b6102b1610870565b6040516102be919061379f565b60405180910390f35b6102e160048036038101906102dc91906137f7565b610902565b6040516102ee9190613865565b60405180910390f35b6102ff61091e565b60405161030c9190613899565b60405180910390f35b61032f600480360381019061032a91906138e0565b610942565b005b61034b60048036038101906103469190613920565b610958565b6040516103589190613a0b565b60405180910390f35b61037b60048036038101906103769190613baf565b610a00565b005b610385610aac565b6040516103929190613c1a565b60405180910390f35b6103a3610ab9565b6040516103b09190613c94565b60405180910390f35b6103d360048036038101906103ce9190613caf565b610adf565b005b6103ef60048036038101906103ea9190613d2e565b610be1565b6040516103fc9190613899565b60405180910390f35b61041f600480360381019061041a9190613d5b565b610c01565b60405161042d929190613d9b565b60405180910390f35b610450600480360381019061044b9190613dc4565b610deb565b005b61046c600480360381019061046791906138e0565b610e0d565b6040516104799190613c1a565b60405180910390f35b61049c60048036038101906104979190613dc4565b610eb6565b005b6104b860048036038101906104b39190613e42565b610f31565b005b6104c2610f81565b005b6104cc610f97565b6040516104d99190613c1a565b60405180910390f35b6104fc60048036038101906104f79190613caf565b610fa1565b005b610506610fc1565b6040516105139190613e7e565b60405180910390f35b610536600480360381019061053191906137f7565b610fd5565b6040516105439190613c1a565b60405180910390f35b61055461104b565b60405161056191906136f4565b60405180910390f35b610572611062565b60405161057f9190613865565b60405180910390f35b6105a2600480360381019061059d91906137f7565b611088565b6040516105af9190613865565b60405180910390f35b6105d260048036038101906105cd9190613ed7565b61109a565b005b6105ee60048036038101906105e99190613920565b6110ea565b6040516105fb9190613c1a565b60405180910390f35b61061e60048036038101906106199190613f04565b6111a4565b005b610628611250565b005b610632611266565b60405161063f9190613c1a565b60405180910390f35b610662600480360381019061065d9190613dc4565b61126c565b60405161066f91906136f4565b60405180910390f35b610692600480360381019061068d91906137f7565b6112d7565b60405161069f9190613ffe565b60405180910390f35b6106b06113f3565b6040516106bd919061379f565b60405180910390f35b6106ce611485565b6040516106db9190613899565b60405180910390f35b6106fe60048036038101906106f99190614046565b61148c565b005b61071a60048036038101906107159190614086565b6114a2565b6040516107279190614184565b60405180910390f35b61074a6004803603810190610745919061425b565b6115e1565b005b6107546115fe565b6040516107619190613c1a565b60405180910390f35b610784600480360381019061077f91906137f7565b611604565b604051610791919061379f565b60405180910390f35b6107b460048036038101906107af9190613dc4565b6116b8565b005b6107be6116da565b6040516107cb91906142ff565b60405180910390f35b6107ee60048036038101906107e9919061431a565b611700565b6040516107fb91906136f4565b60405180910390f35b61080c611794565b6040516108199190613c1a565b60405180910390f35b61082a61179a565b6040516108379190613c1a565b60405180910390f35b6108486117a0565b6040516108559190613c1a565b60405180910390f35b6000610869826117a6565b9050919050565b60606000805461087f90614389565b80601f01602080910402602001604051908101604052809291908181526020018280546108ab90614389565b80156108f85780601f106108cd576101008083540402835291602001916108f8565b820191906000526020600020905b8154815290600101906020018083116108db57829003601f168201915b5050505050905090565b600061090d82611820565b50610917826118a8565b9050919050565b7f7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c57022335781565b610954828261094f6118e5565b6118ed565b5050565b60606000610965836110ea565b90508067ffffffffffffffff81111561098157610980613a32565b5b6040519080825280602002602001820160405280156109af5781602001602082028036833780820191505090505b50915060005b818110156109f9576109c78482610e0d565b8382815181106109da576109d96143ba565b5b60200260200101818152505080806109f190614418565b9150506109b5565b5050919050565b610a297f7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c5702233576118ff565b60005b8251811015610aa7576000838281518110610a4a57610a496143ba565b5b602002602001015161ffff16905060008382604051602001610a6d929190614460565b6040516020818303038152906040528051906020012060001c9050610a928282611913565b50508080610a9f90614418565b915050610a2c565b505050565b6000600880549050905090565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610b515760006040517f64a0ae92000000000000000000000000000000000000000000000000000000008152600401610b489190613865565b60405180910390fd5b6000610b658383610b606118e5565b611a4a565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610bdb578382826040517f64283d7b000000000000000000000000000000000000000000000000000000008152600401610bd293929190614489565b60405180910390fd5b50505050565b6000600d6000838152602001908152602001600020600101549050919050565b6000806000600c60008681526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1603610d9657600b6040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff166bffffffffffffffffffffffff168152505090505b6000610da0611bcb565b6bffffffffffffffffffffffff1682602001516bffffffffffffffffffffffff1686610dcc91906144c0565b610dd69190614531565b90508160000151819350935050509250929050565b610df482610be1565b610dfd816118ff565b610e078383611bd5565b50505050565b6000610e18836110ea565b8210610e5d5782826040517fa57d13dc000000000000000000000000000000000000000000000000000000008152600401610e54929190613d9b565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ebe6118e5565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610f22576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f2c8282611cc7565b505050565b610f3d6000801b6118ff565b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610f8d6000801b6118ff565b610f95611dba565b565b6000612710905090565b610fbc838383604051806020016040528060008152506115e1565b505050565b600e60009054906101000a900461ffff1681565b6000610fdf610aac565b8210611025576000826040517fa57d13dc00000000000000000000000000000000000000000000000000000000815260040161101c929190613d9b565b60405180910390fd5b60088281548110611039576110386143ba565b5b90600052602060002001549050919050565b6000600a60009054906101000a900460ff16905090565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600061109382611820565b9050919050565b6110a66000801b6118ff565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361115d5760006040517f89c62b640000000000000000000000000000000000000000000000000000000081526004016111549190613865565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6111b06000801b6118ff565b61271081600e60009054906101000a900461ffff166111cf9190614562565b61ffff161115611214576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120b906145e4565b60405180910390fd5b80600e60008282829054906101000a900461ffff166112339190614562565b92506101000a81548161ffff021916908361ffff16021790555050565b61125c6000801b6118ff565b611264611e1d565b565b60115481565b6000600d600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6112df6135e5565b6112e882611820565b5060156000838152602001908152602001600020604051806101000160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff161515151581526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900460ff1660ff1660ff1681526020016000820160059054906101000a900460ff1660ff1660ff1681526020016000820160069054906101000a900460ff1660ff1660ff1681526020016000820160079054906101000a900460ff1660ff1660ff16815250509050919050565b60606001805461140290614389565b80601f016020809104026020016040519081016040528092919081815260200182805461142e90614389565b801561147b5780601f106114505761010080835404028352916020019161147b565b820191906000526020600020905b81548152906001019060200180831161145e57829003601f168201915b5050505050905090565b6000801b81565b61149e6114976118e5565b8383611e80565b5050565b60606114cd7f7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c5702233576118ff565b61c35082600e60009054906101000a900461ffff166114ec9190614562565b61ffff161115611531576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152890614650565b60405180910390fd5b8161ffff1667ffffffffffffffff81111561154f5761154e613a32565b5b60405190808252806020026020018201604052801561157d5781602001602082028036833780820191505090505b50905060005b8261ffff168160ff1610156115da5761159b84611fef565b828260ff16815181106115b1576115b06143ba565b5b602002602001019061ffff16908161ffff168152505080806115d290614670565b915050611583565b5092915050565b6115ec848484610adf565b6115f884848484612053565b50505050565b61271081565b606061160f82611820565b50601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c87b56dd836040518263ffffffff1660e01b815260040161166b9190613c1a565b600060405180830381865afa158015611688573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906116b1919061473a565b9050919050565b6116c182610be1565b6116ca816118ff565b6116d48383611cc7565b50505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f5481565b60105481565b61c35081565b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061181957506118188261220a565b5b9050919050565b60008061182c83612284565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361189f57826040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016118969190613c1a565b60405180910390fd5b80915050919050565b60006004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600033905090565b6118fa83838360016122c1565b505050565b6119108161190b6118e5565b612486565b50565b61191c82611820565b506015600083815260200190815260200160002060000160009054906101000a900460ff1615611981576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611978906147cf565b60405180910390fd5b600061198d83836124d7565b602001519050601160008154809291906119a6906147ef565b919050555080156119ce57600f60008154809291906119c490614418565b91905055506119e7565b601060008154809291906119e190614418565b91905055505b60006119f284611088565b90506000611a0082856126fb565b90508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611a4357611a4181866000611a4a565b505b5050505050565b600080611a5684612284565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480611ab357506015600085815260200190815260200160002060000160009054906101000a900460ff165b611af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae990614864565b60405180910390fd5b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148015611b9c5750601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b15611bb557611bad8585600061282c565b915050611bc4565b611bc085858561282c565b9150505b9392505050565b6000612710905090565b6000611be1838361126c565b611cbc576001600d600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611c596118e5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a460019050611cc1565b600090505b92915050565b6000611cd3838361126c565b15611daf576000600d600085815260200190815260200160002060000160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550611d4c6118e5565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a460019050611db4565b600090505b92915050565b611dc261284a565b6000600a60006101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611e066118e5565b604051611e139190613865565b60405180910390a1565b611e2561288a565b6001600a60006101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611e696118e5565b604051611e769190613865565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ef157816040517f5b08ba18000000000000000000000000000000000000000000000000000000008152600401611ee89190613865565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fe291906136f4565b60405180910390a3505050565b6000600e600081819054906101000a900461ffff1661200d90614884565b91906101000a81548161ffff021916908361ffff16021790559050612036828261ffff166128cb565b6011600081548092919061204990614418565b9190505550919050565b60008373ffffffffffffffffffffffffffffffffffffffff163b1115612204578273ffffffffffffffffffffffffffffffffffffffff1663150b7a026120976118e5565b8685856040518563ffffffff1660e01b81526004016120b99493929190614903565b6020604051808303816000875af19250505080156120f557506040513d601f19601f820116820180604052508101906120f29190614964565b60015b612179573d8060008114612125576040519150601f19603f3d011682016040523d82523d6000602084013e61212a565b606091505b50600081510361217157836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016121689190613865565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461220257836040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016121f99190613865565b60405180910390fd5b505b50505050565b60007f2a55205a000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061227d575061227c826128e9565b5b9050919050565b60006002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b80806122fa5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561242e57600061230a84611820565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561237557508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561238857506123868184611700565b155b156123ca57826040517fa9fbf51f0000000000000000000000000000000000000000000000000000000081526004016123c19190613865565b60405180910390fd5b811561242c57838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b836004600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b612490828261126c565b6124d35780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016124ca929190614991565b60405180910390fd5b5050565b6124df6135e5565b6124e882612963565b6015600085815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548160ff02191690831515021790555060408201518160000160026101000a81548160ff021916908360ff16021790555060608201518160000160036101000a81548160ff021916908360ff16021790555060808201518160000160046101000a81548160ff021916908360ff16021790555060a08201518160000160056101000a81548160ff021916908360ff16021790555060c08201518160000160066101000a81548160ff021916908360ff16021790555060e08201518160000160076101000a81548160ff021916908360ff1602179055509050604051806101000160405290816000820160009054906101000a900460ff161515151581526020016000820160019054906101000a900460ff161515151581526020016000820160029054906101000a900460ff1660ff1660ff1681526020016000820160039054906101000a900460ff1660ff1660ff1681526020016000820160049054906101000a900460ff1660ff1660ff1681526020016000820160059054906101000a900460ff1660ff1660ff1681526020016000820160069054906101000a900460ff1660ff1660ff1681526020016000820160079054906101000a900460ff1660ff1660ff1681525050905092915050565b6000612710600e60009054906101000a900461ffff1661ffff1611158061273357506000600a60f584901c61273091906149ba565b14155b1561274057829050612826565b6000601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631aace9b7609085901c6040518263ffffffff1660e01b81526004016127a19190613c1a565b602060405180830381865afa1580156127be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e29190614a00565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036128215783915050612826565b809150505b92915050565b600061283661288a565b612841848484612b1a565b90509392505050565b61285261104b565b612888576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b61289261104b565b156128c9576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6128e5828260405180602001604052806000815250612c37565b5050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061295c575061295b82612c53565b5b9050919050565b61296b6135e5565b600082905060018260000190151590811515815250506000600a61ffff831661299491906149ba565b1415826020019015159081151581525050816020015115612a7757601081901c90506129c561ffff82166000612d35565b826040019060ff16908160ff1681525050601081901c90506129ec61ffff82166001612d35565b826060019060ff16908160ff1681525050601081901c9050612a1361ffff82166002612d35565b826080019060ff16908160ff1681525050601081901c9050612a3a61ffff82166003612d35565b8260a0019060ff16908160ff1681525050601081901c9050612a6161ffff82166004612d35565b8260c0019060ff16908160ff1681525050612b14565b601081901c9050612a8d61ffff82166005612d35565b826040019060ff16908160ff1681525050601081901c9050612ab461ffff82166006612d35565b826060019060ff16908160ff1681525050601081901c9050612adb61ffff82166007612d35565b826080019060ff16908160ff1681525050601081901c9050612b0261ffff82166008612d35565b8260e0019060ff16908160ff16815250505b50919050565b600080612b28858585612ddd565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612b6c57612b6784612ff7565b612bab565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612baa57612ba98185613040565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612bed57612be8846131a1565b612c2c565b8473ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612c2b57612c2a8585613272565b5b5b809150509392505050565b612c4183836132fd565b612c4e6000848484612053565b505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612d1e57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612d2e5750612d2d826133f6565b5b9050919050565b6000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a6b0969284846040518363ffffffff1660e01b8152600401612d94929190614a3c565b602060405180830381865afa158015612db1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd59190614a91565b905092915050565b600080612de984612284565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612e2b57612e2a818486613460565b5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612ebc57612e6d6000856000806122c1565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055505b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614612f3f576001600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055505b846002600086815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550838573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4809150509392505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600061304b836110ea565b9050600060076000848152602001908152602001600020549050818114613130576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506131b59190614abe565b90506000600960008481526020019081526020016000205490506000600883815481106131e5576131e46143ba565b5b906000526020600020015490508060088381548110613207576132066143ba565b5b90600052602060002001819055508160096000838152602001908152602001600020819055506009600085815260200190815260200160002060009055600880548061325657613255614af2565b5b6001900381819060005260206000200160009055905550505050565b6000600161327f846110ea565b6132899190614abe565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361336f5760006040517f64a0ae920000000000000000000000000000000000000000000000000000000081526004016133669190613865565b60405180910390fd5b600061337d83836000611a4a565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146133f15760006040517f73c6ac6e0000000000000000000000000000000000000000000000000000000081526004016133e89190613865565b60405180910390fd5b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61346b838383613524565b61351f57600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036134e057806040517f7e2732890000000000000000000000000000000000000000000000000000000081526004016134d79190613c1a565b60405180910390fd5b81816040517f177e802f000000000000000000000000000000000000000000000000000000008152600401613516929190613d9b565b60405180910390fd5b505050565b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156135dc57508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061359d575061359c8484611700565b5b806135db57508273ffffffffffffffffffffffffffffffffffffffff166135c3836118a8565b73ffffffffffffffffffffffffffffffffffffffff16145b5b90509392505050565b604051806101000160405280600015158152602001600015158152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff168152602001600060ff1681525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61368981613654565b811461369457600080fd5b50565b6000813590506136a681613680565b92915050565b6000602082840312156136c2576136c161364a565b5b60006136d084828501613697565b91505092915050565b60008115159050919050565b6136ee816136d9565b82525050565b600060208201905061370960008301846136e5565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561374957808201518184015260208101905061372e565b60008484015250505050565b6000601f19601f8301169050919050565b60006137718261370f565b61377b818561371a565b935061378b81856020860161372b565b61379481613755565b840191505092915050565b600060208201905081810360008301526137b98184613766565b905092915050565b6000819050919050565b6137d4816137c1565b81146137df57600080fd5b50565b6000813590506137f1816137cb565b92915050565b60006020828403121561380d5761380c61364a565b5b600061381b848285016137e2565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061384f82613824565b9050919050565b61385f81613844565b82525050565b600060208201905061387a6000830184613856565b92915050565b6000819050919050565b61389381613880565b82525050565b60006020820190506138ae600083018461388a565b92915050565b6138bd81613844565b81146138c857600080fd5b50565b6000813590506138da816138b4565b92915050565b600080604083850312156138f7576138f661364a565b5b6000613905858286016138cb565b9250506020613916858286016137e2565b9150509250929050565b6000602082840312156139365761393561364a565b5b6000613944848285016138cb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b613982816137c1565b82525050565b60006139948383613979565b60208301905092915050565b6000602082019050919050565b60006139b88261394d565b6139c28185613958565b93506139cd83613969565b8060005b838110156139fe5781516139e58882613988565b97506139f0836139a0565b9250506001810190506139d1565b5085935050505092915050565b60006020820190508181036000830152613a2581846139ad565b905092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613a6a82613755565b810181811067ffffffffffffffff82111715613a8957613a88613a32565b5b80604052505050565b6000613a9c613640565b9050613aa88282613a61565b919050565b600067ffffffffffffffff821115613ac857613ac7613a32565b5b602082029050602081019050919050565b600080fd5b600061ffff82169050919050565b613af581613ade565b8114613b0057600080fd5b50565b600081359050613b1281613aec565b92915050565b6000613b2b613b2684613aad565b613a92565b90508083825260208201905060208402830185811115613b4e57613b4d613ad9565b5b835b81811015613b775780613b638882613b03565b845260208401935050602081019050613b50565b5050509392505050565b600082601f830112613b9657613b95613a2d565b5b8135613ba6848260208601613b18565b91505092915050565b60008060408385031215613bc657613bc561364a565b5b600083013567ffffffffffffffff811115613be457613be361364f565b5b613bf085828601613b81565b9250506020613c01858286016137e2565b9150509250929050565b613c14816137c1565b82525050565b6000602082019050613c2f6000830184613c0b565b92915050565b6000819050919050565b6000613c5a613c55613c5084613824565b613c35565b613824565b9050919050565b6000613c6c82613c3f565b9050919050565b6000613c7e82613c61565b9050919050565b613c8e81613c73565b82525050565b6000602082019050613ca96000830184613c85565b92915050565b600080600060608486031215613cc857613cc761364a565b5b6000613cd6868287016138cb565b9350506020613ce7868287016138cb565b9250506040613cf8868287016137e2565b9150509250925092565b613d0b81613880565b8114613d1657600080fd5b50565b600081359050613d2881613d02565b92915050565b600060208284031215613d4457613d4361364a565b5b6000613d5284828501613d19565b91505092915050565b60008060408385031215613d7257613d7161364a565b5b6000613d80858286016137e2565b9250506020613d91858286016137e2565b9150509250929050565b6000604082019050613db06000830185613856565b613dbd6020830184613c0b565b9392505050565b60008060408385031215613ddb57613dda61364a565b5b6000613de985828601613d19565b9250506020613dfa858286016138cb565b9150509250929050565b6000613e0f82613844565b9050919050565b613e1f81613e04565b8114613e2a57600080fd5b50565b600081359050613e3c81613e16565b92915050565b600060208284031215613e5857613e5761364a565b5b6000613e6684828501613e2d565b91505092915050565b613e7881613ade565b82525050565b6000602082019050613e936000830184613e6f565b92915050565b6000613ea482613844565b9050919050565b613eb481613e99565b8114613ebf57600080fd5b50565b600081359050613ed181613eab565b92915050565b600060208284031215613eed57613eec61364a565b5b6000613efb84828501613ec2565b91505092915050565b600060208284031215613f1a57613f1961364a565b5b6000613f2884828501613b03565b91505092915050565b613f3a816136d9565b82525050565b600060ff82169050919050565b613f5681613f40565b82525050565b61010082016000820151613f736000850182613f31565b506020820151613f866020850182613f31565b506040820151613f996040850182613f4d565b506060820151613fac6060850182613f4d565b506080820151613fbf6080850182613f4d565b5060a0820151613fd260a0850182613f4d565b5060c0820151613fe560c0850182613f4d565b5060e0820151613ff860e0850182613f4d565b50505050565b6000610100820190506140146000830184613f5c565b92915050565b614023816136d9565b811461402e57600080fd5b50565b6000813590506140408161401a565b92915050565b6000806040838503121561405d5761405c61364a565b5b600061406b858286016138cb565b925050602061407c85828601614031565b9150509250929050565b6000806040838503121561409d5761409c61364a565b5b60006140ab858286016138cb565b92505060206140bc85828601613b03565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6140fb81613ade565b82525050565b600061410d83836140f2565b60208301905092915050565b6000602082019050919050565b6000614131826140c6565b61413b81856140d1565b9350614146836140e2565b8060005b8381101561417757815161415e8882614101565b975061416983614119565b92505060018101905061414a565b5085935050505092915050565b6000602082019050818103600083015261419e8184614126565b905092915050565b600080fd5b600067ffffffffffffffff8211156141c6576141c5613a32565b5b6141cf82613755565b9050602081019050919050565b82818337600083830152505050565b60006141fe6141f9846141ab565b613a92565b90508281526020810184848401111561421a576142196141a6565b5b6142258482856141dc565b509392505050565b600082601f83011261424257614241613a2d565b5b81356142528482602086016141eb565b91505092915050565b600080600080608085870312156142755761427461364a565b5b6000614283878288016138cb565b9450506020614294878288016138cb565b93505060406142a5878288016137e2565b925050606085013567ffffffffffffffff8111156142c6576142c561364f565b5b6142d28782880161422d565b91505092959194509250565b60006142e982613c61565b9050919050565b6142f9816142de565b82525050565b600060208201905061431460008301846142f0565b92915050565b600080604083850312156143315761433061364a565b5b600061433f858286016138cb565b9250506020614350858286016138cb565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143a157607f821691505b6020821081036143b4576143b361435a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614423826137c1565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614455576144546143e9565b5b600182019050919050565b60006040820190506144756000830185613c0b565b6144826020830184613c0b565b9392505050565b600060608201905061449e6000830186613856565b6144ab6020830185613c0b565b6144b86040830184613856565b949350505050565b60006144cb826137c1565b91506144d6836137c1565b92508282026144e4816137c1565b915082820484148315176144fb576144fa6143e9565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061453c826137c1565b9150614547836137c1565b92508261455757614556614502565b5b828204905092915050565b600061456d82613ade565b915061457883613ade565b9250828201905061ffff811115614592576145916143e9565b5b92915050565b7f63616e27742065786365656420746865207061696420746f6b656e7300000000600082015250565b60006145ce601c8361371a565b91506145d982614598565b602082019050919050565b600060208201905081810360008301526145fd816145c1565b9050919050565b7f4d415820535550504c5920524541434845440000000000000000000000000000600082015250565b600061463a60128361371a565b915061464582614604565b602082019050919050565b600060208201905081810360008301526146698161462d565b9050919050565b600061467b82613f40565b915060ff820361468e5761468d6143e9565b5b600182019050919050565b600067ffffffffffffffff8211156146b4576146b3613a32565b5b6146bd82613755565b9050602081019050919050565b60006146dd6146d884614699565b613a92565b9050828152602081018484840111156146f9576146f86141a6565b5b61470484828561372b565b509392505050565b600082601f83011261472157614720613a2d565b5b81516147318482602086016146ca565b91505092915050565b6000602082840312156147505761474f61364a565b5b600082015167ffffffffffffffff81111561476e5761476d61364f565b5b61477a8482850161470c565b91505092915050565b7f4e6f6f2e00000000000000000000000000000000000000000000000000000000600082015250565b60006147b960048361371a565b91506147c482614783565b602082019050919050565b600060208201905081810360008301526147e8816147ac565b9050919050565b60006147fa826137c1565b91506000820361480d5761480c6143e9565b5b600182039050919050565b7f63616e6e6f7420747261646520756e72657665616c6564206e66740000000000600082015250565b600061484e601b8361371a565b915061485982614818565b602082019050919050565b6000602082019050818103600083015261487d81614841565b9050919050565b600061488f82613ade565b915061ffff82036148a3576148a26143e9565b5b600182019050919050565b600081519050919050565b600082825260208201905092915050565b60006148d5826148ae565b6148df81856148b9565b93506148ef81856020860161372b565b6148f881613755565b840191505092915050565b60006080820190506149186000830187613856565b6149256020830186613856565b6149326040830185613c0b565b818103606083015261494481846148ca565b905095945050505050565b60008151905061495e81613680565b92915050565b60006020828403121561497a5761497961364a565b5b60006149888482850161494f565b91505092915050565b60006040820190506149a66000830185613856565b6149b3602083018461388a565b9392505050565b60006149c5826137c1565b91506149d0836137c1565b9250826149e0576149df614502565b5b828206905092915050565b6000815190506149fa816138b4565b92915050565b600060208284031215614a1657614a1561364a565b5b6000614a24848285016149eb565b91505092915050565b614a3681613f40565b82525050565b6000604082019050614a516000830185613e6f565b614a5e6020830184614a2d565b9392505050565b614a6e81613f40565b8114614a7957600080fd5b50565b600081519050614a8b81614a65565b92915050565b600060208284031215614aa757614aa661364a565b5b6000614ab584828501614a7c565b91505092915050565b6000614ac9826137c1565b9150614ad4836137c1565b9250828203905081811115614aec57614aeb6143e9565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea26469706673582212203916f0d5374ddcbd66143db8f189e253312a28326d754c6b94dd3fb1719399ab64736f6c63430008140033000000000000000000000000f4b16a8a8371b650d8d734c52f5656fde9c047b8