[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "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": "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": "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": [ { "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": [], "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": "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": [ { "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": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_address", "type": "address" }, { "internalType": "bool", "name": "_isTaxExempt", "type": "bool" } ], "name": "setTaxExemptAddress", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_taxPercentage", "type": "uint256" } ], "name": "setTaxPercentage", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "taxExempt", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "taxPercentage", "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" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdrawTaxes", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
6101606040526103e860095534801562000017575f80fd5b506040516200343c3803806200343c83398181016040528101906200003d919062000a28565b6040518060400160405280600a81526020017f54696e79446f6765563200000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152508386868160039081620000be919062000cf6565b508060049081620000d0919062000cf6565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160362000146575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016200013d919062000deb565b60405180910390fd5b62000157816200027460201b60201c565b506200016e6006836200033760201b90919060201c565b61012081815250506200018c6007826200033760201b90919060201c565b6101408181525050818051906020012060e08181525050808051906020012061010081815250504660a08181525050620001cb6200038c60201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1681525050505050620002366200021d620003e860201b60201c565b6b033b2e3c9fd0803ce80000006200041060201b60201c565b620002586200024a620003e860201b60201c565b60016200049a60201b60201c565b6200026b3060016200049a60201b60201c565b50505062001059565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6020835110156200035c5762000354836200050260201b60201c565b905062000386565b826200036e836200056c60201b60201c565b5f0190816200037e919062000cf6565b5060ff5f1b90505b92915050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60e051610100514630604051602001620003cd95949392919062000e31565b60405160208183030381529060405280519060200120905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000483575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016200047a919062000deb565b60405180910390fd5b620004965f83836200057560201b60201c565b5050565b620004aa6200079960201b60201c565b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f80829050601f815111156200055157826040517f305a27a900000000000000000000000000000000000000000000000000000000815260040162000548919062000edc565b60405180910390fd5b8051816200055f9062000f2d565b5f1c175f1b915050919050565b5f819050919050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620005c9578060025f828254620005bc919062000fc9565b925050819055506200069a565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508181101562000655578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016200064c9392919062001003565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620006e3578060025f82825403925050819055506200072d565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200078c91906200103e565b60405180910390a3505050565b620007a96200083b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007cf620003e860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200083957620007fb6200083b60201b60201c565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040162000830919062000deb565b60405180910390fd5b565b5f33905090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b620008a3826200085b565b810181811067ffffffffffffffff82111715620008c557620008c46200086b565b5b80604052505050565b5f620008d962000842565b9050620008e7828262000898565b919050565b5f67ffffffffffffffff8211156200090957620009086200086b565b5b62000914826200085b565b9050602081019050919050565b5f5b838110156200094057808201518184015260208101905062000923565b5f8484015250505050565b5f620009616200095b84620008ec565b620008ce565b90508281526020810184848401111562000980576200097f62000857565b5b6200098d84828562000921565b509392505050565b5f82601f830112620009ac57620009ab62000853565b5b8151620009be8482602086016200094b565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620009f282620009c7565b9050919050565b62000a0481620009e6565b811462000a0f575f80fd5b50565b5f8151905062000a2281620009f9565b92915050565b5f805f6060848603121562000a425762000a416200084b565b5b5f84015167ffffffffffffffff81111562000a625762000a616200084f565b5b62000a708682870162000995565b935050602084015167ffffffffffffffff81111562000a945762000a936200084f565b5b62000aa28682870162000995565b925050604062000ab58682870162000a12565b9150509250925092565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000b0e57607f821691505b60208210810362000b245762000b2362000ac9565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000b887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b4b565b62000b94868362000b4b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000bde62000bd862000bd28462000bac565b62000bb5565b62000bac565b9050919050565b5f819050919050565b62000bf98362000bbe565b62000c1162000c088262000be5565b84845462000b57565b825550505050565b5f90565b62000c2762000c19565b62000c3481848462000bee565b505050565b5b8181101562000c5b5762000c4f5f8262000c1d565b60018101905062000c3a565b5050565b601f82111562000caa5762000c748162000b2a565b62000c7f8462000b3c565b8101602085101562000c8f578190505b62000ca762000c9e8562000b3c565b83018262000c39565b50505b505050565b5f82821c905092915050565b5f62000ccc5f198460080262000caf565b1980831691505092915050565b5f62000ce6838362000cbb565b9150826002028217905092915050565b62000d018262000abf565b67ffffffffffffffff81111562000d1d5762000d1c6200086b565b5b62000d29825462000af6565b62000d3682828562000c5f565b5f60209050601f83116001811462000d6c575f841562000d57578287015190505b62000d63858262000cd9565b86555062000dd2565b601f19841662000d7c8662000b2a565b5f5b8281101562000da55784890151825560018201915060208501945060208101905062000d7e565b8683101562000dc5578489015162000dc1601f89168262000cbb565b8355505b6001600288020188555050505b505050505050565b62000de581620009e6565b82525050565b5f60208201905062000e005f83018462000dda565b92915050565b5f819050919050565b62000e1a8162000e06565b82525050565b62000e2b8162000bac565b82525050565b5f60a08201905062000e465f83018862000e0f565b62000e55602083018762000e0f565b62000e64604083018662000e0f565b62000e73606083018562000e20565b62000e82608083018462000dda565b9695505050505050565b5f82825260208201905092915050565b5f62000ea88262000abf565b62000eb4818562000e8c565b935062000ec681856020860162000921565b62000ed1816200085b565b840191505092915050565b5f6020820190508181035f83015262000ef6818462000e9c565b905092915050565b5f81519050919050565b5f819050602082019050919050565b5f62000f24825162000e06565b80915050919050565b5f62000f398262000efe565b8262000f458462000f08565b905062000f528162000f17565b9250602082101562000f955762000f907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8360200360080262000b4b565b831692505b5050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000fd58262000bac565b915062000fe28362000bac565b925082820190508082111562000ffd5762000ffc62000f9c565b5b92915050565b5f606082019050620010185f83018662000dda565b62001027602083018562000e20565b62001036604083018462000e20565b949350505050565b5f602082019050620010535f83018462000e20565b92915050565b60805160a05160c05160e051610100516101205161014051612391620010ab5f395f61106c01525f61103101525f61156501525f61154401525f610de501525f610e3b01525f610e6401526123915ff3fe608060405234801561000f575f80fd5b5060043610610135575f3560e01c80637ecebe00116100b6578063ae7b6d161161007a578063ae7b6d1614610343578063af09e75e14610361578063d1ecfc681461037d578063d505accf146103ad578063dd62ed3e146103c9578063f2fde38b146103f957610135565b80637ecebe001461028357806384b0196e146102b35780638da5cb5b146102d757806395d89b41146102f5578063a9059cbb1461031357610135565b80633644e515116100fd5780633644e515146101f35780633bfaa4ee14610211578063699abb3c1461022d57806370a0823114610249578063715018a61461027957610135565b806306fdde0314610139578063095ea7b31461015757806318160ddd1461018757806323b872dd146101a5578063313ce567146101d5575b5f80fd5b610141610415565b60405161014e9190611a35565b60405180910390f35b610171600480360381019061016c9190611ae6565b6104a5565b60405161017e9190611b3e565b60405180910390f35b61018f6104c7565b60405161019c9190611b66565b60405180910390f35b6101bf60048036038101906101ba9190611b7f565b6104d0565b6040516101cc9190611b3e565b60405180910390f35b6101dd6105ff565b6040516101ea9190611bea565b60405180910390f35b6101fb610607565b6040516102089190611c1b565b60405180910390f35b61022b60048036038101906102269190611c34565b610615565b005b61024760048036038101906102429190611c34565b610632565b005b610263600480360381019061025e9190611c5f565b610689565b6040516102709190611b66565b60405180910390f35b6102816106ce565b005b61029d60048036038101906102989190611c5f565b6106e1565b6040516102aa9190611b66565b60405180910390f35b6102bb6106f2565b6040516102ce9796959493929190611d8a565b60405180910390f35b6102df610797565b6040516102ec9190611e0c565b60405180910390f35b6102fd6107bf565b60405161030a9190611a35565b60405180910390f35b61032d60048036038101906103289190611ae6565b61084f565b60405161033a9190611b3e565b60405180910390f35b61034b610979565b6040516103589190611b66565b60405180910390f35b61037b60048036038101906103769190611e4f565b61097f565b005b61039760048036038101906103929190611c5f565b6109df565b6040516103a49190611b3e565b60405180910390f35b6103c760048036038101906103c29190611ee1565b6109fc565b005b6103e360048036038101906103de9190611f7e565b610b41565b6040516103f09190611b66565b60405180910390f35b610413600480360381019061040e9190611c5f565b610bc3565b005b60606003805461042490611fe9565b80601f016020809104026020016040519081016040528092919081815260200182805461045090611fe9565b801561049b5780601f106104725761010080835404028352916020019161049b565b820191905f5260205f20905b81548152906001019060200180831161047e57829003601f168201915b5050505050905090565b5f806104af610c47565b90506104bc818585610c4e565b600191505092915050565b5f600254905090565b5f600a5f6104dc610c47565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806105735750600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561058c57610583848484610c60565b600190506105f8565b61059e84610598610c47565b84610d50565b5f612710600954846105b09190612046565b6105ba91906120b4565b90505f81846105c991906120e4565b90506105d6868683610c60565b5f8211156105f1576105f06105e9610c47565b3084610c60565b5b6001925050505b9392505050565b5f6012905090565b5f610610610de2565b905090565b61061d610e98565b61062f30610629610c47565b83610c60565b50565b61063a610e98565b6103e881111561067f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067690612161565b60405180910390fd5b8060098190555050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6106d6610e98565b6106df5f610f1f565b565b5f6106eb82610fe2565b9050919050565b5f6060805f805f6060610703611028565b61070b611063565b46305f801b5f67ffffffffffffffff81111561072a5761072961217f565b5b6040519080825280602002602001820160405280156107585781602001602082028036833780820191505090505b507f0f00000000000000000000000000000000000000000000000000000000000000959493929190965096509650965096509650965090919293949596565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546107ce90611fe9565b80601f01602080910402602001604051908101604052809291908181526020018280546107fa90611fe9565b80156108455780601f1061081c57610100808354040283529160200191610845565b820191905f5260205f20905b81548152906001019060200180831161082857829003601f168201915b5050505050905090565b5f600a5f61085b610c47565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806108f25750600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561091257610909610902610c47565b8484610c60565b60019050610973565b5f612710600954846109249190612046565b61092e91906120b4565b90505f818461093d91906120e4565b905061095161094a610c47565b8683610c60565b5f82111561096c5761096b610964610c47565b3084610c60565b5b6001925050505b92915050565b60095481565b610987610e98565b80600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b600a602052805f5260405f205f915054906101000a900460ff1681565b83421115610a4157836040517f62791302000000000000000000000000000000000000000000000000000000008152600401610a389190611b66565b60405180910390fd5b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610a6f8c61109e565b89604051602001610a85969594939291906121ac565b6040516020818303038152906040528051906020012090505f610aa7826110f1565b90505f610ab68287878761110a565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610b2a57808a6040517f4b800e46000000000000000000000000000000000000000000000000000000008152600401610b2192919061220b565b60405180910390fd5b610b358a8a8a610c4e565b50505050505050505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610bcb610e98565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c3b575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610c329190611e0c565b60405180910390fd5b610c4481610f1f565b50565b5f33905090565b610c5b8383836001611138565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610cd0575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401610cc79190611e0c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610d40575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401610d379190611e0c565b60405180910390fd5b610d4b838383611307565b505050565b5f610d5b8484610b41565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610ddc5781811015610dcd578281836040517ffb8f41b2000000000000000000000000000000000000000000000000000000008152600401610dc493929190612232565b60405180910390fd5b610ddb84848484035f611138565b5b50505050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16148015610e5d57507f000000000000000000000000000000000000000000000000000000000000000046145b15610e8a577f00000000000000000000000000000000000000000000000000000000000000009050610e95565b610e92611520565b90505b90565b610ea0610c47565b73ffffffffffffffffffffffffffffffffffffffff16610ebe610797565b73ffffffffffffffffffffffffffffffffffffffff1614610f1d57610ee1610c47565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610f149190611e0c565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b606061105e60067f00000000000000000000000000000000000000000000000000000000000000006115b590919063ffffffff16565b905090565b606061109960077f00000000000000000000000000000000000000000000000000000000000000006115b590919063ffffffff16565b905090565b5f60085f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f815480929190600101919050559050919050565b5f6111036110fd610de2565b83611662565b9050919050565b5f805f8061111a888888886116a2565b92509250925061112a8282611789565b829350505050949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036111a8575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040161119f9190611e0c565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611218575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040161120f9190611e0c565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611301578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516112f89190611b66565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611357578060025f82825461134b9190612267565b92505081905550611425565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156113e0578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016113d793929190612232565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361146c578060025f82825403925050819055506114b6565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516115139190611b66565b60405180910390a3505050565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000463060405160200161159a95949392919061229a565b60405160208183030381529060405280519060200120905090565b606060ff5f1b83146115d1576115ca836118eb565b905061165c565b8180546115dd90611fe9565b80601f016020809104026020016040519081016040528092919081815260200182805461160990611fe9565b80156116545780601f1061162b57610100808354040283529160200191611654565b820191905f5260205f20905b81548152906001019060200180831161163757829003601f168201915b505050505090505b92915050565b5f6040517f190100000000000000000000000000000000000000000000000000000000000081528360028201528260228201526042812091505092915050565b5f805f7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0845f1c11156116de575f60038592509250925061177f565b5f6001888888886040515f815260200160405260405161170194939291906122eb565b6020604051602081039080840390855afa158015611721573d5f803e3d5ffd5b5050506020604051035190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611772575f60015f801b9350935093505061177f565b805f805f1b935093509350505b9450945094915050565b5f600381111561179c5761179b61232e565b5b8260038111156117af576117ae61232e565b5b03156118e757600160038111156117c9576117c861232e565b5b8260038111156117dc576117db61232e565b5b03611813576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600260038111156118275761182661232e565b5b82600381111561183a5761183961232e565b5b0361187e57805f1c6040517ffce698f70000000000000000000000000000000000000000000000000000000081526004016118759190611b66565b60405180910390fd5b6003808111156118915761189061232e565b5b8260038111156118a4576118a361232e565b5b036118e657806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016118dd9190611c1b565b60405180910390fd5b5b5050565b60605f6118f78361195d565b90505f602067ffffffffffffffff8111156119155761191461217f565b5b6040519080825280601f01601f1916602001820160405280156119475781602001600182028036833780820191505090505b5090508181528360208201528092505050919050565b5f8060ff835f1c169050601f8111156119a2576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80915050919050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156119e25780820151818401526020810190506119c7565b5f8484015250505050565b5f601f19601f8301169050919050565b5f611a07826119ab565b611a1181856119b5565b9350611a218185602086016119c5565b611a2a816119ed565b840191505092915050565b5f6020820190508181035f830152611a4d81846119fd565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611a8282611a59565b9050919050565b611a9281611a78565b8114611a9c575f80fd5b50565b5f81359050611aad81611a89565b92915050565b5f819050919050565b611ac581611ab3565b8114611acf575f80fd5b50565b5f81359050611ae081611abc565b92915050565b5f8060408385031215611afc57611afb611a55565b5b5f611b0985828601611a9f565b9250506020611b1a85828601611ad2565b9150509250929050565b5f8115159050919050565b611b3881611b24565b82525050565b5f602082019050611b515f830184611b2f565b92915050565b611b6081611ab3565b82525050565b5f602082019050611b795f830184611b57565b92915050565b5f805f60608486031215611b9657611b95611a55565b5b5f611ba386828701611a9f565b9350506020611bb486828701611a9f565b9250506040611bc586828701611ad2565b9150509250925092565b5f60ff82169050919050565b611be481611bcf565b82525050565b5f602082019050611bfd5f830184611bdb565b92915050565b5f819050919050565b611c1581611c03565b82525050565b5f602082019050611c2e5f830184611c0c565b92915050565b5f60208284031215611c4957611c48611a55565b5b5f611c5684828501611ad2565b91505092915050565b5f60208284031215611c7457611c73611a55565b5b5f611c8184828501611a9f565b91505092915050565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b611cbe81611c8a565b82525050565b611ccd81611a78565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b611d0581611ab3565b82525050565b5f611d168383611cfc565b60208301905092915050565b5f602082019050919050565b5f611d3882611cd3565b611d428185611cdd565b9350611d4d83611ced565b805f5b83811015611d7d578151611d648882611d0b565b9750611d6f83611d22565b925050600181019050611d50565b5085935050505092915050565b5f60e082019050611d9d5f83018a611cb5565b8181036020830152611daf81896119fd565b90508181036040830152611dc381886119fd565b9050611dd26060830187611b57565b611ddf6080830186611cc4565b611dec60a0830185611c0c565b81810360c0830152611dfe8184611d2e565b905098975050505050505050565b5f602082019050611e1f5f830184611cc4565b92915050565b611e2e81611b24565b8114611e38575f80fd5b50565b5f81359050611e4981611e25565b92915050565b5f8060408385031215611e6557611e64611a55565b5b5f611e7285828601611a9f565b9250506020611e8385828601611e3b565b9150509250929050565b611e9681611bcf565b8114611ea0575f80fd5b50565b5f81359050611eb181611e8d565b92915050565b611ec081611c03565b8114611eca575f80fd5b50565b5f81359050611edb81611eb7565b92915050565b5f805f805f805f60e0888a031215611efc57611efb611a55565b5b5f611f098a828b01611a9f565b9750506020611f1a8a828b01611a9f565b9650506040611f2b8a828b01611ad2565b9550506060611f3c8a828b01611ad2565b9450506080611f4d8a828b01611ea3565b93505060a0611f5e8a828b01611ecd565b92505060c0611f6f8a828b01611ecd565b91505092959891949750929550565b5f8060408385031215611f9457611f93611a55565b5b5f611fa185828601611a9f565b9250506020611fb285828601611a9f565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061200057607f821691505b60208210810361201357612012611fbc565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61205082611ab3565b915061205b83611ab3565b925082820261206981611ab3565b915082820484148315176120805761207f612019565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6120be82611ab3565b91506120c983611ab3565b9250826120d9576120d8612087565b5b828204905092915050565b5f6120ee82611ab3565b91506120f983611ab3565b925082820390508181111561211157612110612019565b5b92915050565b7f6d757374206265206c657373207468656e2031300000000000000000000000005f82015250565b5f61214b6014836119b5565b915061215682612117565b602082019050919050565b5f6020820190508181035f8301526121788161213f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f60c0820190506121bf5f830189611c0c565b6121cc6020830188611cc4565b6121d96040830187611cc4565b6121e66060830186611b57565b6121f36080830185611b57565b61220060a0830184611b57565b979650505050505050565b5f60408201905061221e5f830185611cc4565b61222b6020830184611cc4565b9392505050565b5f6060820190506122455f830186611cc4565b6122526020830185611b57565b61225f6040830184611b57565b949350505050565b5f61227182611ab3565b915061227c83611ab3565b925082820190508082111561229457612293612019565b5b92915050565b5f60a0820190506122ad5f830188611c0c565b6122ba6020830187611c0c565b6122c76040830186611c0c565b6122d46060830185611b57565b6122e16080830184611cc4565b9695505050505050565b5f6080820190506122fe5f830187611c0c565b61230b6020830186611bdb565b6123186040830185611c0c565b6123256060830184611c0c565b95945050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffdfea264697066735822122097b0475681d8d06dc4d06fa92d1a8b10bc225247fbc60e73f91c68ca8c3edc5364736f6c63430008140033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000b2885adcf66f62930659ede02faa6fb0ef6cb025000000000000000000000000000000000000000000000000000000000000000450494b4100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000450494b4100000000000000000000000000000000000000000000000000000000