[ { "inputs": [ { "internalType": "address", "name": "initialOwner", "type": "address" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "ECDSAInvalidSignature", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "length", "type": "uint256" } ], "name": "ECDSAInvalidSignatureLength", "type": "error" }, { "inputs": [ { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "ECDSAInvalidSignatureS", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "ERC2612ExpiredSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC2612InvalidSigner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "currentNonce", "type": "uint256" } ], "name": "InvalidAccountNonce", "type": "error" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "requestedAmount", "type": "uint256" }, { "internalType": "uint256", "name": "cap", "type": "uint256" }, { "internalType": "uint256", "name": "alreadyMinted", "type": "uint256" } ], "name": "MintCapExceeded", "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": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferStarted", "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": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_TOTAL_SUPPLY", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "acceptOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burnFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "initialMint", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "mint", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingOwner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalMinted", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6101806040526a52b7d2dcc80cd2e40000006101609081525034801562000024575f80fd5b50604051620031d4380380620031d483398181016040528101906200004a9190620007e8565b806040518060400160405280600781526020017f4341444149434f00000000000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f4341444149434f000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f7743414441490000000000000000000000000000000000000000000000000000815250816003908162000135919062000a7c565b50806004908162000147919062000a7c565b50505062000160600583620002b660201b90919060201c565b61012081815250506200017e600682620002b660201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a08181525050620001bd6200030b60201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036200026e575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040162000265919062000b71565b60405180910390fd5b6200027f816200036760201b60201c565b506200029d816a084595161401484a0000006200039f60201b60201c565b6a084595161401484a000000600a819055505062000e19565b5f602083511015620002db57620002d3836200042960201b60201c565b905062000305565b82620002ed836200049360201b60201c565b5f019081620002fd919062000a7c565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e0516101005146306040516020016200034c95949392919062000bb7565b60405160208183030381529060405280519060200120905090565b60095f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556200039c816200049c60201b60201c565b50565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000412575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000409919062000b71565b60405180910390fd5b620004255f83836200055f60201b60201c565b5050565b5f80829050601f815111156200047857826040517f305a27a90000000000000000000000000000000000000000000000000000000081526004016200046f919062000c9c565b60405180910390fd5b805181620004869062000ced565b5f1c175f1b915050919050565b5f819050919050565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620005b3578060025f828254620005a6919062000d89565b9250508190555062000684565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156200063f578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620006369392919062000dc3565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620006cd578060025f828254039250508190555062000717565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000776919062000dfe565b60405180910390a3505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620007b28262000787565b9050919050565b620007c481620007a6565b8114620007cf575f80fd5b50565b5f81519050620007e281620007b9565b92915050565b5f602082840312156200080057620007ff62000783565b5b5f6200080f84828501620007d2565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200089457607f821691505b602082108103620008aa57620008a96200084f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200090e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620008d1565b6200091a8683620008d1565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620009646200095e620009588462000932565b6200093b565b62000932565b9050919050565b5f819050919050565b6200097f8362000944565b620009976200098e826200096b565b848454620008dd565b825550505050565b5f90565b620009ad6200099f565b620009ba81848462000974565b505050565b5b81811015620009e157620009d55f82620009a3565b600181019050620009c0565b5050565b601f82111562000a3057620009fa81620008b0565b62000a0584620008c2565b8101602085101562000a15578190505b62000a2d62000a2485620008c2565b830182620009bf565b50505b505050565b5f82821c905092915050565b5f62000a525f198460080262000a35565b1980831691505092915050565b5f62000a6c838362000a41565b9150826002028217905092915050565b62000a878262000818565b67ffffffffffffffff81111562000aa35762000aa262000822565b5b62000aaf82546200087c565b62000abc828285620009e5565b5f60209050601f83116001811462000af2575f841562000add578287015190505b62000ae9858262000a5f565b86555062000b58565b601f19841662000b0286620008b0565b5f5b8281101562000b2b5784890151825560018201915060208501945060208101905062000b04565b8683101562000b4b578489015162000b47601f89168262000a41565b8355505b6001600288020188555050505b505050505050565b62000b6b81620007a6565b82525050565b5f60208201905062000b865f83018462000b60565b92915050565b5f819050919050565b62000ba08162000b8c565b82525050565b62000bb18162000932565b82525050565b5f60a08201905062000bcc5f83018862000b95565b62000bdb602083018762000b95565b62000bea604083018662000b95565b62000bf9606083018562000ba6565b62000c08608083018462000b60565b9695505050505050565b5f82825260208201905092915050565b5f5b8381101562000c4157808201518184015260208101905062000c24565b5f8484015250505050565b5f601f19601f8301169050919050565b5f62000c688262000818565b62000c74818562000c12565b935062000c8681856020860162000c22565b62000c918162000c4c565b840191505092915050565b5f6020820190508181035f83015262000cb6818462000c5c565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f62000ce4825162000b8c565b80915050919050565b5f62000cf98262000cbe565b8262000d058462000cc8565b905062000d128162000cd7565b9250602082101562000d555762000d507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802620008d1565b831692505b5050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000d958262000932565b915062000da28362000932565b925082820190508082111562000dbd5762000dbc62000d5c565b5b92915050565b5f60608201905062000dd85f83018662000b60565b62000de7602083018562000ba6565b62000df6604083018462000ba6565b949350505050565b5f60208201905062000e135f83018462000ba6565b92915050565b60805160a05160c05160e0516101005161012051610140516101605161235162000e835f395f818161055d0152818161059701526105cd01525f61106d01525f61103201525f61156601525f61154501525f610d7b01525f610dd101525f610dfa01526123515ff3fe608060405234801561000f575f80fd5b5060043610610156575f3560e01c806379cc6790116100c1578063a2309ff81161007a578063a2309ff814610396578063a9059cbb146103b4578063d505accf146103e4578063dd62ed3e14610400578063e30c397814610430578063f2fde38b1461044e57610156565b806379cc6790146102cc5780637ecebe00146102e857806384b0196e146103185780638da5cb5b1461033c57806395d89b411461035a5780639fc5ce2a1461037857610156565b80633644e515116101135780633644e5151461023257806340c10f191461025057806342966c681461026c57806370a0823114610288578063715018a6146102b857806379ba5097146102c257610156565b806306fdde031461015a578063095ea7b31461017857806318160ddd146101a857806323b872dd146101c6578063313ce567146101f657806333039d3d14610214575b5f80fd5b61016261046a565b60405161016f9190611af9565b60405180910390f35b610192600480360381019061018d9190611baa565b6104fa565b60405161019f9190611c02565b60405180910390f35b6101b061051c565b6040516101bd9190611c2a565b60405180910390f35b6101e060048036038101906101db9190611c43565b610525565b6040516101ed9190611c02565b60405180910390f35b6101fe610553565b60405161020b9190611cae565b60405180910390f35b61021c61055b565b6040516102299190611c2a565b60405180910390f35b61023a61057f565b6040516102479190611cdf565b60405180910390f35b61026a60048036038101906102659190611baa565b61058d565b005b61028660048036038101906102819190611cf8565b610653565b005b6102a2600480360381019061029d9190611d23565b610667565b6040516102af9190611c2a565b60405180910390f35b6102c06106ac565b005b6102ca6106ef565b005b6102e660048036038101906102e19190611baa565b61077d565b005b61030260048036038101906102fd9190611d23565b61079d565b60405161030f9190611c2a565b60405180910390f35b6103206107ae565b6040516103339796959493929190611e4e565b60405180910390f35b610344610853565b6040516103519190611ed0565b60405180910390f35b61036261087b565b60405161036f9190611af9565b60405180910390f35b61038061090b565b60405161038d9190611c2a565b60405180910390f35b61039e61091a565b6040516103ab9190611c2a565b60405180910390f35b6103ce60048036038101906103c99190611baa565b610920565b6040516103db9190611c02565b60405180910390f35b6103fe60048036038101906103f99190611f3d565b610942565b005b61041a60048036038101906104159190611fda565b610a87565b6040516104279190611c2a565b60405180910390f35b610438610b09565b6040516104459190611ed0565b60405180910390f35b61046860048036038101906104639190611d23565b610b31565b005b60606003805461047990612045565b80601f01602080910402602001604051908101604052809291908181526020018280546104a590612045565b80156104f05780601f106104c7576101008083540402835291602001916104f0565b820191905f5260205f20905b8154815290600101906020018083116104d357829003601f168201915b5050505050905090565b5f80610504610bdd565b9050610511818585610be4565b600191505092915050565b5f600254905090565b5f8061052f610bdd565b905061053c858285610bf6565b610547858585610c88565b60019150509392505050565b5f6012905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f610588610d78565b905090565b610595610e2e565b7f000000000000000000000000000000000000000000000000000000000000000081600a546105c491906120a2565b111561062d57807f0000000000000000000000000000000000000000000000000000000000000000600a546040517fb435ed7e000000000000000000000000000000000000000000000000000000008152600401610624939291906120d5565b60405180910390fd5b80600a5f82825461063e91906120a2565b9250508190555061064f8282610eb5565b5050565b61066461065e610bdd565b82610f34565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6106b4610e2e565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e690612154565b60405180910390fd5b5f6106f8610bdd565b90508073ffffffffffffffffffffffffffffffffffffffff16610719610b09565b73ffffffffffffffffffffffffffffffffffffffff161461077157806040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016107689190611ed0565b60405180910390fd5b61077a81610fb3565b50565b61078f82610789610bdd565b83610bf6565b6107998282610f34565b5050565b5f6107a782610fe3565b9050919050565b5f6060805f805f60606107bf611029565b6107c7611064565b46305f801b5f67ffffffffffffffff8111156107e6576107e5612172565b5b6040519080825280602002602001820160405280156108145781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461088a90612045565b80601f01602080910402602001604051908101604052809291908181526020018280546108b690612045565b80156109015780601f106108d857610100808354040283529160200191610901565b820191905f5260205f20905b8154815290600101906020018083116108e457829003601f168201915b5050505050905090565b6a084595161401484a00000081565b600a5481565b5f8061092a610bdd565b9050610937818585610c88565b600191505092915050565b8342111561098757836040517f6279130200000000000000000000000000000000000000000000000000000000815260040161097e9190611c2a565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886109b58c61109f565b896040516020016109cb9695949392919061219f565b6040516020818303038152906040528051906020012090505f6109ed826110f2565b90505f6109fc8287878761110b565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610a7057808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610a679291906121fe565b60405180910390fd5b610a7b8a8a8a610be4565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b610b39610e2e565b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16610b98610853565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b5f33905090565b610bf18383836001611139565b505050565b5f610c018484610a87565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610c825781811015610c73578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610c6a93929190612225565b60405180910390fd5b610c8184848484035f611139565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cf8575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610cef9190611ed0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d68575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d5f9190611ed0565b60405180910390fd5b610d73838383611308565b505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610df357507f000000000000000000000000000000000000000000000000000000000000000046145b15610e20577f00000000000000000000000000000000000000000000000000000000000000009050610e2b565b610e28611521565b90505b90565b610e36610bdd565b73ffffffffffffffffffffffffffffffffffffffff16610e54610853565b73ffffffffffffffffffffffffffffffffffffffff1614610eb357610e77610bdd565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610eaa9190611ed0565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f25575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610f1c9190611ed0565b60405180910390fd5b610f305f8383611308565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610fa4575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610f9b9190611ed0565b60405180910390fd5b610faf825f83611308565b5050565b60095f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055610fe0816115b6565b50565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b606061105f60057f000000000000000000000000000000000000000000000000000000000000000061167990919063ffffffff16565b905090565b606061109a60067f000000000000000000000000000000000000000000000000000000000000000061167990919063ffffffff16565b905090565b5f60075f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f6111046110fe610d78565b83611726565b9050919050565b5f805f8061111b88888888611766565b92509250925061112b828261184d565b829350505050949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036111a9575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016111a09190611ed0565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611219575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016112109190611ed0565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611302578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112f99190611c2a565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611358578060025f82825461134c91906120a2565b92505081905550611426565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156113e1578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016113d893929190612225565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361146d578060025f82825403925050819055506114b7565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115149190611c2a565b60405180910390a3505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000463060405160200161159b95949392919061225a565b60405160208183030381529060405280519060200120905090565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b606060ff5f1b83146116955761168e836119af565b9050611720565b8180546116a190612045565b80601f01602080910402602001604051908101604052809291908181526020018280546116cd90612045565b80156117185780601f106116ef57610100808354040283529160200191611718565b820191905f5260205f20905b8154815290600101906020018083116116fb57829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c11156117a2575f600385925092509250611843565b5f6001888888886040515f81526020016040526040516117c594939291906122ab565b6020604051602081039080840390855afa1580156117e5573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611836575f60015f801b93509350935050611843565b805f805f1b935093509350505b9450945094915050565b5f60038111156118605761185f6122ee565b5b826003811115611873576118726122ee565b5b03156119ab576001600381111561188d5761188c6122ee565b5b8260038111156118a05761189f6122ee565b5b036118d7576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260038111156118eb576118ea6122ee565b5b8260038111156118fe576118fd6122ee565b5b0361194257805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016119399190611c2a565b60405180910390fd5b600380811115611955576119546122ee565b5b826003811115611968576119676122ee565b5b036119aa57806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016119a19190611cdf565b60405180910390fd5b5b5050565b60605f6119bb83611a21565b90505f602067ffffffffffffffff8111156119d9576119d8612172565b5b6040519080825280601f01601f191660200182016040528015611a0b5781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f8060ff835f1c169050601f811115611a66576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015611aa6578082015181840152602081019050611a8b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611acb82611a6f565b611ad58185611a79565b9350611ae5818560208601611a89565b611aee81611ab1565b840191505092915050565b5f6020820190508181035f830152611b118184611ac1565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611b4682611b1d565b9050919050565b611b5681611b3c565b8114611b60575f80fd5b50565b5f81359050611b7181611b4d565b92915050565b5f819050919050565b611b8981611b77565b8114611b93575f80fd5b50565b5f81359050611ba481611b80565b92915050565b5f8060408385031215611bc057611bbf611b19565b5b5f611bcd85828601611b63565b9250506020611bde85828601611b96565b9150509250929050565b5f8115159050919050565b611bfc81611be8565b82525050565b5f602082019050611c155f830184611bf3565b92915050565b611c2481611b77565b82525050565b5f602082019050611c3d5f830184611c1b565b92915050565b5f805f60608486031215611c5a57611c59611b19565b5b5f611c6786828701611b63565b9350506020611c7886828701611b63565b9250506040611c8986828701611b96565b9150509250925092565b5f60ff82169050919050565b611ca881611c93565b82525050565b5f602082019050611cc15f830184611c9f565b92915050565b5f819050919050565b611cd981611cc7565b82525050565b5f602082019050611cf25f830184611cd0565b92915050565b5f60208284031215611d0d57611d0c611b19565b5b5f611d1a84828501611b96565b91505092915050565b5f60208284031215611d3857611d37611b19565b5b5f611d4584828501611b63565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b611d8281611d4e565b82525050565b611d9181611b3c565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611dc981611b77565b82525050565b5f611dda8383611dc0565b60208301905092915050565b5f602082019050919050565b5f611dfc82611d97565b611e068185611da1565b9350611e1183611db1565b805f5b83811015611e41578151611e288882611dcf565b9750611e3383611de6565b925050600181019050611e14565b5085935050505092915050565b5f60e082019050611e615f83018a611d79565b8181036020830152611e738189611ac1565b90508181036040830152611e878188611ac1565b9050611e966060830187611c1b565b611ea36080830186611d88565b611eb060a0830185611cd0565b81810360c0830152611ec28184611df2565b905098975050505050505050565b5f602082019050611ee35f830184611d88565b92915050565b611ef281611c93565b8114611efc575f80fd5b50565b5f81359050611f0d81611ee9565b92915050565b611f1c81611cc7565b8114611f26575f80fd5b50565b5f81359050611f3781611f13565b92915050565b5f805f805f805f60e0888a031215611f5857611f57611b19565b5b5f611f658a828b01611b63565b9750506020611f768a828b01611b63565b9650506040611f878a828b01611b96565b9550506060611f988a828b01611b96565b9450506080611fa98a828b01611eff565b93505060a0611fba8a828b01611f29565b92505060c0611fcb8a828b01611f29565b91505092959891949750929550565b5f8060408385031215611ff057611fef611b19565b5b5f611ffd85828601611b63565b925050602061200e85828601611b63565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061205c57607f821691505b60208210810361206f5761206e612018565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6120ac82611b77565b91506120b783611b77565b92508282019050808211156120cf576120ce612075565b5b92915050565b5f6060820190506120e85f830186611c1b565b6120f56020830185611c1b565b6121026040830184611c1b565b949350505050565b7f52656e6f756e63696e67206f776e6572736869702069732064697361626c65645f82015250565b5f61213e602083611a79565b91506121498261210a565b602082019050919050565b5f6020820190508181035f83015261216b81612132565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60c0820190506121b25f830189611cd0565b6121bf6020830188611d88565b6121cc6040830187611d88565b6121d96060830186611c1b565b6121e66080830185611c1b565b6121f360a0830184611c1b565b979650505050505050565b5f6040820190506122115f830185611d88565b61221e6020830184611d88565b9392505050565b5f6060820190506122385f830186611d88565b6122456020830185611c1b565b6122526040830184611c1b565b949350505050565b5f60a08201905061226d5f830188611cd0565b61227a6020830187611cd0565b6122876040830186611cd0565b6122946060830185611c1b565b6122a16080830184611d88565b9695505050505050565b5f6080820190506122be5f830187611cd0565b6122cb6020830186611c9f565b6122d86040830185611cd0565b6122e56060830184611cd0565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea26469706673582212209ee26b4b254f20f65aa310f99ee8f154cd5a0e3fa9ad2b8f3001b817729b66dd64736f6c63430008140033000000000000000000000000b7f2bfda11e6ec4e355fe243b3a7f9face544d18