0 txs
0 calls
constructor
constructor(address publicERC6492Validator)
functions
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
getBatchHash
viewfunction getBatchHash(tuple spendPermissionBatch) view returns (bytes32)
getCurrentPeriod
viewfunction getCurrentPeriod(tuple spendPermission) view returns (tuple)
getHash
viewfunction getHash(tuple spendPermission) view returns (bytes32)
getLastUpdatedPeriod
viewfunction getLastUpdatedPeriod(tuple spendPermission) view returns (tuple)
isApproved
viewfunction isApproved(tuple spendPermission) view returns (bool)
isRevoked
viewfunction isRevoked(tuple spendPermission) view returns (bool)
isValid
viewfunction isValid(tuple spendPermission) view returns (bool)
NATIVE_TOKEN
viewfunction NATIVE_TOKEN() view returns (address)
PERMISSION_DETAILS_TYPEHASH
viewfunction PERMISSION_DETAILS_TYPEHASH() view returns (bytes32)
PUBLIC_ERC6492_VALIDATOR
viewfunction PUBLIC_ERC6492_VALIDATOR() view returns (address)
SPEND_PERMISSION_BATCH_TYPEHASH
viewfunction SPEND_PERMISSION_BATCH_TYPEHASH() view returns (bytes32)
SPEND_PERMISSION_TYPEHASH
viewfunction SPEND_PERMISSION_TYPEHASH() view returns (bytes32)
approve
nonpayablefunction approve(tuple spendPermission) returns (bool)
approveBatchWithSignature
nonpayablefunction approveBatchWithSignature(tuple spendPermissionBatch, bytes signature) returns (bool)
approveWithRevoke
nonpayablefunction approveWithRevoke(tuple permissionToApprove, tuple permissionToRevoke, tuple expectedLastUpdatedPeriod) returns (bool)
approveWithSignature
nonpayablefunction approveWithSignature(tuple spendPermission, bytes signature) returns (bool)
revoke
nonpayablefunction revoke(tuple spendPermission)
revokeAsSpender
nonpayablefunction revokeAsSpender(tuple spendPermission)
spend
nonpayablefunction spend(tuple spendPermission, uint160 value)
events
SpendPermissionApproved
event SpendPermissionApproved(bytes32 indexed hash, (address account, address spender, address token, uint160 allowance, uint48 period, uint48 start, uint48 end, uint256 salt, bytes extraData) spendPermission)
SpendPermissionRevoked
event SpendPermissionRevoked(bytes32 indexed hash, (address account, address spender, address token, uint160 allowance, uint48 period, uint48 start, uint48 end, uint256 salt, bytes extraData) spendPermission)
SpendPermissionUsed
event SpendPermissionUsed(bytes32 indexed hash, address indexed account, address indexed spender, address token, (uint48 start, uint48 end, uint160 spend) periodSpend)
errors
AfterSpendPermissionEnd
error AfterSpendPermissionEnd(uint48 currentTimestamp, uint48 end)
BeforeSpendPermissionStart
error BeforeSpendPermissionStart(uint48 currentTimestamp, uint48 start)
EmptySpendPermissionBatch
error EmptySpendPermissionBatch()
ERC721TokenNotSupported
error ERC721TokenNotSupported(address token)
ExceededSpendPermission
error ExceededSpendPermission(uint256 value, uint256 allowance)
InvalidLastUpdatedPeriod
error InvalidLastUpdatedPeriod((uint48 start, uint48 end, uint160 spend) actualLastUpdatedPeriod, (uint48 start, uint48 end, uint160 spend) expectedLastUpdatedPeriod)
InvalidSender
error InvalidSender(address sender, address expected)
InvalidSignature
error InvalidSignature()
InvalidStartEnd
error InvalidStartEnd(uint48 start, uint48 end)
MismatchedAccounts
error MismatchedAccounts(address firstAccount, address secondAccount)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SpendValueOverflow
error SpendValueOverflow(uint256 value)
UnauthorizedSpendPermission
error UnauthorizedSpendPermission()
UnexpectedReceiveAmount
error UnexpectedReceiveAmount(uint256 received, uint256 expected)
ZeroAllowance
error ZeroAllowance()
ZeroPeriod
error ZeroPeriod()
ZeroSpender
error ZeroSpender()
ZeroToken
error ZeroToken()
ZeroValue
error ZeroValue()
creation bytecode
0x610140604052348015610010575f5ffd5b50604051613c1e380380613c1e8339818101604052810190610032919061024f565b3073ffffffffffffffffffffffffffffffffffffffff16608081815250504660a0818152505060608061006961018260201b60201c565b6100845761007b61018660201b60201c565b80925081935050505b5f61009361018260201b60201c565b6100a45782805190602001206100a8565b5f5f1b5b90505f6100b961018260201b60201c565b6100ca5782805190602001206100ce565b5f5f1b5b90508160c081815250508060e081815250505f6100ef61018260201b60201c565b610139576040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815283602082015282604082015246606082015230608082015260a081209150505b80610100818152505050505050508073ffffffffffffffffffffffffffffffffffffffff166101208173ffffffffffffffffffffffffffffffffffffffff16815250505061027a565b5f90565b606080604051806060016040528060268152602001613bf86026913991506040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090509091565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61020d826101e4565b9050919050565b5f61021e82610203565b9050919050565b61022e81610214565b8114610238575f5ffd5b50565b5f8151905061024981610225565b92915050565b5f60208284031215610264576102636101e0565b5b5f6102718482850161023b565b91505092915050565b60805160a05160c05160e05161010051610120516139296102cf5f395f8181610ef40152818161121a015261123f01525f611f3501525f61212601525f61210301525f61219501525f6121b901526139295ff3fe608060405260043610610122575f3560e01c806387d5053b1161009f578063b4a61ad111610063578063b4a61ad11461047b578063b9ffc8e1146104a5578063bb53ffc0146104e1578063e0a00b791461051d578063e8059a7d1461055957610171565b806387d5053b146103875780639a9dcbad146103b15780639e16b82f146103db5780639ecae45614610417578063b2c2b0191461045357610171565b806354ab90c2116100e657806354ab90c21461027b5780637000882d146102b757806378792f76146102f35780637fae20b51461031b57806384b0196e1461035757610171565b80632c18d42e1461017557806331f7d964146101b157806333211c30146101db5780633a3c58e814610217578063415a97351461025357610171565b36610171575f5c341461016f57345f5c6040517fa6c3bf5d0000000000000000000000000000000000000000000000000000000081526004016101669291906123c5565b60405180910390fd5b005b5f5ffd5b348015610180575f5ffd5b5061019b60048036038101906101969190612723565b610583565b6040516101a891906127c8565b60405180910390f35b3480156101bc575f5ffd5b506101c5610848565b6040516101d291906127f0565b60405180910390f35b3480156101e6575f5ffd5b5061020160048036038101906101fc919061282c565b610860565b60405161020e919061288d565b60405180910390f35b348015610222575f5ffd5b5061023d60048036038101906102389190612723565b6108ff565b60405161024a919061288d565b60405180910390f35b34801561025e575f5ffd5b50610279600480360381019061027491906128a6565b61092d565b005b348015610286575f5ffd5b506102a1600480360381019061029c9190612723565b6109f6565b6040516102ae91906127c8565b60405180910390f35b3480156102c2575f5ffd5b506102dd60048036038101906102d8919061291e565b610ad3565b6040516102ea919061288d565b60405180910390f35b3480156102fe575f5ffd5b506103196004803603810190610314919061282c565b610d3d565b005b348015610326575f5ffd5b50610341600480360381019061033c9190612723565b610dd8565b60405161034e919061288d565b60405180910390f35b348015610362575f5ffd5b5061036b610e31565b60405161037e9796959493929190612b0f565b60405180910390f35b348015610392575f5ffd5b5061039b610e7c565b6040516103a89190612b91565b60405180910390f35b3480156103bc575f5ffd5b506103c5610ea0565b6040516103d29190612b91565b60405180910390f35b3480156103e6575f5ffd5b5061040160048036038101906103fc9190612723565b610ec4565b60405161040e919061288d565b60405180910390f35b348015610422575f5ffd5b5061043d60048036038101906104389190612e2f565b610ef1565b60405161044a919061288d565b60405180910390f35b34801561045e575f5ffd5b506104796004803603810190610474919061282c565b61117c565b005b348015610486575f5ffd5b5061048f611218565b60405161049c9190612f03565b60405180910390f35b3480156104b0575f5ffd5b506104cb60048036038101906104c69190612f1c565b61123c565b6040516104d8919061288d565b60405180910390f35b3480156104ec575f5ffd5b5061050760048036038101906105029190612f95565b61134f565b6040516105149190612b91565b60405180910390f35b348015610528575f5ffd5b50610543600480360381019061053e9190612723565b6115ad565b6040516105509190612b91565b60405180910390f35b348015610564575f5ffd5b5061056d611641565b60405161057a9190612b91565b60405180910390f35b61058b612369565b5f4290508260a0015165ffffffffffff168165ffffffffffff1610156105ed57808360a001516040517ea170cd0000000000000000000000000000000000000000000000000000000081526004016105e4929190612feb565b60405180910390fd5b8260c0015165ffffffffffff168165ffffffffffff161061064b57808360c001516040517f4f0a481c000000000000000000000000000000000000000000000000000000008152600401610642929190612feb565b60405180910390fd5b5f60025f610658866115ad565b81526020019081526020015f206040518060600160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f8201600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152505090505f5f826040015173ffffffffffffffffffffffffffffffffffffffff16141590505f826020015165ffffffffffff168465ffffffffffff161090508180156107615750805b156107725782945050505050610843565b5f86608001518760a0015186610788919061303f565b61079291906130a5565b90505f81866107a1919061303f565b90505f8860c0015165ffffffffffff16896080015165ffffffffffff168365ffffffffffff166107d191906130d5565b1190505f816107ef578960800151836107ea9190613108565b6107f5565b8960c001515b905060405180606001604052808465ffffffffffff1681526020018265ffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff16815250985050505050505050505b919050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee81565b5f815f0160208101906108739190613141565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146108e55733816040517fe1130dba0000000000000000000000000000000000000000000000000000000081526004016108dc92919061316c565b60405180910390fd5b6108f7836108f290613193565b611665565b915050919050565b5f60015f61090c846115ad565b81526020019081526020015f205f9054906101000a900460ff169050919050565b81602001518073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146109a45733816040517fe1130dba00000000000000000000000000000000000000000000000000000000815260040161099b92919061316c565b60405180910390fd5b6109c4838373ffffffffffffffffffffffffffffffffffffffff166119c5565b6109f18360400151845f015185602001518573ffffffffffffffffffffffffffffffffffffffff16611ce4565b505050565b6109fe612369565b60025f610a0a846115ad565b81526020019081526020015f206040518060600160405290815f82015f9054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f820160069054906101000a900465ffffffffffff1665ffffffffffff1665ffffffffffff1681526020015f8201600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815250509050919050565b5f835f016020810190610ae69190613141565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b585733816040517fe1130dba000000000000000000000000000000000000000000000000000000008152600401610b4f92919061316c565b60405180910390fd5b835f016020810190610b6a9190613141565b73ffffffffffffffffffffffffffffffffffffffff16855f016020810190610b929190613141565b73ffffffffffffffffffffffffffffffffffffffff1614610c0e57845f016020810190610bbf9190613141565b845f016020810190610bd19190613141565b6040517f4ce7715a000000000000000000000000000000000000000000000000000000008152600401610c0592919061316c565b60405180910390fd5b5f610c2185610c1c90613193565b6109f6565b9050836040016020810190610c3691906131a5565b73ffffffffffffffffffffffffffffffffffffffff16816040015173ffffffffffffffffffffffffffffffffffffffff16141580610c985750835f016020810190610c8191906131d0565b65ffffffffffff16815f015165ffffffffffff1614155b80610cc95750836020016020810190610cb191906131d0565b65ffffffffffff16816020015165ffffffffffff1614155b15610d0d5780846040517f5346b99e000000000000000000000000000000000000000000000000000000008152600401610d0492919061327f565b60405180910390fd5b610d1f85610d1a90613193565b611e17565b50610d3286610d2d90613193565b611665565b925050509392505050565b805f016020810190610d4f9190613141565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610dc15733816040517fe1130dba000000000000000000000000000000000000000000000000000000008152600401610db892919061316c565b60405180910390fd5b610dd382610dce90613193565b611e17565b505050565b5f5f610de3836115ad565b905060015f8281526020019081526020015f205f9054906101000a900460ff16158015610e2957505f5f8281526020019081526020015f205f9054906101000a900460ff165b915050919050565b5f6060805f5f5f60607f0f000000000000000000000000000000000000000000000000000000000000009650610e65611ebc565b809650819750505046935030925090919293949596565b7fa6d83a7a5ee257b2660352f4f65fa4f2cf2faf7b853236961cca1ac6020c383881565b7fc9fa0f0252014cf89ab0539e3bb3adcb76f93e6bb6494e8cc61c14e2761ee2e481565b5f5f5f610ed0846115ad565b81526020019081526020015f205f9054906101000a900460ff169050919050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dcb6cd09855f0151610f3b8761134f565b86866040518563ffffffff1660e01b8152600401610f5c94939291906132e2565b6020604051808303815f875af1158015610f78573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f9c919061334a565b610fd2576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f600190505f85608001515190505f5b8181101561116f5761115a604051806101200160405280895f015173ffffffffffffffffffffffffffffffffffffffff1681526020018960800151848151811061102f5761102e613375565b5b60200260200101515f015173ffffffffffffffffffffffffffffffffffffffff1681526020018960800151848151811061106c5761106b613375565b5b60200260200101516020015173ffffffffffffffffffffffffffffffffffffffff168152602001896080015184815181106110aa576110a9613375565b5b60200260200101516040015173ffffffffffffffffffffffffffffffffffffffff168152602001896020015165ffffffffffff168152602001896040015165ffffffffffff168152602001896060015165ffffffffffff1681526020018960800151848151811061111e5761111d613375565b5b60200260200101516060015181526020018960800151848151811061114657611145613375565b5b602002602001015160800151815250611665565b611162575f92505b8080600101915050610fe2565b5081925050509392505050565b80602001602081019061118f9190613141565b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112015733816040517fe1130dba0000000000000000000000000000000000000000000000000000000081526004016111f892919061316c565b60405180910390fd5b6112138261120e90613193565b611e17565b505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663dcb6cd09855f01602081019061128b9190613141565b61129d8761129890613193565b6115ad565b86866040518563ffffffff1660e01b81526004016112be94939291906132e2565b6020604051808303815f875af11580156112da573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112fe919061334a565b611334576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113468461134190613193565b611665565b90509392505050565b5f5f82608001515190505f8103611392576040517feca16db200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8167ffffffffffffffff8111156113ad576113ac612411565b5b6040519080825280602002602001820160405280156113db5781602001602082028036833780820191505090505b5090505f5b82811015611515577fa6d83a7a5ee257b2660352f4f65fa4f2cf2faf7b853236961cca1ac6020c3838856080015182815181106114205761141f613375565b5b60200260200101515f01518660800151838151811061144257611441613375565b5b6020026020010151602001518760800151848151811061146557611464613375565b5b6020026020010151604001518860800151858151811061148857611487613375565b5b602002602001015160600151896080015186815181106114ab576114aa613375565b5b602002602001015160800151805190602001206040516020016114d3969594939291906133b1565b604051602081830303815290604052805190602001208282815181106114fc576114fb613375565b5b60200260200101818152505080806001019150506113e0565b506115a47fe528cd8f39a864282e62a136876fbff89cfa2ebb001852b9f771aa0bc9ffc3ee855f01518660200151876040015188606001518660405160200161155e91906134c1565b60405160208183030381529060405280519060200120604051602001611589969594939291906134d7565b60405160208183030381529060405280519060200120611f16565b92505050919050565b5f61163a7fc9fa0f0252014cf89ab0539e3bb3adcb76f93e6bb6494e8cc61c14e2761ee2e4835f015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61010001518051906020012060405160200161161f9a99989796959493929190613536565b60405160208183030381529060405280519060200120611f16565b9050919050565b7fe528cd8f39a864282e62a136876fbff89cfa2ebb001852b9f771aa0bc9ffc3ee81565b5f5f73ffffffffffffffffffffffffffffffffffffffff16826040015173ffffffffffffffffffffffffffffffffffffffff16036116cf576040517fad1991f500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff16826040015173ffffffffffffffffffffffffffffffffffffffff161461178f5761174882604001517f80ac58cd00000000000000000000000000000000000000000000000000000000611f92565b1561178e5781604001516040517f712327f000000000000000000000000000000000000000000000000000000000815260040161178591906127f0565b60405180910390fd5b5b5f73ffffffffffffffffffffffffffffffffffffffff16826020015173ffffffffffffffffffffffffffffffffffffffff16036117f8576040517f1fac5b7400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826080015165ffffffffffff160361183d576040517f586e5acb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826060015173ffffffffffffffffffffffffffffffffffffffff1603611890576040517f8e01c48b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160c0015165ffffffffffff168260a0015165ffffffffffff16106118f6578160a001518260c001516040517f3a3520080000000000000000000000000000000000000000000000000000000081526004016118ed929190612feb565b60405180910390fd5b5f611900836115ad565b905060015f8281526020019081526020015f205f9054906101000a900460ff161561192e575f9150506119c0565b5f5f8281526020019081526020015f205f9054906101000a900460ff161561195a5760019150506119c0565b60015f5f8381526020019081526020015f205f6101000a81548160ff021916908315150217905550807f40a18f36db551498d122b5bfe203819b4c710502e7401e2bd6d2ccc6d2ceb558846040516119b291906136f3565b60405180910390a260019150505b919050565b5f81036119fe576040517f7c946ed700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611a0782610dd8565b611a3d576040517f282b9f9700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611a4783610583565b90505f816040015173ffffffffffffffffffffffffffffffffffffffff1683611a7091906130d5565b905073ffffffffffffffffffffffffffffffffffffffff8016811115611acd57806040517fb27ed7ef000000000000000000000000000000000000000000000000000000008152600401611ac49190613713565b60405180910390fd5b836060015173ffffffffffffffffffffffffffffffffffffffff16811115611b32578084606001516040517ffd1ebc88000000000000000000000000000000000000000000000000000000008152600401611b2992919061375c565b60405180910390fd5b5f611b3c856115ad565b905081836040019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250508260025f8381526020019081526020015f205f820151815f015f6101000a81548165ffffffffffff021916908365ffffffffffff1602179055506020820151815f0160066101000a81548165ffffffffffff021916908365ffffffffffff1602179055506040820151815f01600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550905050846020015173ffffffffffffffffffffffffffffffffffffffff16855f015173ffffffffffffffffffffffffffffffffffffffff16827fbcba65b462dfff1a0af642e2ccd28778c64fcb16da2132dabf6eee8906d6753c88604001516040518060600160405280895f015165ffffffffffff168152602001896020015165ffffffffffff1681526020018a73ffffffffffffffffffffffffffffffffffffffff16815250604051611cd5929190613783565b60405180910390a45050505050565b73eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611d6057805f81905d50611d4b83308360405180602001604052805f815250611fb6565b5f5f81905d50611d5b8282612026565b611e11565b611de383855f63095ea7b360e01b3086604051602401611d819291906137aa565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611fb6565b611e108383838773ffffffffffffffffffffffffffffffffffffffff16612043909392919063ffffffff16565b5b50505050565b5f5f611e22836115ad565b905060015f8281526020019081526020015f205f9054906101000a900460ff1615611e51576001915050611eb7565b6001805f8381526020019081526020015f205f6101000a81548160ff021916908315150217905550807fff59e520513907d7deffc74c82b5492b06b2988d7d03dacfd4995de47fe94c9584604051611ea991906136f3565b60405180910390a260019150505b919050565b6060806040518060600160405280602681526020016138ce6026913991506040518060400160405280600181526020017f310000000000000000000000000000000000000000000000000000000000000081525090509091565b5f611f1f6120c5565b15611f3357611f2c6120c9565b9050611f6f565b7f00000000000000000000000000000000000000000000000000000000000000009050611f5e612191565b15611f6e57611f6b6120c9565b90505b5b6719010000000000005f5280601a5281603a52604260182090505f603a52919050565b5f611f9c836121e9565b8015611fae5750611fad8383612235565b5b905092915050565b8373ffffffffffffffffffffffffffffffffffffffff1663b61d27f68484846040518463ffffffff1660e01b8152600401611ff393929190613809565b5f604051808303815f87803b15801561200a575f5ffd5b505af115801561201c573d5f5f3e3d5ffd5b5050505050505050565b5f385f3884865af161203f5763b12d13eb5f526004601cfd5b5050565b6120bf848573ffffffffffffffffffffffffffffffffffffffff166323b872dd86868660405160240161207893929190613845565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506122ce565b50505050565b5f90565b5f5f6120d36120c5565b15612101575f5f6120e2611ebc565b9150915081805190602001209350808051906020012092505050612148565b7f000000000000000000000000000000000000000000000000000000000000000091507f000000000000000000000000000000000000000000000000000000000000000090505b6040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f815282602082015281604082015246606082015230608082015260a081209250505090565b5f5f7f000000000000000000000000000000000000000000000000000000000000000090505f7f0000000000000000000000000000000000000000000000000000000000000000905080301482461416159250505090565b5f612214827f01ffc9a700000000000000000000000000000000000000000000000000000000612235565b801561222e575061222c8263ffffffff60e01b612235565b155b9050919050565b5f5f8260405160240161224891906138b4565b6040516020818303038152906040526301ffc9a760e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090505f5f5f60205f8551602087018a617530fa92503d91505f5190508280156122b7575060208210155b80156122c257505f81115b94505050505092915050565b5f5f60205f8451602086015f885af1806122ed576040513d5f823e3d81fd5b3d92505f519150505f8214612306576001811415612321565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561236357836040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161235a91906127f0565b60405180910390fd5b50505050565b60405180606001604052805f65ffffffffffff1681526020015f65ffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b5f819050919050565b6123bf816123ad565b82525050565b5f6040820190506123d85f8301856123b6565b6123e560208301846123b6565b9392505050565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61244782612401565b810181811067ffffffffffffffff8211171561246657612465612411565b5b80604052505050565b5f6124786123ec565b9050612484828261243e565b919050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6124b68261248d565b9050919050565b6124c6816124ac565b81146124d0575f5ffd5b50565b5f813590506124e1816124bd565b92915050565b6124f08161248d565b81146124fa575f5ffd5b50565b5f8135905061250b816124e7565b92915050565b5f65ffffffffffff82169050919050565b61252b81612511565b8114612535575f5ffd5b50565b5f8135905061254681612522565b92915050565b612555816123ad565b811461255f575f5ffd5b50565b5f813590506125708161254c565b92915050565b5f5ffd5b5f5ffd5b5f67ffffffffffffffff82111561259857612597612411565b5b6125a182612401565b9050602081019050919050565b828183375f83830152505050565b5f6125ce6125c98461257e565b61246f565b9050828152602081018484840111156125ea576125e961257a565b5b6125f58482856125ae565b509392505050565b5f82601f83011261261157612610612576565b5b81356126218482602086016125bc565b91505092915050565b5f61012082840312156126405761263f6123fd565b5b61264b61012061246f565b90505f61265a848285016124d3565b5f83015250602061266d848285016124d3565b6020830152506040612681848285016124d3565b6040830152506060612695848285016124fd565b60608301525060806126a984828501612538565b60808301525060a06126bd84828501612538565b60a08301525060c06126d184828501612538565b60c08301525060e06126e584828501612562565b60e08301525061010082013567ffffffffffffffff81111561270a57612709612489565b5b612716848285016125fd565b6101008301525092915050565b5f60208284031215612738576127376123f5565b5b5f82013567ffffffffffffffff811115612755576127546123f9565b5b6127618482850161262a565b91505092915050565b61277381612511565b82525050565b6127828161248d565b82525050565b606082015f82015161279c5f85018261276a565b5060208201516127af602085018261276a565b5060408201516127c26040850182612779565b50505050565b5f6060820190506127db5f830184612788565b92915050565b6127ea816124ac565b82525050565b5f6020820190506128035f8301846127e1565b92915050565b5f5ffd5b5f610120828403121561282357612822612809565b5b81905092915050565b5f60208284031215612841576128406123f5565b5b5f82013567ffffffffffffffff81111561285e5761285d6123f9565b5b61286a8482850161280d565b91505092915050565b5f8115159050919050565b61288781612873565b82525050565b5f6020820190506128a05f83018461287e565b92915050565b5f5f604083850312156128bc576128bb6123f5565b5b5f83013567ffffffffffffffff8111156128d9576128d86123f9565b5b6128e58582860161262a565b92505060206128f6858286016124fd565b9150509250929050565b5f6060828403121561291557612914612809565b5b81905092915050565b5f5f5f60a08486031215612935576129346123f5565b5b5f84013567ffffffffffffffff811115612952576129516123f9565b5b61295e8682870161280d565b935050602084013567ffffffffffffffff81111561297f5761297e6123f9565b5b61298b8682870161280d565b925050604061299c86828701612900565b9150509250925092565b5f7fff0000000000000000000000000000000000000000000000000000000000000082169050919050565b6129da816129a6565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f612a12826129e0565b612a1c81856129ea565b9350612a2c8185602086016129fa565b612a3581612401565b840191505092915050565b5f819050919050565b612a5281612a40565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612a8a816123ad565b82525050565b5f612a9b8383612a81565b60208301905092915050565b5f602082019050919050565b5f612abd82612a58565b612ac78185612a62565b9350612ad283612a72565b805f5b83811015612b02578151612ae98882612a90565b9750612af483612aa7565b925050600181019050612ad5565b5085935050505092915050565b5f60e082019050612b225f83018a6129d1565b8181036020830152612b348189612a08565b90508181036040830152612b488188612a08565b9050612b5760608301876123b6565b612b6460808301866127e1565b612b7160a0830185612a49565b81810360c0830152612b838184612ab3565b905098975050505050505050565b5f602082019050612ba45f830184612a49565b92915050565b5f67ffffffffffffffff821115612bc457612bc3612411565b5b602082029050602081019050919050565b5f5ffd5b5f60a08284031215612bee57612bed6123fd565b5b612bf860a061246f565b90505f612c07848285016124d3565b5f830152506020612c1a848285016124d3565b6020830152506040612c2e848285016124fd565b6040830152506060612c4284828501612562565b606083015250608082013567ffffffffffffffff811115612c6657612c65612489565b5b612c72848285016125fd565b60808301525092915050565b5f612c90612c8b84612baa565b61246f565b90508083825260208201905060208402830185811115612cb357612cb2612bd5565b5b835b81811015612cfa57803567ffffffffffffffff811115612cd857612cd7612576565b5b808601612ce58982612bd9565b85526020850194505050602081019050612cb5565b5050509392505050565b5f82601f830112612d1857612d17612576565b5b8135612d28848260208601612c7e565b91505092915050565b5f60a08284031215612d4657612d456123fd565b5b612d5060a061246f565b90505f612d5f848285016124d3565b5f830152506020612d7284828501612538565b6020830152506040612d8684828501612538565b6040830152506060612d9a84828501612538565b606083015250608082013567ffffffffffffffff811115612dbe57612dbd612489565b5b612dca84828501612d04565b60808301525092915050565b5f5ffd5b5f5f83601f840112612def57612dee612576565b5b8235905067ffffffffffffffff811115612e0c57612e0b612dd6565b5b602083019150836001820283011115612e2857612e27612bd5565b5b9250929050565b5f5f5f60408486031215612e4657612e456123f5565b5b5f84013567ffffffffffffffff811115612e6357612e626123f9565b5b612e6f86828701612d31565b935050602084013567ffffffffffffffff811115612e9057612e8f6123f9565b5b612e9c86828701612dda565b92509250509250925092565b5f819050919050565b5f612ecb612ec6612ec18461248d565b612ea8565b61248d565b9050919050565b5f612edc82612eb1565b9050919050565b5f612eed82612ed2565b9050919050565b612efd81612ee3565b82525050565b5f602082019050612f165f830184612ef4565b92915050565b5f5f5f60408486031215612f3357612f326123f5565b5b5f84013567ffffffffffffffff811115612f5057612f4f6123f9565b5b612f5c8682870161280d565b935050602084013567ffffffffffffffff811115612f7d57612f7c6123f9565b5b612f8986828701612dda565b92509250509250925092565b5f60208284031215612faa57612fa96123f5565b5b5f82013567ffffffffffffffff811115612fc757612fc66123f9565b5b612fd384828501612d31565b91505092915050565b612fe581612511565b82525050565b5f604082019050612ffe5f830185612fdc565b61300b6020830184612fdc565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61304982612511565b915061305483612511565b9250828203905065ffffffffffff81111561307257613071613012565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6130af82612511565b91506130ba83612511565b9250826130ca576130c9613078565b5b828206905092915050565b5f6130df826123ad565b91506130ea836123ad565b925082820190508082111561310257613101613012565b5b92915050565b5f61311282612511565b915061311d83612511565b9250828201905065ffffffffffff81111561313b5761313a613012565b5b92915050565b5f60208284031215613156576131556123f5565b5b5f613163848285016124d3565b91505092915050565b5f60408201905061317f5f8301856127e1565b61318c60208301846127e1565b9392505050565b5f61319e368361262a565b9050919050565b5f602082840312156131ba576131b96123f5565b5b5f6131c7848285016124fd565b91505092915050565b5f602082840312156131e5576131e46123f5565b5b5f6131f284828501612538565b91505092915050565b5f6132096020840184612538565b905092915050565b5f61321f60208401846124fd565b905092915050565b606082016132375f8301836131fb565b6132435f85018261276a565b5061325160208301836131fb565b61325e602085018261276a565b5061326c6040830183613211565b6132796040850182612779565b50505050565b5f60c0820190506132925f830185612788565b61329f6060830184613227565b9392505050565b5f82825260208201905092915050565b5f6132c183856132a6565b93506132ce8385846125ae565b6132d783612401565b840190509392505050565b5f6060820190506132f55f8301876127e1565b6133026020830186612a49565b81810360408301526133158184866132b6565b905095945050505050565b61332981612873565b8114613333575f5ffd5b50565b5f8151905061334481613320565b92915050565b5f6020828403121561335f5761335e6123f5565b5b5f61336c84828501613336565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6133ab8161248d565b82525050565b5f60c0820190506133c45f830189612a49565b6133d160208301886127e1565b6133de60408301876127e1565b6133eb60608301866133a2565b6133f860808301856123b6565b61340560a0830184612a49565b979650505050505050565b5f81519050919050565b5f81905092915050565b5f819050602082019050919050565b61343c81612a40565b82525050565b5f61344d8383613433565b60208301905092915050565b5f602082019050919050565b5f61346f82613410565b613479818561341a565b935061348483613424565b805f5b838110156134b457815161349b8882613442565b97506134a683613459565b925050600181019050613487565b5085935050505092915050565b5f6134cc8284613465565b915081905092915050565b5f60c0820190506134ea5f830189612a49565b6134f760208301886127e1565b6135046040830187612fdc565b6135116060830186612fdc565b61351e6080830185612fdc565b61352b60a0830184612a49565b979650505050505050565b5f6101408201905061354a5f83018d612a49565b613557602083018c6127e1565b613564604083018b6127e1565b613571606083018a6127e1565b61357e60808301896133a2565b61358b60a0830188612fdc565b61359860c0830187612fdc565b6135a560e0830186612fdc565b6135b36101008301856123b6565b6135c1610120830184612a49565b9b9a5050505050505050505050565b6135d9816124ac565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f613603826135df565b61360d81856135e9565b935061361d8185602086016129fa565b61362681612401565b840191505092915050565b5f61012083015f8301516136475f8601826135d0565b50602083015161365a60208601826135d0565b50604083015161366d60408601826135d0565b5060608301516136806060860182612779565b506080830151613693608086018261276a565b5060a08301516136a660a086018261276a565b5060c08301516136b960c086018261276a565b5060e08301516136cc60e0860182612a81565b506101008301518482036101008601526136e682826135f9565b9150508091505092915050565b5f6020820190508181035f83015261370b8184613631565b905092915050565b5f6020820190506137265f8301846123b6565b92915050565b5f61374661374161373c8461248d565b612ea8565b6123ad565b9050919050565b6137568161372c565b82525050565b5f60408201905061376f5f8301856123b6565b61377c602083018461374d565b9392505050565b5f6080820190506137965f8301856127e1565b6137a36020830184612788565b9392505050565b5f6040820190506137bd5f8301856127e1565b6137ca60208301846123b6565b9392505050565b5f6137db826135df565b6137e581856132a6565b93506137f58185602086016129fa565b6137fe81612401565b840191505092915050565b5f60608201905061381c5f8301866127e1565b61382960208301856123b6565b818103604083015261383b81846137d1565b9050949350505050565b5f6060820190506138585f8301866127e1565b61386560208301856127e1565b61387260408301846123b6565b949350505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6138ae8161387a565b82525050565b5f6020820190506138c75f8301846138a5565b9291505056fe4a757374616e4163636f756e74205370656e64205065726d697373696f6e204d616e61676572a2646970667358221220781f99200eb648d590543236fb8eee07a8ba3516b63ce4b064a545872f010f2d64736f6c634300081e00334a757374616e4163636f756e74205370656e64205065726d697373696f6e204d616e6167657200000000000000000000000095a9dd7f2e5a466138ddee5c18ac125e3f4bba15