secure-transac-contracts 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/build/contracts/AccessControl.json +4579 -0
  2. package/build/contracts/Context.json +356 -0
  3. package/build/contracts/CreditSystem.json +6037 -0
  4. package/build/contracts/ECDSA.json +4734 -0
  5. package/build/contracts/EIP712.json +3021 -0
  6. package/build/contracts/ERC165.json +352 -0
  7. package/build/contracts/ERC20.json +6816 -0
  8. package/build/contracts/ERC20Permit.json +2658 -0
  9. package/build/contracts/ERC721.json +12779 -0
  10. package/build/contracts/ERC721Utils.json +1058 -0
  11. package/build/contracts/Groth16Verifier.json +6298 -0
  12. package/build/contracts/Guardian.json +1116 -0
  13. package/build/contracts/IERC1155Errors.json +1687 -0
  14. package/build/contracts/IERC165.json +197 -0
  15. package/build/contracts/IERC20.json +1162 -0
  16. package/build/contracts/IERC20Errors.json +1662 -0
  17. package/build/contracts/IERC20Metadata.json +574 -0
  18. package/build/contracts/IERC20Permit.json +546 -0
  19. package/build/contracts/IERC5267.json +392 -0
  20. package/build/contracts/IERC721.json +1729 -0
  21. package/build/contracts/IERC721Errors.json +1694 -0
  22. package/build/contracts/IERC721Metadata.json +728 -0
  23. package/build/contracts/IERC721Receiver.json +296 -0
  24. package/build/contracts/IGuardian.json +215 -0
  25. package/build/contracts/ITrustRegistry.json +6767 -0
  26. package/build/contracts/IdentityVault.json +11584 -0
  27. package/build/contracts/Math.json +23115 -0
  28. package/build/contracts/MessageHashUtils.json +1668 -0
  29. package/build/contracts/Nonces.json +865 -0
  30. package/build/contracts/Ownable.json +1859 -0
  31. package/build/contracts/Panic.json +798 -0
  32. package/build/contracts/ReportingSystem.json +2787 -0
  33. package/build/contracts/SafeCast.json +21592 -0
  34. package/build/contracts/ScoringSystem.json +11245 -0
  35. package/build/contracts/SecureTransacSBT.json +18823 -0
  36. package/build/contracts/SecureTransacToken.json +19225 -0
  37. package/build/contracts/SecureVault.json +12890 -0
  38. package/build/contracts/ShortStrings.json +2852 -0
  39. package/build/contracts/SignedMath.json +1915 -0
  40. package/build/contracts/StorageSlot.json +1773 -0
  41. package/build/contracts/Strings.json +19001 -0
  42. package/build/contracts/TransactionLogger.json +5325 -0
  43. package/build/contracts/TrustDAO.json +23850 -0
  44. package/build/contracts/TrustRegistry.json +10948 -0
  45. package/build/contracts/VerificationRegistry.json +12811 -0
  46. package/build/contracts/ZKIdentityVerifier.json +13979 -0
  47. package/contracts/AccessControl.sol +34 -0
  48. package/contracts/CreditSystem.sol +48 -0
  49. package/contracts/Guardian.sol +33 -0
  50. package/contracts/IGuardian.sol +7 -0
  51. package/contracts/IdentityVault.sol +57 -0
  52. package/contracts/ReportingSystem.sol +14 -0
  53. package/contracts/ScoringSystem.sol +71 -0
  54. package/contracts/SecureTransacSBT.sol +72 -0
  55. package/contracts/SecureTransacToken.sol +20 -0
  56. package/contracts/SecureVault.sol +24 -0
  57. package/contracts/TransactionLogger.sol +12 -0
  58. package/contracts/TrustDAO.sol +158 -0
  59. package/contracts/TrustRegistry.sol +23 -0
  60. package/contracts/VerificationRegistry.sol +51 -0
  61. package/contracts/ZKIdentityVerifier.sol +38 -0
  62. package/contracts/ZKScoreVerifier.sol +175 -0
  63. package/package.json +32 -0
@@ -0,0 +1,2658 @@
1
+ {
2
+ "contractName": "ERC20Permit",
3
+ "abi": [
4
+ {
5
+ "inputs": [],
6
+ "name": "ECDSAInvalidSignature",
7
+ "type": "error"
8
+ },
9
+ {
10
+ "inputs": [
11
+ {
12
+ "internalType": "uint256",
13
+ "name": "length",
14
+ "type": "uint256"
15
+ }
16
+ ],
17
+ "name": "ECDSAInvalidSignatureLength",
18
+ "type": "error"
19
+ },
20
+ {
21
+ "inputs": [
22
+ {
23
+ "internalType": "bytes32",
24
+ "name": "s",
25
+ "type": "bytes32"
26
+ }
27
+ ],
28
+ "name": "ECDSAInvalidSignatureS",
29
+ "type": "error"
30
+ },
31
+ {
32
+ "inputs": [
33
+ {
34
+ "internalType": "address",
35
+ "name": "spender",
36
+ "type": "address"
37
+ },
38
+ {
39
+ "internalType": "uint256",
40
+ "name": "allowance",
41
+ "type": "uint256"
42
+ },
43
+ {
44
+ "internalType": "uint256",
45
+ "name": "needed",
46
+ "type": "uint256"
47
+ }
48
+ ],
49
+ "name": "ERC20InsufficientAllowance",
50
+ "type": "error"
51
+ },
52
+ {
53
+ "inputs": [
54
+ {
55
+ "internalType": "address",
56
+ "name": "sender",
57
+ "type": "address"
58
+ },
59
+ {
60
+ "internalType": "uint256",
61
+ "name": "balance",
62
+ "type": "uint256"
63
+ },
64
+ {
65
+ "internalType": "uint256",
66
+ "name": "needed",
67
+ "type": "uint256"
68
+ }
69
+ ],
70
+ "name": "ERC20InsufficientBalance",
71
+ "type": "error"
72
+ },
73
+ {
74
+ "inputs": [
75
+ {
76
+ "internalType": "address",
77
+ "name": "approver",
78
+ "type": "address"
79
+ }
80
+ ],
81
+ "name": "ERC20InvalidApprover",
82
+ "type": "error"
83
+ },
84
+ {
85
+ "inputs": [
86
+ {
87
+ "internalType": "address",
88
+ "name": "receiver",
89
+ "type": "address"
90
+ }
91
+ ],
92
+ "name": "ERC20InvalidReceiver",
93
+ "type": "error"
94
+ },
95
+ {
96
+ "inputs": [
97
+ {
98
+ "internalType": "address",
99
+ "name": "sender",
100
+ "type": "address"
101
+ }
102
+ ],
103
+ "name": "ERC20InvalidSender",
104
+ "type": "error"
105
+ },
106
+ {
107
+ "inputs": [
108
+ {
109
+ "internalType": "address",
110
+ "name": "spender",
111
+ "type": "address"
112
+ }
113
+ ],
114
+ "name": "ERC20InvalidSpender",
115
+ "type": "error"
116
+ },
117
+ {
118
+ "inputs": [
119
+ {
120
+ "internalType": "uint256",
121
+ "name": "deadline",
122
+ "type": "uint256"
123
+ }
124
+ ],
125
+ "name": "ERC2612ExpiredSignature",
126
+ "type": "error"
127
+ },
128
+ {
129
+ "inputs": [
130
+ {
131
+ "internalType": "address",
132
+ "name": "signer",
133
+ "type": "address"
134
+ },
135
+ {
136
+ "internalType": "address",
137
+ "name": "owner",
138
+ "type": "address"
139
+ }
140
+ ],
141
+ "name": "ERC2612InvalidSigner",
142
+ "type": "error"
143
+ },
144
+ {
145
+ "inputs": [
146
+ {
147
+ "internalType": "address",
148
+ "name": "account",
149
+ "type": "address"
150
+ },
151
+ {
152
+ "internalType": "uint256",
153
+ "name": "currentNonce",
154
+ "type": "uint256"
155
+ }
156
+ ],
157
+ "name": "InvalidAccountNonce",
158
+ "type": "error"
159
+ },
160
+ {
161
+ "inputs": [],
162
+ "name": "InvalidShortString",
163
+ "type": "error"
164
+ },
165
+ {
166
+ "inputs": [
167
+ {
168
+ "internalType": "string",
169
+ "name": "str",
170
+ "type": "string"
171
+ }
172
+ ],
173
+ "name": "StringTooLong",
174
+ "type": "error"
175
+ },
176
+ {
177
+ "anonymous": false,
178
+ "inputs": [
179
+ {
180
+ "indexed": true,
181
+ "internalType": "address",
182
+ "name": "owner",
183
+ "type": "address"
184
+ },
185
+ {
186
+ "indexed": true,
187
+ "internalType": "address",
188
+ "name": "spender",
189
+ "type": "address"
190
+ },
191
+ {
192
+ "indexed": false,
193
+ "internalType": "uint256",
194
+ "name": "value",
195
+ "type": "uint256"
196
+ }
197
+ ],
198
+ "name": "Approval",
199
+ "type": "event"
200
+ },
201
+ {
202
+ "anonymous": false,
203
+ "inputs": [],
204
+ "name": "EIP712DomainChanged",
205
+ "type": "event"
206
+ },
207
+ {
208
+ "anonymous": false,
209
+ "inputs": [
210
+ {
211
+ "indexed": true,
212
+ "internalType": "address",
213
+ "name": "from",
214
+ "type": "address"
215
+ },
216
+ {
217
+ "indexed": true,
218
+ "internalType": "address",
219
+ "name": "to",
220
+ "type": "address"
221
+ },
222
+ {
223
+ "indexed": false,
224
+ "internalType": "uint256",
225
+ "name": "value",
226
+ "type": "uint256"
227
+ }
228
+ ],
229
+ "name": "Transfer",
230
+ "type": "event"
231
+ },
232
+ {
233
+ "inputs": [
234
+ {
235
+ "internalType": "address",
236
+ "name": "owner",
237
+ "type": "address"
238
+ },
239
+ {
240
+ "internalType": "address",
241
+ "name": "spender",
242
+ "type": "address"
243
+ }
244
+ ],
245
+ "name": "allowance",
246
+ "outputs": [
247
+ {
248
+ "internalType": "uint256",
249
+ "name": "",
250
+ "type": "uint256"
251
+ }
252
+ ],
253
+ "stateMutability": "view",
254
+ "type": "function"
255
+ },
256
+ {
257
+ "inputs": [
258
+ {
259
+ "internalType": "address",
260
+ "name": "spender",
261
+ "type": "address"
262
+ },
263
+ {
264
+ "internalType": "uint256",
265
+ "name": "value",
266
+ "type": "uint256"
267
+ }
268
+ ],
269
+ "name": "approve",
270
+ "outputs": [
271
+ {
272
+ "internalType": "bool",
273
+ "name": "",
274
+ "type": "bool"
275
+ }
276
+ ],
277
+ "stateMutability": "nonpayable",
278
+ "type": "function"
279
+ },
280
+ {
281
+ "inputs": [
282
+ {
283
+ "internalType": "address",
284
+ "name": "account",
285
+ "type": "address"
286
+ }
287
+ ],
288
+ "name": "balanceOf",
289
+ "outputs": [
290
+ {
291
+ "internalType": "uint256",
292
+ "name": "",
293
+ "type": "uint256"
294
+ }
295
+ ],
296
+ "stateMutability": "view",
297
+ "type": "function"
298
+ },
299
+ {
300
+ "inputs": [],
301
+ "name": "decimals",
302
+ "outputs": [
303
+ {
304
+ "internalType": "uint8",
305
+ "name": "",
306
+ "type": "uint8"
307
+ }
308
+ ],
309
+ "stateMutability": "view",
310
+ "type": "function"
311
+ },
312
+ {
313
+ "inputs": [],
314
+ "name": "eip712Domain",
315
+ "outputs": [
316
+ {
317
+ "internalType": "bytes1",
318
+ "name": "fields",
319
+ "type": "bytes1"
320
+ },
321
+ {
322
+ "internalType": "string",
323
+ "name": "name",
324
+ "type": "string"
325
+ },
326
+ {
327
+ "internalType": "string",
328
+ "name": "version",
329
+ "type": "string"
330
+ },
331
+ {
332
+ "internalType": "uint256",
333
+ "name": "chainId",
334
+ "type": "uint256"
335
+ },
336
+ {
337
+ "internalType": "address",
338
+ "name": "verifyingContract",
339
+ "type": "address"
340
+ },
341
+ {
342
+ "internalType": "bytes32",
343
+ "name": "salt",
344
+ "type": "bytes32"
345
+ },
346
+ {
347
+ "internalType": "uint256[]",
348
+ "name": "extensions",
349
+ "type": "uint256[]"
350
+ }
351
+ ],
352
+ "stateMutability": "view",
353
+ "type": "function"
354
+ },
355
+ {
356
+ "inputs": [],
357
+ "name": "name",
358
+ "outputs": [
359
+ {
360
+ "internalType": "string",
361
+ "name": "",
362
+ "type": "string"
363
+ }
364
+ ],
365
+ "stateMutability": "view",
366
+ "type": "function"
367
+ },
368
+ {
369
+ "inputs": [],
370
+ "name": "symbol",
371
+ "outputs": [
372
+ {
373
+ "internalType": "string",
374
+ "name": "",
375
+ "type": "string"
376
+ }
377
+ ],
378
+ "stateMutability": "view",
379
+ "type": "function"
380
+ },
381
+ {
382
+ "inputs": [],
383
+ "name": "totalSupply",
384
+ "outputs": [
385
+ {
386
+ "internalType": "uint256",
387
+ "name": "",
388
+ "type": "uint256"
389
+ }
390
+ ],
391
+ "stateMutability": "view",
392
+ "type": "function"
393
+ },
394
+ {
395
+ "inputs": [
396
+ {
397
+ "internalType": "address",
398
+ "name": "to",
399
+ "type": "address"
400
+ },
401
+ {
402
+ "internalType": "uint256",
403
+ "name": "value",
404
+ "type": "uint256"
405
+ }
406
+ ],
407
+ "name": "transfer",
408
+ "outputs": [
409
+ {
410
+ "internalType": "bool",
411
+ "name": "",
412
+ "type": "bool"
413
+ }
414
+ ],
415
+ "stateMutability": "nonpayable",
416
+ "type": "function"
417
+ },
418
+ {
419
+ "inputs": [
420
+ {
421
+ "internalType": "address",
422
+ "name": "from",
423
+ "type": "address"
424
+ },
425
+ {
426
+ "internalType": "address",
427
+ "name": "to",
428
+ "type": "address"
429
+ },
430
+ {
431
+ "internalType": "uint256",
432
+ "name": "value",
433
+ "type": "uint256"
434
+ }
435
+ ],
436
+ "name": "transferFrom",
437
+ "outputs": [
438
+ {
439
+ "internalType": "bool",
440
+ "name": "",
441
+ "type": "bool"
442
+ }
443
+ ],
444
+ "stateMutability": "nonpayable",
445
+ "type": "function"
446
+ },
447
+ {
448
+ "inputs": [
449
+ {
450
+ "internalType": "address",
451
+ "name": "owner",
452
+ "type": "address"
453
+ },
454
+ {
455
+ "internalType": "address",
456
+ "name": "spender",
457
+ "type": "address"
458
+ },
459
+ {
460
+ "internalType": "uint256",
461
+ "name": "value",
462
+ "type": "uint256"
463
+ },
464
+ {
465
+ "internalType": "uint256",
466
+ "name": "deadline",
467
+ "type": "uint256"
468
+ },
469
+ {
470
+ "internalType": "uint8",
471
+ "name": "v",
472
+ "type": "uint8"
473
+ },
474
+ {
475
+ "internalType": "bytes32",
476
+ "name": "r",
477
+ "type": "bytes32"
478
+ },
479
+ {
480
+ "internalType": "bytes32",
481
+ "name": "s",
482
+ "type": "bytes32"
483
+ }
484
+ ],
485
+ "name": "permit",
486
+ "outputs": [],
487
+ "stateMutability": "nonpayable",
488
+ "type": "function"
489
+ },
490
+ {
491
+ "inputs": [
492
+ {
493
+ "internalType": "address",
494
+ "name": "owner",
495
+ "type": "address"
496
+ }
497
+ ],
498
+ "name": "nonces",
499
+ "outputs": [
500
+ {
501
+ "internalType": "uint256",
502
+ "name": "",
503
+ "type": "uint256"
504
+ }
505
+ ],
506
+ "stateMutability": "view",
507
+ "type": "function"
508
+ },
509
+ {
510
+ "inputs": [],
511
+ "name": "DOMAIN_SEPARATOR",
512
+ "outputs": [
513
+ {
514
+ "internalType": "bytes32",
515
+ "name": "",
516
+ "type": "bytes32"
517
+ }
518
+ ],
519
+ "stateMutability": "view",
520
+ "type": "function"
521
+ }
522
+ ],
523
+ "metadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"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\":\"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\":\"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\":[{\"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\":\"symbol\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"totalSupply\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"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\"}],\"devdoc\":{\"details\":\"Implementation of the ERC-20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[ERC-2612]. Adds the {permit} method, which can be used to change an account's ERC-20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all.\",\"errors\":{\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC2612ExpiredSignature(uint256)\":[{\"details\":\"Permit deadline has expired.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"details\":\"Mismatched signature.\"}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"allowance(address,address)\":{\"details\":\"Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"Returns the value of tokens owned by `account`.\"},\"constructor\":{\"details\":\"Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `\\\"1\\\"`. It's a good idea to use the same `name` that is defined as the ERC-20 token name.\"},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"eip712Domain()\":{\"details\":\"returns the fields and values that describe the domain separator used by this contract for EIP-712 signature.\"},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"Returns the value of tokens in existence.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol\":\"ERC20Permit\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":false,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0xfb223a85dd0b2175cfbbaa325a744e2cd74ecd17c3df2b77b0722f991d2725ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://84bf1dea0589ec49c8d15d559cc6d86ee493048a89b2d4adb60fbe705a3d89ae\",\"dweb:/ipfs/Qmd56n556d529wk2pRMhYhm5nhMDhviwereodDikjs68w1\"]},\"@openzeppelin/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x19fdfb0f3b89a230e7dbd1cf416f1a6b531a3ee5db4da483f946320fc74afc0e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3490d794728f5bfecb46820431adaff71ba374141545ec20b650bb60353fac23\",\"dweb:/ipfs/QmPsfxjVpMcZbpE7BH93DzTpEaktESigEw4SmDzkXuJ4WR\"]},\"@openzeppelin/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0x86b7b71a6aedefdad89b607378eeab1dcc5389b9ea7d17346d08af01d7190994\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1dc2db8d94a21eac8efe03adf574c419b08536409b416057a2b5b95cb772c43c\",\"dweb:/ipfs/QmZfqJCKVU1ScuX2A7s8WZdQEaikwJbDH5JBrBdKTUT4Gu\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x74ed01eb66b923d0d0cfe3be84604ac04b76482a55f9dd655e1ef4d367f95bc2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5282825a626cfe924e504274b864a652b0023591fa66f06a067b25b51ba9b303\",\"dweb:/ipfs/QmeCfPykghhMc81VJTrHTC7sF6CRvaA1FXVq2pJhwYp1dV\"]},\"@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol\":{\"keccak256\":\"0xecd08ad8132d88a5fcfd50f76a18583004fcdab4c33fb86343903ae420ca5a2b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://02422dce2e5305624e5cec644add1baa44bfa98ea131bf6030069089a2f56ca4\",\"dweb:/ipfs/QmcsSUkX7AYXNZE18LYE6JEmv8zZcCZvKfbUm9cSzNQyNo\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xd6fa4088198f04eef10c5bce8a2f4d60554b7ec4b987f684393c01bf79b94d9f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f95ee0bbd4dd3ac730d066ba3e785ded4565e890dbec2fa7d3b9fe3bad9d0d6e\",\"dweb:/ipfs/QmSLr6bHkPFWT7ntj34jmwfyskpwo97T9jZUrk5sz3sdtR\"]},\"@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x2fa0657dd7b8bc75475a47f64bc04a9adb42236b15d65e6781594ea69a46c3e4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7496f42681aed94bf0142a077324e50b86046610c1724e7c12e96cf1c365914a\",\"dweb:/ipfs/QmZvhNdSAAbN4PKPdheAqwpXukUiXp3Q3TdQccDMg2NDTV\"]},\"@openzeppelin/contracts/utils/Context.sol\":{\"keccak256\":\"0x493033a8d1b176a037b2cc6a04dad01a5c157722049bbecf632ca876224dd4b2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6a708e8a5bdb1011c2c381c9a5cfd8a9a956d7d0a9dc1bd8bcdaf52f76ef2f12\",\"dweb:/ipfs/Qmax9WHBnVsZP46ZxEMNRQpLQnrdE4dK8LehML1Py8FowF\"]},\"@openzeppelin/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"@openzeppelin/contracts/utils/Panic.sol\":{\"keccak256\":\"0xf7fe324703a64fc51702311dc51562d5cb1497734f074e4f483bfb6717572d7a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6a5ff4f9fd8649b7ee20800b7fa387d3465bd77cf20c2d1068cd5c98e1ed57a\",\"dweb:/ipfs/QmVSaVJf9FXFhdYEYeCEfjMVHrxDh5qL4CGkxdMWpQCrqG\"]},\"@openzeppelin/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x1fcf8cceb1a67e6c8512267e780933c4a3f63ef44756e6c818fda79be51c8402\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://617d7d57f6f9cd449068b4d23daf485676d083aae648e038d05eb3a13291de35\",\"dweb:/ipfs/QmPADWPiGaSzZDFNpFEUx4ZPqhzPkYncBpHyTfAGcfsqzy\"]},\"@openzeppelin/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"@openzeppelin/contracts/utils/Strings.sol\":{\"keccak256\":\"0xad148d59f05165f9217d0a9e1ac8f772abb02ea6aaad8a756315c532bf79f9f4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://15e3599867c2182f5831e9268b274b2ef2047825837df6b4d81c9e89254b093e\",\"dweb:/ipfs/QmZbL7XAYr5RmaNaooPgZRmcDXaudfsYQfYD9y5iAECvpS\"]},\"@openzeppelin/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0x69f54c02b7d81d505910ec198c11ed4c6a728418a868b906b4a0cf29946fda84\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8e25e4bdb7ae1f21d23bfee996e22736fc0ab44cfabedac82a757b1edc5623b9\",\"dweb:/ipfs/QmQdWQvB6JCP9ZMbzi8EvQ1PTETqkcTWrbcVurS7DKpa5n\"]},\"@openzeppelin/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x17fc4574e07105b0180ef61f1b3cacd1820a3d37f29a4af1018d0a253c6399b5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://be46b3e1362dbcadbbb45ec92cdea849dceccea3e2795237f00c123aeae44746\",\"dweb:/ipfs/QmSpyB8mud6xKiZaQnVtEPrxtTHGtyBgjs1PCYk4f2gesd\"]},\"@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0x26670fef37d4adf55570ba78815eec5f31cb017e708f61886add4fc4da665631\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b16d45febff462bafd8a5669f904796a835baf607df58a8461916d3bf4f08c59\",\"dweb:/ipfs/QmU2eJFpjmT4vxeJWJyLeQb8Xht1kdB8Y6MKLDPFA9WPux\"]},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x1225214420c83ebcca88f2ae2b50f053aaa7df7bd684c3e878d334627f2edfc6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6c5fab4970634f9ab9a620983dc1c8a30153981a0b1a521666e269d0a11399d3\",\"dweb:/ipfs/QmVRnBC575MESGkEHndjujtR7qub2FzU9RWy9eKLp4hPZB\"]},\"@openzeppelin/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"@openzeppelin/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0xb1970fac7b64e6c09611e6691791e848d5e3fe410fa5899e7df2e0afd77a99e3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://db5fbb3dddd8b7047465b62575d96231ba8a2774d37fb4737fbf23340fabbb03\",\"dweb:/ipfs/QmVUSvooZKEdEdap619tcJjTLcAuH6QBdZqAzWwnAXZAWJ\"]}},\"version\":1}",
524
+ "bytecode": "0x",
525
+ "deployedBytecode": "0x",
526
+ "immutableReferences": {},
527
+ "generatedSources": [],
528
+ "deployedGeneratedSources": [],
529
+ "sourceMap": "",
530
+ "deployedSourceMap": "",
531
+ "source": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v5.4.0) (token/ERC20/extensions/ERC20Permit.sol)\n\npragma solidity ^0.8.20;\n\nimport {IERC20Permit} from \"./IERC20Permit.sol\";\nimport {ERC20} from \"../ERC20.sol\";\nimport {ECDSA} from \"../../../utils/cryptography/ECDSA.sol\";\nimport {EIP712} from \"../../../utils/cryptography/EIP712.sol\";\nimport {Nonces} from \"../../../utils/Nonces.sol\";\n\n/**\n * @dev Implementation of the ERC-20 Permit extension allowing approvals to be made via signatures, as defined in\n * https://eips.ethereum.org/EIPS/eip-2612[ERC-2612].\n *\n * Adds the {permit} method, which can be used to change an account's ERC-20 allowance (see {IERC20-allowance}) by\n * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't\n * need to send a transaction, and thus is not required to hold Ether at all.\n */\nabstract contract ERC20Permit is ERC20, IERC20Permit, EIP712, Nonces {\n bytes32 private constant PERMIT_TYPEHASH =\n keccak256(\"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\");\n\n /**\n * @dev Permit deadline has expired.\n */\n error ERC2612ExpiredSignature(uint256 deadline);\n\n /**\n * @dev Mismatched signature.\n */\n error ERC2612InvalidSigner(address signer, address owner);\n\n /**\n * @dev Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `\"1\"`.\n *\n * It's a good idea to use the same `name` that is defined as the ERC-20 token name.\n */\n constructor(string memory name) EIP712(name, \"1\") {}\n\n /// @inheritdoc IERC20Permit\n function permit(\n address owner,\n address spender,\n uint256 value,\n uint256 deadline,\n uint8 v,\n bytes32 r,\n bytes32 s\n ) public virtual {\n if (block.timestamp > deadline) {\n revert ERC2612ExpiredSignature(deadline);\n }\n\n bytes32 structHash = keccak256(abi.encode(PERMIT_TYPEHASH, owner, spender, value, _useNonce(owner), deadline));\n\n bytes32 hash = _hashTypedDataV4(structHash);\n\n address signer = ECDSA.recover(hash, v, r, s);\n if (signer != owner) {\n revert ERC2612InvalidSigner(signer, owner);\n }\n\n _approve(owner, spender, value);\n }\n\n /// @inheritdoc IERC20Permit\n function nonces(address owner) public view virtual override(IERC20Permit, Nonces) returns (uint256) {\n return super.nonces(owner);\n }\n\n /// @inheritdoc IERC20Permit\n // solhint-disable-next-line func-name-mixedcase\n function DOMAIN_SEPARATOR() external view virtual returns (bytes32) {\n return _domainSeparatorV4();\n }\n}\n",
532
+ "sourcePath": "@openzeppelin\\contracts\\token\\ERC20\\extensions\\ERC20Permit.sol",
533
+ "ast": {
534
+ "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol",
535
+ "exportedSymbols": {
536
+ "ECDSA": [
537
+ 4556
538
+ ],
539
+ "EIP712": [
540
+ 4783
541
+ ],
542
+ "ERC20": [
543
+ 824
544
+ ],
545
+ "ERC20Permit": [
546
+ 1056
547
+ ],
548
+ "IERC20Permit": [
549
+ 1118
550
+ ],
551
+ "Nonces": [
552
+ 2413
553
+ ]
554
+ },
555
+ "id": 1057,
556
+ "license": "MIT",
557
+ "nodeType": "SourceUnit",
558
+ "nodes": [
559
+ {
560
+ "id": 904,
561
+ "literals": [
562
+ "solidity",
563
+ "^",
564
+ "0.8",
565
+ ".20"
566
+ ],
567
+ "nodeType": "PragmaDirective",
568
+ "src": "122:24:5"
569
+ },
570
+ {
571
+ "absolutePath": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Permit.sol",
572
+ "file": "./IERC20Permit.sol",
573
+ "id": 906,
574
+ "nameLocation": "-1:-1:-1",
575
+ "nodeType": "ImportDirective",
576
+ "scope": 1057,
577
+ "sourceUnit": 1119,
578
+ "src": "148:48:5",
579
+ "symbolAliases": [
580
+ {
581
+ "foreign": {
582
+ "id": 905,
583
+ "name": "IERC20Permit",
584
+ "nodeType": "Identifier",
585
+ "overloadedDeclarations": [],
586
+ "referencedDeclaration": 1118,
587
+ "src": "156:12:5",
588
+ "typeDescriptions": {}
589
+ },
590
+ "nameLocation": "-1:-1:-1"
591
+ }
592
+ ],
593
+ "unitAlias": ""
594
+ },
595
+ {
596
+ "absolutePath": "@openzeppelin/contracts/token/ERC20/ERC20.sol",
597
+ "file": "../ERC20.sol",
598
+ "id": 908,
599
+ "nameLocation": "-1:-1:-1",
600
+ "nodeType": "ImportDirective",
601
+ "scope": 1057,
602
+ "sourceUnit": 825,
603
+ "src": "197:35:5",
604
+ "symbolAliases": [
605
+ {
606
+ "foreign": {
607
+ "id": 907,
608
+ "name": "ERC20",
609
+ "nodeType": "Identifier",
610
+ "overloadedDeclarations": [],
611
+ "referencedDeclaration": 824,
612
+ "src": "205:5:5",
613
+ "typeDescriptions": {}
614
+ },
615
+ "nameLocation": "-1:-1:-1"
616
+ }
617
+ ],
618
+ "unitAlias": ""
619
+ },
620
+ {
621
+ "absolutePath": "@openzeppelin/contracts/utils/cryptography/ECDSA.sol",
622
+ "file": "../../../utils/cryptography/ECDSA.sol",
623
+ "id": 910,
624
+ "nameLocation": "-1:-1:-1",
625
+ "nodeType": "ImportDirective",
626
+ "scope": 1057,
627
+ "sourceUnit": 4557,
628
+ "src": "233:60:5",
629
+ "symbolAliases": [
630
+ {
631
+ "foreign": {
632
+ "id": 909,
633
+ "name": "ECDSA",
634
+ "nodeType": "Identifier",
635
+ "overloadedDeclarations": [],
636
+ "referencedDeclaration": 4556,
637
+ "src": "241:5:5",
638
+ "typeDescriptions": {}
639
+ },
640
+ "nameLocation": "-1:-1:-1"
641
+ }
642
+ ],
643
+ "unitAlias": ""
644
+ },
645
+ {
646
+ "absolutePath": "@openzeppelin/contracts/utils/cryptography/EIP712.sol",
647
+ "file": "../../../utils/cryptography/EIP712.sol",
648
+ "id": 912,
649
+ "nameLocation": "-1:-1:-1",
650
+ "nodeType": "ImportDirective",
651
+ "scope": 1057,
652
+ "sourceUnit": 4784,
653
+ "src": "294:62:5",
654
+ "symbolAliases": [
655
+ {
656
+ "foreign": {
657
+ "id": 911,
658
+ "name": "EIP712",
659
+ "nodeType": "Identifier",
660
+ "overloadedDeclarations": [],
661
+ "referencedDeclaration": 4783,
662
+ "src": "302:6:5",
663
+ "typeDescriptions": {}
664
+ },
665
+ "nameLocation": "-1:-1:-1"
666
+ }
667
+ ],
668
+ "unitAlias": ""
669
+ },
670
+ {
671
+ "absolutePath": "@openzeppelin/contracts/utils/Nonces.sol",
672
+ "file": "../../../utils/Nonces.sol",
673
+ "id": 914,
674
+ "nameLocation": "-1:-1:-1",
675
+ "nodeType": "ImportDirective",
676
+ "scope": 1057,
677
+ "sourceUnit": 2414,
678
+ "src": "357:49:5",
679
+ "symbolAliases": [
680
+ {
681
+ "foreign": {
682
+ "id": 913,
683
+ "name": "Nonces",
684
+ "nodeType": "Identifier",
685
+ "overloadedDeclarations": [],
686
+ "referencedDeclaration": 2413,
687
+ "src": "365:6:5",
688
+ "typeDescriptions": {}
689
+ },
690
+ "nameLocation": "-1:-1:-1"
691
+ }
692
+ ],
693
+ "unitAlias": ""
694
+ },
695
+ {
696
+ "abstract": true,
697
+ "baseContracts": [
698
+ {
699
+ "baseName": {
700
+ "id": 916,
701
+ "name": "ERC20",
702
+ "nameLocations": [
703
+ "931:5:5"
704
+ ],
705
+ "nodeType": "IdentifierPath",
706
+ "referencedDeclaration": 824,
707
+ "src": "931:5:5"
708
+ },
709
+ "id": 917,
710
+ "nodeType": "InheritanceSpecifier",
711
+ "src": "931:5:5"
712
+ },
713
+ {
714
+ "baseName": {
715
+ "id": 918,
716
+ "name": "IERC20Permit",
717
+ "nameLocations": [
718
+ "938:12:5"
719
+ ],
720
+ "nodeType": "IdentifierPath",
721
+ "referencedDeclaration": 1118,
722
+ "src": "938:12:5"
723
+ },
724
+ "id": 919,
725
+ "nodeType": "InheritanceSpecifier",
726
+ "src": "938:12:5"
727
+ },
728
+ {
729
+ "baseName": {
730
+ "id": 920,
731
+ "name": "EIP712",
732
+ "nameLocations": [
733
+ "952:6:5"
734
+ ],
735
+ "nodeType": "IdentifierPath",
736
+ "referencedDeclaration": 4783,
737
+ "src": "952:6:5"
738
+ },
739
+ "id": 921,
740
+ "nodeType": "InheritanceSpecifier",
741
+ "src": "952:6:5"
742
+ },
743
+ {
744
+ "baseName": {
745
+ "id": 922,
746
+ "name": "Nonces",
747
+ "nameLocations": [
748
+ "960:6:5"
749
+ ],
750
+ "nodeType": "IdentifierPath",
751
+ "referencedDeclaration": 2413,
752
+ "src": "960:6:5"
753
+ },
754
+ "id": 923,
755
+ "nodeType": "InheritanceSpecifier",
756
+ "src": "960:6:5"
757
+ }
758
+ ],
759
+ "canonicalName": "ERC20Permit",
760
+ "contractDependencies": [],
761
+ "contractKind": "contract",
762
+ "documentation": {
763
+ "id": 915,
764
+ "nodeType": "StructuredDocumentation",
765
+ "src": "408:489:5",
766
+ "text": " @dev Implementation of the ERC-20 Permit extension allowing approvals to be made via signatures, as defined in\n https://eips.ethereum.org/EIPS/eip-2612[ERC-2612].\n Adds the {permit} method, which can be used to change an account's ERC-20 allowance (see {IERC20-allowance}) by\n presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't\n need to send a transaction, and thus is not required to hold Ether at all."
767
+ },
768
+ "fullyImplemented": true,
769
+ "id": 1056,
770
+ "linearizedBaseContracts": [
771
+ 1056,
772
+ 2413,
773
+ 4783,
774
+ 172,
775
+ 1118,
776
+ 824,
777
+ 214,
778
+ 1082,
779
+ 902,
780
+ 2345
781
+ ],
782
+ "name": "ERC20Permit",
783
+ "nameLocation": "916:11:5",
784
+ "nodeType": "ContractDefinition",
785
+ "nodes": [
786
+ {
787
+ "constant": true,
788
+ "id": 928,
789
+ "mutability": "constant",
790
+ "name": "PERMIT_TYPEHASH",
791
+ "nameLocation": "998:15:5",
792
+ "nodeType": "VariableDeclaration",
793
+ "scope": 1056,
794
+ "src": "973:146:5",
795
+ "stateVariable": true,
796
+ "storageLocation": "default",
797
+ "typeDescriptions": {
798
+ "typeIdentifier": "t_bytes32",
799
+ "typeString": "bytes32"
800
+ },
801
+ "typeName": {
802
+ "id": 924,
803
+ "name": "bytes32",
804
+ "nodeType": "ElementaryTypeName",
805
+ "src": "973:7:5",
806
+ "typeDescriptions": {
807
+ "typeIdentifier": "t_bytes32",
808
+ "typeString": "bytes32"
809
+ }
810
+ },
811
+ "value": {
812
+ "arguments": [
813
+ {
814
+ "hexValue": "5065726d69742861646472657373206f776e65722c61646472657373207370656e6465722c75696e743235362076616c75652c75696e74323536206e6f6e63652c75696e7432353620646561646c696e6529",
815
+ "id": 926,
816
+ "isConstant": false,
817
+ "isLValue": false,
818
+ "isPure": true,
819
+ "kind": "string",
820
+ "lValueRequested": false,
821
+ "nodeType": "Literal",
822
+ "src": "1034:84:5",
823
+ "typeDescriptions": {
824
+ "typeIdentifier": "t_stringliteral_6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9",
825
+ "typeString": "literal_string \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\""
826
+ },
827
+ "value": "Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)"
828
+ }
829
+ ],
830
+ "expression": {
831
+ "argumentTypes": [
832
+ {
833
+ "typeIdentifier": "t_stringliteral_6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9",
834
+ "typeString": "literal_string \"Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)\""
835
+ }
836
+ ],
837
+ "id": 925,
838
+ "name": "keccak256",
839
+ "nodeType": "Identifier",
840
+ "overloadedDeclarations": [],
841
+ "referencedDeclaration": 4294967288,
842
+ "src": "1024:9:5",
843
+ "typeDescriptions": {
844
+ "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
845
+ "typeString": "function (bytes memory) pure returns (bytes32)"
846
+ }
847
+ },
848
+ "id": 927,
849
+ "isConstant": false,
850
+ "isLValue": false,
851
+ "isPure": true,
852
+ "kind": "functionCall",
853
+ "lValueRequested": false,
854
+ "nameLocations": [],
855
+ "names": [],
856
+ "nodeType": "FunctionCall",
857
+ "src": "1024:95:5",
858
+ "tryCall": false,
859
+ "typeDescriptions": {
860
+ "typeIdentifier": "t_bytes32",
861
+ "typeString": "bytes32"
862
+ }
863
+ },
864
+ "visibility": "private"
865
+ },
866
+ {
867
+ "documentation": {
868
+ "id": 929,
869
+ "nodeType": "StructuredDocumentation",
870
+ "src": "1126:52:5",
871
+ "text": " @dev Permit deadline has expired."
872
+ },
873
+ "errorSelector": "62791302",
874
+ "id": 933,
875
+ "name": "ERC2612ExpiredSignature",
876
+ "nameLocation": "1189:23:5",
877
+ "nodeType": "ErrorDefinition",
878
+ "parameters": {
879
+ "id": 932,
880
+ "nodeType": "ParameterList",
881
+ "parameters": [
882
+ {
883
+ "constant": false,
884
+ "id": 931,
885
+ "mutability": "mutable",
886
+ "name": "deadline",
887
+ "nameLocation": "1221:8:5",
888
+ "nodeType": "VariableDeclaration",
889
+ "scope": 933,
890
+ "src": "1213:16:5",
891
+ "stateVariable": false,
892
+ "storageLocation": "default",
893
+ "typeDescriptions": {
894
+ "typeIdentifier": "t_uint256",
895
+ "typeString": "uint256"
896
+ },
897
+ "typeName": {
898
+ "id": 930,
899
+ "name": "uint256",
900
+ "nodeType": "ElementaryTypeName",
901
+ "src": "1213:7:5",
902
+ "typeDescriptions": {
903
+ "typeIdentifier": "t_uint256",
904
+ "typeString": "uint256"
905
+ }
906
+ },
907
+ "visibility": "internal"
908
+ }
909
+ ],
910
+ "src": "1212:18:5"
911
+ },
912
+ "src": "1183:48:5"
913
+ },
914
+ {
915
+ "documentation": {
916
+ "id": 934,
917
+ "nodeType": "StructuredDocumentation",
918
+ "src": "1237:45:5",
919
+ "text": " @dev Mismatched signature."
920
+ },
921
+ "errorSelector": "4b800e46",
922
+ "id": 940,
923
+ "name": "ERC2612InvalidSigner",
924
+ "nameLocation": "1293:20:5",
925
+ "nodeType": "ErrorDefinition",
926
+ "parameters": {
927
+ "id": 939,
928
+ "nodeType": "ParameterList",
929
+ "parameters": [
930
+ {
931
+ "constant": false,
932
+ "id": 936,
933
+ "mutability": "mutable",
934
+ "name": "signer",
935
+ "nameLocation": "1322:6:5",
936
+ "nodeType": "VariableDeclaration",
937
+ "scope": 940,
938
+ "src": "1314:14:5",
939
+ "stateVariable": false,
940
+ "storageLocation": "default",
941
+ "typeDescriptions": {
942
+ "typeIdentifier": "t_address",
943
+ "typeString": "address"
944
+ },
945
+ "typeName": {
946
+ "id": 935,
947
+ "name": "address",
948
+ "nodeType": "ElementaryTypeName",
949
+ "src": "1314:7:5",
950
+ "stateMutability": "nonpayable",
951
+ "typeDescriptions": {
952
+ "typeIdentifier": "t_address",
953
+ "typeString": "address"
954
+ }
955
+ },
956
+ "visibility": "internal"
957
+ },
958
+ {
959
+ "constant": false,
960
+ "id": 938,
961
+ "mutability": "mutable",
962
+ "name": "owner",
963
+ "nameLocation": "1338:5:5",
964
+ "nodeType": "VariableDeclaration",
965
+ "scope": 940,
966
+ "src": "1330:13:5",
967
+ "stateVariable": false,
968
+ "storageLocation": "default",
969
+ "typeDescriptions": {
970
+ "typeIdentifier": "t_address",
971
+ "typeString": "address"
972
+ },
973
+ "typeName": {
974
+ "id": 937,
975
+ "name": "address",
976
+ "nodeType": "ElementaryTypeName",
977
+ "src": "1330:7:5",
978
+ "stateMutability": "nonpayable",
979
+ "typeDescriptions": {
980
+ "typeIdentifier": "t_address",
981
+ "typeString": "address"
982
+ }
983
+ },
984
+ "visibility": "internal"
985
+ }
986
+ ],
987
+ "src": "1313:31:5"
988
+ },
989
+ "src": "1287:58:5"
990
+ },
991
+ {
992
+ "body": {
993
+ "id": 950,
994
+ "nodeType": "Block",
995
+ "src": "1627:2:5",
996
+ "statements": []
997
+ },
998
+ "documentation": {
999
+ "id": 941,
1000
+ "nodeType": "StructuredDocumentation",
1001
+ "src": "1351:221:5",
1002
+ "text": " @dev Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `\"1\"`.\n It's a good idea to use the same `name` that is defined as the ERC-20 token name."
1003
+ },
1004
+ "id": 951,
1005
+ "implemented": true,
1006
+ "kind": "constructor",
1007
+ "modifiers": [
1008
+ {
1009
+ "arguments": [
1010
+ {
1011
+ "id": 946,
1012
+ "name": "name",
1013
+ "nodeType": "Identifier",
1014
+ "overloadedDeclarations": [],
1015
+ "referencedDeclaration": 943,
1016
+ "src": "1616:4:5",
1017
+ "typeDescriptions": {
1018
+ "typeIdentifier": "t_string_memory_ptr",
1019
+ "typeString": "string memory"
1020
+ }
1021
+ },
1022
+ {
1023
+ "hexValue": "31",
1024
+ "id": 947,
1025
+ "isConstant": false,
1026
+ "isLValue": false,
1027
+ "isPure": true,
1028
+ "kind": "string",
1029
+ "lValueRequested": false,
1030
+ "nodeType": "Literal",
1031
+ "src": "1622:3:5",
1032
+ "typeDescriptions": {
1033
+ "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6",
1034
+ "typeString": "literal_string \"1\""
1035
+ },
1036
+ "value": "1"
1037
+ }
1038
+ ],
1039
+ "id": 948,
1040
+ "kind": "baseConstructorSpecifier",
1041
+ "modifierName": {
1042
+ "id": 945,
1043
+ "name": "EIP712",
1044
+ "nameLocations": [
1045
+ "1609:6:5"
1046
+ ],
1047
+ "nodeType": "IdentifierPath",
1048
+ "referencedDeclaration": 4783,
1049
+ "src": "1609:6:5"
1050
+ },
1051
+ "nodeType": "ModifierInvocation",
1052
+ "src": "1609:17:5"
1053
+ }
1054
+ ],
1055
+ "name": "",
1056
+ "nameLocation": "-1:-1:-1",
1057
+ "nodeType": "FunctionDefinition",
1058
+ "parameters": {
1059
+ "id": 944,
1060
+ "nodeType": "ParameterList",
1061
+ "parameters": [
1062
+ {
1063
+ "constant": false,
1064
+ "id": 943,
1065
+ "mutability": "mutable",
1066
+ "name": "name",
1067
+ "nameLocation": "1603:4:5",
1068
+ "nodeType": "VariableDeclaration",
1069
+ "scope": 951,
1070
+ "src": "1589:18:5",
1071
+ "stateVariable": false,
1072
+ "storageLocation": "memory",
1073
+ "typeDescriptions": {
1074
+ "typeIdentifier": "t_string_memory_ptr",
1075
+ "typeString": "string"
1076
+ },
1077
+ "typeName": {
1078
+ "id": 942,
1079
+ "name": "string",
1080
+ "nodeType": "ElementaryTypeName",
1081
+ "src": "1589:6:5",
1082
+ "typeDescriptions": {
1083
+ "typeIdentifier": "t_string_storage_ptr",
1084
+ "typeString": "string"
1085
+ }
1086
+ },
1087
+ "visibility": "internal"
1088
+ }
1089
+ ],
1090
+ "src": "1588:20:5"
1091
+ },
1092
+ "returnParameters": {
1093
+ "id": 949,
1094
+ "nodeType": "ParameterList",
1095
+ "parameters": [],
1096
+ "src": "1627:0:5"
1097
+ },
1098
+ "scope": 1056,
1099
+ "src": "1577:52:5",
1100
+ "stateMutability": "nonpayable",
1101
+ "virtual": false,
1102
+ "visibility": "internal"
1103
+ },
1104
+ {
1105
+ "baseFunctions": [
1106
+ 1103
1107
+ ],
1108
+ "body": {
1109
+ "id": 1027,
1110
+ "nodeType": "Block",
1111
+ "src": "1857:483:5",
1112
+ "statements": [
1113
+ {
1114
+ "condition": {
1115
+ "commonType": {
1116
+ "typeIdentifier": "t_uint256",
1117
+ "typeString": "uint256"
1118
+ },
1119
+ "id": 972,
1120
+ "isConstant": false,
1121
+ "isLValue": false,
1122
+ "isPure": false,
1123
+ "lValueRequested": false,
1124
+ "leftExpression": {
1125
+ "expression": {
1126
+ "id": 969,
1127
+ "name": "block",
1128
+ "nodeType": "Identifier",
1129
+ "overloadedDeclarations": [],
1130
+ "referencedDeclaration": 4294967292,
1131
+ "src": "1871:5:5",
1132
+ "typeDescriptions": {
1133
+ "typeIdentifier": "t_magic_block",
1134
+ "typeString": "block"
1135
+ }
1136
+ },
1137
+ "id": 970,
1138
+ "isConstant": false,
1139
+ "isLValue": false,
1140
+ "isPure": false,
1141
+ "lValueRequested": false,
1142
+ "memberLocation": "1877:9:5",
1143
+ "memberName": "timestamp",
1144
+ "nodeType": "MemberAccess",
1145
+ "src": "1871:15:5",
1146
+ "typeDescriptions": {
1147
+ "typeIdentifier": "t_uint256",
1148
+ "typeString": "uint256"
1149
+ }
1150
+ },
1151
+ "nodeType": "BinaryOperation",
1152
+ "operator": ">",
1153
+ "rightExpression": {
1154
+ "id": 971,
1155
+ "name": "deadline",
1156
+ "nodeType": "Identifier",
1157
+ "overloadedDeclarations": [],
1158
+ "referencedDeclaration": 960,
1159
+ "src": "1889:8:5",
1160
+ "typeDescriptions": {
1161
+ "typeIdentifier": "t_uint256",
1162
+ "typeString": "uint256"
1163
+ }
1164
+ },
1165
+ "src": "1871:26:5",
1166
+ "typeDescriptions": {
1167
+ "typeIdentifier": "t_bool",
1168
+ "typeString": "bool"
1169
+ }
1170
+ },
1171
+ "id": 978,
1172
+ "nodeType": "IfStatement",
1173
+ "src": "1867:97:5",
1174
+ "trueBody": {
1175
+ "id": 977,
1176
+ "nodeType": "Block",
1177
+ "src": "1899:65:5",
1178
+ "statements": [
1179
+ {
1180
+ "errorCall": {
1181
+ "arguments": [
1182
+ {
1183
+ "id": 974,
1184
+ "name": "deadline",
1185
+ "nodeType": "Identifier",
1186
+ "overloadedDeclarations": [],
1187
+ "referencedDeclaration": 960,
1188
+ "src": "1944:8:5",
1189
+ "typeDescriptions": {
1190
+ "typeIdentifier": "t_uint256",
1191
+ "typeString": "uint256"
1192
+ }
1193
+ }
1194
+ ],
1195
+ "expression": {
1196
+ "argumentTypes": [
1197
+ {
1198
+ "typeIdentifier": "t_uint256",
1199
+ "typeString": "uint256"
1200
+ }
1201
+ ],
1202
+ "id": 973,
1203
+ "name": "ERC2612ExpiredSignature",
1204
+ "nodeType": "Identifier",
1205
+ "overloadedDeclarations": [],
1206
+ "referencedDeclaration": 933,
1207
+ "src": "1920:23:5",
1208
+ "typeDescriptions": {
1209
+ "typeIdentifier": "t_function_error_pure$_t_uint256_$returns$__$",
1210
+ "typeString": "function (uint256) pure"
1211
+ }
1212
+ },
1213
+ "id": 975,
1214
+ "isConstant": false,
1215
+ "isLValue": false,
1216
+ "isPure": false,
1217
+ "kind": "functionCall",
1218
+ "lValueRequested": false,
1219
+ "nameLocations": [],
1220
+ "names": [],
1221
+ "nodeType": "FunctionCall",
1222
+ "src": "1920:33:5",
1223
+ "tryCall": false,
1224
+ "typeDescriptions": {
1225
+ "typeIdentifier": "t_tuple$__$",
1226
+ "typeString": "tuple()"
1227
+ }
1228
+ },
1229
+ "id": 976,
1230
+ "nodeType": "RevertStatement",
1231
+ "src": "1913:40:5"
1232
+ }
1233
+ ]
1234
+ }
1235
+ },
1236
+ {
1237
+ "assignments": [
1238
+ 980
1239
+ ],
1240
+ "declarations": [
1241
+ {
1242
+ "constant": false,
1243
+ "id": 980,
1244
+ "mutability": "mutable",
1245
+ "name": "structHash",
1246
+ "nameLocation": "1982:10:5",
1247
+ "nodeType": "VariableDeclaration",
1248
+ "scope": 1027,
1249
+ "src": "1974:18:5",
1250
+ "stateVariable": false,
1251
+ "storageLocation": "default",
1252
+ "typeDescriptions": {
1253
+ "typeIdentifier": "t_bytes32",
1254
+ "typeString": "bytes32"
1255
+ },
1256
+ "typeName": {
1257
+ "id": 979,
1258
+ "name": "bytes32",
1259
+ "nodeType": "ElementaryTypeName",
1260
+ "src": "1974:7:5",
1261
+ "typeDescriptions": {
1262
+ "typeIdentifier": "t_bytes32",
1263
+ "typeString": "bytes32"
1264
+ }
1265
+ },
1266
+ "visibility": "internal"
1267
+ }
1268
+ ],
1269
+ "id": 994,
1270
+ "initialValue": {
1271
+ "arguments": [
1272
+ {
1273
+ "arguments": [
1274
+ {
1275
+ "id": 984,
1276
+ "name": "PERMIT_TYPEHASH",
1277
+ "nodeType": "Identifier",
1278
+ "overloadedDeclarations": [],
1279
+ "referencedDeclaration": 928,
1280
+ "src": "2016:15:5",
1281
+ "typeDescriptions": {
1282
+ "typeIdentifier": "t_bytes32",
1283
+ "typeString": "bytes32"
1284
+ }
1285
+ },
1286
+ {
1287
+ "id": 985,
1288
+ "name": "owner",
1289
+ "nodeType": "Identifier",
1290
+ "overloadedDeclarations": [],
1291
+ "referencedDeclaration": 954,
1292
+ "src": "2033:5:5",
1293
+ "typeDescriptions": {
1294
+ "typeIdentifier": "t_address",
1295
+ "typeString": "address"
1296
+ }
1297
+ },
1298
+ {
1299
+ "id": 986,
1300
+ "name": "spender",
1301
+ "nodeType": "Identifier",
1302
+ "overloadedDeclarations": [],
1303
+ "referencedDeclaration": 956,
1304
+ "src": "2040:7:5",
1305
+ "typeDescriptions": {
1306
+ "typeIdentifier": "t_address",
1307
+ "typeString": "address"
1308
+ }
1309
+ },
1310
+ {
1311
+ "id": 987,
1312
+ "name": "value",
1313
+ "nodeType": "Identifier",
1314
+ "overloadedDeclarations": [],
1315
+ "referencedDeclaration": 958,
1316
+ "src": "2049:5:5",
1317
+ "typeDescriptions": {
1318
+ "typeIdentifier": "t_uint256",
1319
+ "typeString": "uint256"
1320
+ }
1321
+ },
1322
+ {
1323
+ "arguments": [
1324
+ {
1325
+ "id": 989,
1326
+ "name": "owner",
1327
+ "nodeType": "Identifier",
1328
+ "overloadedDeclarations": [],
1329
+ "referencedDeclaration": 954,
1330
+ "src": "2066:5:5",
1331
+ "typeDescriptions": {
1332
+ "typeIdentifier": "t_address",
1333
+ "typeString": "address"
1334
+ }
1335
+ }
1336
+ ],
1337
+ "expression": {
1338
+ "argumentTypes": [
1339
+ {
1340
+ "typeIdentifier": "t_address",
1341
+ "typeString": "address"
1342
+ }
1343
+ ],
1344
+ "id": 988,
1345
+ "name": "_useNonce",
1346
+ "nodeType": "Identifier",
1347
+ "overloadedDeclarations": [],
1348
+ "referencedDeclaration": 2387,
1349
+ "src": "2056:9:5",
1350
+ "typeDescriptions": {
1351
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$_t_uint256_$",
1352
+ "typeString": "function (address) returns (uint256)"
1353
+ }
1354
+ },
1355
+ "id": 990,
1356
+ "isConstant": false,
1357
+ "isLValue": false,
1358
+ "isPure": false,
1359
+ "kind": "functionCall",
1360
+ "lValueRequested": false,
1361
+ "nameLocations": [],
1362
+ "names": [],
1363
+ "nodeType": "FunctionCall",
1364
+ "src": "2056:16:5",
1365
+ "tryCall": false,
1366
+ "typeDescriptions": {
1367
+ "typeIdentifier": "t_uint256",
1368
+ "typeString": "uint256"
1369
+ }
1370
+ },
1371
+ {
1372
+ "id": 991,
1373
+ "name": "deadline",
1374
+ "nodeType": "Identifier",
1375
+ "overloadedDeclarations": [],
1376
+ "referencedDeclaration": 960,
1377
+ "src": "2074:8:5",
1378
+ "typeDescriptions": {
1379
+ "typeIdentifier": "t_uint256",
1380
+ "typeString": "uint256"
1381
+ }
1382
+ }
1383
+ ],
1384
+ "expression": {
1385
+ "argumentTypes": [
1386
+ {
1387
+ "typeIdentifier": "t_bytes32",
1388
+ "typeString": "bytes32"
1389
+ },
1390
+ {
1391
+ "typeIdentifier": "t_address",
1392
+ "typeString": "address"
1393
+ },
1394
+ {
1395
+ "typeIdentifier": "t_address",
1396
+ "typeString": "address"
1397
+ },
1398
+ {
1399
+ "typeIdentifier": "t_uint256",
1400
+ "typeString": "uint256"
1401
+ },
1402
+ {
1403
+ "typeIdentifier": "t_uint256",
1404
+ "typeString": "uint256"
1405
+ },
1406
+ {
1407
+ "typeIdentifier": "t_uint256",
1408
+ "typeString": "uint256"
1409
+ }
1410
+ ],
1411
+ "expression": {
1412
+ "id": 982,
1413
+ "name": "abi",
1414
+ "nodeType": "Identifier",
1415
+ "overloadedDeclarations": [],
1416
+ "referencedDeclaration": 4294967295,
1417
+ "src": "2005:3:5",
1418
+ "typeDescriptions": {
1419
+ "typeIdentifier": "t_magic_abi",
1420
+ "typeString": "abi"
1421
+ }
1422
+ },
1423
+ "id": 983,
1424
+ "isConstant": false,
1425
+ "isLValue": false,
1426
+ "isPure": true,
1427
+ "lValueRequested": false,
1428
+ "memberLocation": "2009:6:5",
1429
+ "memberName": "encode",
1430
+ "nodeType": "MemberAccess",
1431
+ "src": "2005:10:5",
1432
+ "typeDescriptions": {
1433
+ "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$",
1434
+ "typeString": "function () pure returns (bytes memory)"
1435
+ }
1436
+ },
1437
+ "id": 992,
1438
+ "isConstant": false,
1439
+ "isLValue": false,
1440
+ "isPure": false,
1441
+ "kind": "functionCall",
1442
+ "lValueRequested": false,
1443
+ "nameLocations": [],
1444
+ "names": [],
1445
+ "nodeType": "FunctionCall",
1446
+ "src": "2005:78:5",
1447
+ "tryCall": false,
1448
+ "typeDescriptions": {
1449
+ "typeIdentifier": "t_bytes_memory_ptr",
1450
+ "typeString": "bytes memory"
1451
+ }
1452
+ }
1453
+ ],
1454
+ "expression": {
1455
+ "argumentTypes": [
1456
+ {
1457
+ "typeIdentifier": "t_bytes_memory_ptr",
1458
+ "typeString": "bytes memory"
1459
+ }
1460
+ ],
1461
+ "id": 981,
1462
+ "name": "keccak256",
1463
+ "nodeType": "Identifier",
1464
+ "overloadedDeclarations": [],
1465
+ "referencedDeclaration": 4294967288,
1466
+ "src": "1995:9:5",
1467
+ "typeDescriptions": {
1468
+ "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
1469
+ "typeString": "function (bytes memory) pure returns (bytes32)"
1470
+ }
1471
+ },
1472
+ "id": 993,
1473
+ "isConstant": false,
1474
+ "isLValue": false,
1475
+ "isPure": false,
1476
+ "kind": "functionCall",
1477
+ "lValueRequested": false,
1478
+ "nameLocations": [],
1479
+ "names": [],
1480
+ "nodeType": "FunctionCall",
1481
+ "src": "1995:89:5",
1482
+ "tryCall": false,
1483
+ "typeDescriptions": {
1484
+ "typeIdentifier": "t_bytes32",
1485
+ "typeString": "bytes32"
1486
+ }
1487
+ },
1488
+ "nodeType": "VariableDeclarationStatement",
1489
+ "src": "1974:110:5"
1490
+ },
1491
+ {
1492
+ "assignments": [
1493
+ 996
1494
+ ],
1495
+ "declarations": [
1496
+ {
1497
+ "constant": false,
1498
+ "id": 996,
1499
+ "mutability": "mutable",
1500
+ "name": "hash",
1501
+ "nameLocation": "2103:4:5",
1502
+ "nodeType": "VariableDeclaration",
1503
+ "scope": 1027,
1504
+ "src": "2095:12:5",
1505
+ "stateVariable": false,
1506
+ "storageLocation": "default",
1507
+ "typeDescriptions": {
1508
+ "typeIdentifier": "t_bytes32",
1509
+ "typeString": "bytes32"
1510
+ },
1511
+ "typeName": {
1512
+ "id": 995,
1513
+ "name": "bytes32",
1514
+ "nodeType": "ElementaryTypeName",
1515
+ "src": "2095:7:5",
1516
+ "typeDescriptions": {
1517
+ "typeIdentifier": "t_bytes32",
1518
+ "typeString": "bytes32"
1519
+ }
1520
+ },
1521
+ "visibility": "internal"
1522
+ }
1523
+ ],
1524
+ "id": 1000,
1525
+ "initialValue": {
1526
+ "arguments": [
1527
+ {
1528
+ "id": 998,
1529
+ "name": "structHash",
1530
+ "nodeType": "Identifier",
1531
+ "overloadedDeclarations": [],
1532
+ "referencedDeclaration": 980,
1533
+ "src": "2127:10:5",
1534
+ "typeDescriptions": {
1535
+ "typeIdentifier": "t_bytes32",
1536
+ "typeString": "bytes32"
1537
+ }
1538
+ }
1539
+ ],
1540
+ "expression": {
1541
+ "argumentTypes": [
1542
+ {
1543
+ "typeIdentifier": "t_bytes32",
1544
+ "typeString": "bytes32"
1545
+ }
1546
+ ],
1547
+ "id": 997,
1548
+ "name": "_hashTypedDataV4",
1549
+ "nodeType": "Identifier",
1550
+ "overloadedDeclarations": [],
1551
+ "referencedDeclaration": 4716,
1552
+ "src": "2110:16:5",
1553
+ "typeDescriptions": {
1554
+ "typeIdentifier": "t_function_internal_view$_t_bytes32_$returns$_t_bytes32_$",
1555
+ "typeString": "function (bytes32) view returns (bytes32)"
1556
+ }
1557
+ },
1558
+ "id": 999,
1559
+ "isConstant": false,
1560
+ "isLValue": false,
1561
+ "isPure": false,
1562
+ "kind": "functionCall",
1563
+ "lValueRequested": false,
1564
+ "nameLocations": [],
1565
+ "names": [],
1566
+ "nodeType": "FunctionCall",
1567
+ "src": "2110:28:5",
1568
+ "tryCall": false,
1569
+ "typeDescriptions": {
1570
+ "typeIdentifier": "t_bytes32",
1571
+ "typeString": "bytes32"
1572
+ }
1573
+ },
1574
+ "nodeType": "VariableDeclarationStatement",
1575
+ "src": "2095:43:5"
1576
+ },
1577
+ {
1578
+ "assignments": [
1579
+ 1002
1580
+ ],
1581
+ "declarations": [
1582
+ {
1583
+ "constant": false,
1584
+ "id": 1002,
1585
+ "mutability": "mutable",
1586
+ "name": "signer",
1587
+ "nameLocation": "2157:6:5",
1588
+ "nodeType": "VariableDeclaration",
1589
+ "scope": 1027,
1590
+ "src": "2149:14:5",
1591
+ "stateVariable": false,
1592
+ "storageLocation": "default",
1593
+ "typeDescriptions": {
1594
+ "typeIdentifier": "t_address",
1595
+ "typeString": "address"
1596
+ },
1597
+ "typeName": {
1598
+ "id": 1001,
1599
+ "name": "address",
1600
+ "nodeType": "ElementaryTypeName",
1601
+ "src": "2149:7:5",
1602
+ "stateMutability": "nonpayable",
1603
+ "typeDescriptions": {
1604
+ "typeIdentifier": "t_address",
1605
+ "typeString": "address"
1606
+ }
1607
+ },
1608
+ "visibility": "internal"
1609
+ }
1610
+ ],
1611
+ "id": 1010,
1612
+ "initialValue": {
1613
+ "arguments": [
1614
+ {
1615
+ "id": 1005,
1616
+ "name": "hash",
1617
+ "nodeType": "Identifier",
1618
+ "overloadedDeclarations": [],
1619
+ "referencedDeclaration": 996,
1620
+ "src": "2180:4:5",
1621
+ "typeDescriptions": {
1622
+ "typeIdentifier": "t_bytes32",
1623
+ "typeString": "bytes32"
1624
+ }
1625
+ },
1626
+ {
1627
+ "id": 1006,
1628
+ "name": "v",
1629
+ "nodeType": "Identifier",
1630
+ "overloadedDeclarations": [],
1631
+ "referencedDeclaration": 962,
1632
+ "src": "2186:1:5",
1633
+ "typeDescriptions": {
1634
+ "typeIdentifier": "t_uint8",
1635
+ "typeString": "uint8"
1636
+ }
1637
+ },
1638
+ {
1639
+ "id": 1007,
1640
+ "name": "r",
1641
+ "nodeType": "Identifier",
1642
+ "overloadedDeclarations": [],
1643
+ "referencedDeclaration": 964,
1644
+ "src": "2189:1:5",
1645
+ "typeDescriptions": {
1646
+ "typeIdentifier": "t_bytes32",
1647
+ "typeString": "bytes32"
1648
+ }
1649
+ },
1650
+ {
1651
+ "id": 1008,
1652
+ "name": "s",
1653
+ "nodeType": "Identifier",
1654
+ "overloadedDeclarations": [],
1655
+ "referencedDeclaration": 966,
1656
+ "src": "2192:1:5",
1657
+ "typeDescriptions": {
1658
+ "typeIdentifier": "t_bytes32",
1659
+ "typeString": "bytes32"
1660
+ }
1661
+ }
1662
+ ],
1663
+ "expression": {
1664
+ "argumentTypes": [
1665
+ {
1666
+ "typeIdentifier": "t_bytes32",
1667
+ "typeString": "bytes32"
1668
+ },
1669
+ {
1670
+ "typeIdentifier": "t_uint8",
1671
+ "typeString": "uint8"
1672
+ },
1673
+ {
1674
+ "typeIdentifier": "t_bytes32",
1675
+ "typeString": "bytes32"
1676
+ },
1677
+ {
1678
+ "typeIdentifier": "t_bytes32",
1679
+ "typeString": "bytes32"
1680
+ }
1681
+ ],
1682
+ "expression": {
1683
+ "id": 1003,
1684
+ "name": "ECDSA",
1685
+ "nodeType": "Identifier",
1686
+ "overloadedDeclarations": [],
1687
+ "referencedDeclaration": 4556,
1688
+ "src": "2166:5:5",
1689
+ "typeDescriptions": {
1690
+ "typeIdentifier": "t_type$_t_contract$_ECDSA_$4556_$",
1691
+ "typeString": "type(library ECDSA)"
1692
+ }
1693
+ },
1694
+ "id": 1004,
1695
+ "isConstant": false,
1696
+ "isLValue": false,
1697
+ "isPure": false,
1698
+ "lValueRequested": false,
1699
+ "memberLocation": "2172:7:5",
1700
+ "memberName": "recover",
1701
+ "nodeType": "MemberAccess",
1702
+ "referencedDeclaration": 4506,
1703
+ "src": "2166:13:5",
1704
+ "typeDescriptions": {
1705
+ "typeIdentifier": "t_function_internal_pure$_t_bytes32_$_t_uint8_$_t_bytes32_$_t_bytes32_$returns$_t_address_$",
1706
+ "typeString": "function (bytes32,uint8,bytes32,bytes32) pure returns (address)"
1707
+ }
1708
+ },
1709
+ "id": 1009,
1710
+ "isConstant": false,
1711
+ "isLValue": false,
1712
+ "isPure": false,
1713
+ "kind": "functionCall",
1714
+ "lValueRequested": false,
1715
+ "nameLocations": [],
1716
+ "names": [],
1717
+ "nodeType": "FunctionCall",
1718
+ "src": "2166:28:5",
1719
+ "tryCall": false,
1720
+ "typeDescriptions": {
1721
+ "typeIdentifier": "t_address",
1722
+ "typeString": "address"
1723
+ }
1724
+ },
1725
+ "nodeType": "VariableDeclarationStatement",
1726
+ "src": "2149:45:5"
1727
+ },
1728
+ {
1729
+ "condition": {
1730
+ "commonType": {
1731
+ "typeIdentifier": "t_address",
1732
+ "typeString": "address"
1733
+ },
1734
+ "id": 1013,
1735
+ "isConstant": false,
1736
+ "isLValue": false,
1737
+ "isPure": false,
1738
+ "lValueRequested": false,
1739
+ "leftExpression": {
1740
+ "id": 1011,
1741
+ "name": "signer",
1742
+ "nodeType": "Identifier",
1743
+ "overloadedDeclarations": [],
1744
+ "referencedDeclaration": 1002,
1745
+ "src": "2208:6:5",
1746
+ "typeDescriptions": {
1747
+ "typeIdentifier": "t_address",
1748
+ "typeString": "address"
1749
+ }
1750
+ },
1751
+ "nodeType": "BinaryOperation",
1752
+ "operator": "!=",
1753
+ "rightExpression": {
1754
+ "id": 1012,
1755
+ "name": "owner",
1756
+ "nodeType": "Identifier",
1757
+ "overloadedDeclarations": [],
1758
+ "referencedDeclaration": 954,
1759
+ "src": "2218:5:5",
1760
+ "typeDescriptions": {
1761
+ "typeIdentifier": "t_address",
1762
+ "typeString": "address"
1763
+ }
1764
+ },
1765
+ "src": "2208:15:5",
1766
+ "typeDescriptions": {
1767
+ "typeIdentifier": "t_bool",
1768
+ "typeString": "bool"
1769
+ }
1770
+ },
1771
+ "id": 1020,
1772
+ "nodeType": "IfStatement",
1773
+ "src": "2204:88:5",
1774
+ "trueBody": {
1775
+ "id": 1019,
1776
+ "nodeType": "Block",
1777
+ "src": "2225:67:5",
1778
+ "statements": [
1779
+ {
1780
+ "errorCall": {
1781
+ "arguments": [
1782
+ {
1783
+ "id": 1015,
1784
+ "name": "signer",
1785
+ "nodeType": "Identifier",
1786
+ "overloadedDeclarations": [],
1787
+ "referencedDeclaration": 1002,
1788
+ "src": "2267:6:5",
1789
+ "typeDescriptions": {
1790
+ "typeIdentifier": "t_address",
1791
+ "typeString": "address"
1792
+ }
1793
+ },
1794
+ {
1795
+ "id": 1016,
1796
+ "name": "owner",
1797
+ "nodeType": "Identifier",
1798
+ "overloadedDeclarations": [],
1799
+ "referencedDeclaration": 954,
1800
+ "src": "2275:5:5",
1801
+ "typeDescriptions": {
1802
+ "typeIdentifier": "t_address",
1803
+ "typeString": "address"
1804
+ }
1805
+ }
1806
+ ],
1807
+ "expression": {
1808
+ "argumentTypes": [
1809
+ {
1810
+ "typeIdentifier": "t_address",
1811
+ "typeString": "address"
1812
+ },
1813
+ {
1814
+ "typeIdentifier": "t_address",
1815
+ "typeString": "address"
1816
+ }
1817
+ ],
1818
+ "id": 1014,
1819
+ "name": "ERC2612InvalidSigner",
1820
+ "nodeType": "Identifier",
1821
+ "overloadedDeclarations": [],
1822
+ "referencedDeclaration": 940,
1823
+ "src": "2246:20:5",
1824
+ "typeDescriptions": {
1825
+ "typeIdentifier": "t_function_error_pure$_t_address_$_t_address_$returns$__$",
1826
+ "typeString": "function (address,address) pure"
1827
+ }
1828
+ },
1829
+ "id": 1017,
1830
+ "isConstant": false,
1831
+ "isLValue": false,
1832
+ "isPure": false,
1833
+ "kind": "functionCall",
1834
+ "lValueRequested": false,
1835
+ "nameLocations": [],
1836
+ "names": [],
1837
+ "nodeType": "FunctionCall",
1838
+ "src": "2246:35:5",
1839
+ "tryCall": false,
1840
+ "typeDescriptions": {
1841
+ "typeIdentifier": "t_tuple$__$",
1842
+ "typeString": "tuple()"
1843
+ }
1844
+ },
1845
+ "id": 1018,
1846
+ "nodeType": "RevertStatement",
1847
+ "src": "2239:42:5"
1848
+ }
1849
+ ]
1850
+ }
1851
+ },
1852
+ {
1853
+ "expression": {
1854
+ "arguments": [
1855
+ {
1856
+ "id": 1022,
1857
+ "name": "owner",
1858
+ "nodeType": "Identifier",
1859
+ "overloadedDeclarations": [],
1860
+ "referencedDeclaration": 954,
1861
+ "src": "2311:5:5",
1862
+ "typeDescriptions": {
1863
+ "typeIdentifier": "t_address",
1864
+ "typeString": "address"
1865
+ }
1866
+ },
1867
+ {
1868
+ "id": 1023,
1869
+ "name": "spender",
1870
+ "nodeType": "Identifier",
1871
+ "overloadedDeclarations": [],
1872
+ "referencedDeclaration": 956,
1873
+ "src": "2318:7:5",
1874
+ "typeDescriptions": {
1875
+ "typeIdentifier": "t_address",
1876
+ "typeString": "address"
1877
+ }
1878
+ },
1879
+ {
1880
+ "id": 1024,
1881
+ "name": "value",
1882
+ "nodeType": "Identifier",
1883
+ "overloadedDeclarations": [],
1884
+ "referencedDeclaration": 958,
1885
+ "src": "2327:5:5",
1886
+ "typeDescriptions": {
1887
+ "typeIdentifier": "t_uint256",
1888
+ "typeString": "uint256"
1889
+ }
1890
+ }
1891
+ ],
1892
+ "expression": {
1893
+ "argumentTypes": [
1894
+ {
1895
+ "typeIdentifier": "t_address",
1896
+ "typeString": "address"
1897
+ },
1898
+ {
1899
+ "typeIdentifier": "t_address",
1900
+ "typeString": "address"
1901
+ },
1902
+ {
1903
+ "typeIdentifier": "t_uint256",
1904
+ "typeString": "uint256"
1905
+ }
1906
+ ],
1907
+ "id": 1021,
1908
+ "name": "_approve",
1909
+ "nodeType": "Identifier",
1910
+ "overloadedDeclarations": [
1911
+ 715,
1912
+ 775
1913
+ ],
1914
+ "referencedDeclaration": 715,
1915
+ "src": "2302:8:5",
1916
+ "typeDescriptions": {
1917
+ "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
1918
+ "typeString": "function (address,address,uint256)"
1919
+ }
1920
+ },
1921
+ "id": 1025,
1922
+ "isConstant": false,
1923
+ "isLValue": false,
1924
+ "isPure": false,
1925
+ "kind": "functionCall",
1926
+ "lValueRequested": false,
1927
+ "nameLocations": [],
1928
+ "names": [],
1929
+ "nodeType": "FunctionCall",
1930
+ "src": "2302:31:5",
1931
+ "tryCall": false,
1932
+ "typeDescriptions": {
1933
+ "typeIdentifier": "t_tuple$__$",
1934
+ "typeString": "tuple()"
1935
+ }
1936
+ },
1937
+ "id": 1026,
1938
+ "nodeType": "ExpressionStatement",
1939
+ "src": "2302:31:5"
1940
+ }
1941
+ ]
1942
+ },
1943
+ "documentation": {
1944
+ "id": 952,
1945
+ "nodeType": "StructuredDocumentation",
1946
+ "src": "1635:28:5",
1947
+ "text": "@inheritdoc IERC20Permit"
1948
+ },
1949
+ "functionSelector": "d505accf",
1950
+ "id": 1028,
1951
+ "implemented": true,
1952
+ "kind": "function",
1953
+ "modifiers": [],
1954
+ "name": "permit",
1955
+ "nameLocation": "1677:6:5",
1956
+ "nodeType": "FunctionDefinition",
1957
+ "parameters": {
1958
+ "id": 967,
1959
+ "nodeType": "ParameterList",
1960
+ "parameters": [
1961
+ {
1962
+ "constant": false,
1963
+ "id": 954,
1964
+ "mutability": "mutable",
1965
+ "name": "owner",
1966
+ "nameLocation": "1701:5:5",
1967
+ "nodeType": "VariableDeclaration",
1968
+ "scope": 1028,
1969
+ "src": "1693:13:5",
1970
+ "stateVariable": false,
1971
+ "storageLocation": "default",
1972
+ "typeDescriptions": {
1973
+ "typeIdentifier": "t_address",
1974
+ "typeString": "address"
1975
+ },
1976
+ "typeName": {
1977
+ "id": 953,
1978
+ "name": "address",
1979
+ "nodeType": "ElementaryTypeName",
1980
+ "src": "1693:7:5",
1981
+ "stateMutability": "nonpayable",
1982
+ "typeDescriptions": {
1983
+ "typeIdentifier": "t_address",
1984
+ "typeString": "address"
1985
+ }
1986
+ },
1987
+ "visibility": "internal"
1988
+ },
1989
+ {
1990
+ "constant": false,
1991
+ "id": 956,
1992
+ "mutability": "mutable",
1993
+ "name": "spender",
1994
+ "nameLocation": "1724:7:5",
1995
+ "nodeType": "VariableDeclaration",
1996
+ "scope": 1028,
1997
+ "src": "1716:15:5",
1998
+ "stateVariable": false,
1999
+ "storageLocation": "default",
2000
+ "typeDescriptions": {
2001
+ "typeIdentifier": "t_address",
2002
+ "typeString": "address"
2003
+ },
2004
+ "typeName": {
2005
+ "id": 955,
2006
+ "name": "address",
2007
+ "nodeType": "ElementaryTypeName",
2008
+ "src": "1716:7:5",
2009
+ "stateMutability": "nonpayable",
2010
+ "typeDescriptions": {
2011
+ "typeIdentifier": "t_address",
2012
+ "typeString": "address"
2013
+ }
2014
+ },
2015
+ "visibility": "internal"
2016
+ },
2017
+ {
2018
+ "constant": false,
2019
+ "id": 958,
2020
+ "mutability": "mutable",
2021
+ "name": "value",
2022
+ "nameLocation": "1749:5:5",
2023
+ "nodeType": "VariableDeclaration",
2024
+ "scope": 1028,
2025
+ "src": "1741:13:5",
2026
+ "stateVariable": false,
2027
+ "storageLocation": "default",
2028
+ "typeDescriptions": {
2029
+ "typeIdentifier": "t_uint256",
2030
+ "typeString": "uint256"
2031
+ },
2032
+ "typeName": {
2033
+ "id": 957,
2034
+ "name": "uint256",
2035
+ "nodeType": "ElementaryTypeName",
2036
+ "src": "1741:7:5",
2037
+ "typeDescriptions": {
2038
+ "typeIdentifier": "t_uint256",
2039
+ "typeString": "uint256"
2040
+ }
2041
+ },
2042
+ "visibility": "internal"
2043
+ },
2044
+ {
2045
+ "constant": false,
2046
+ "id": 960,
2047
+ "mutability": "mutable",
2048
+ "name": "deadline",
2049
+ "nameLocation": "1772:8:5",
2050
+ "nodeType": "VariableDeclaration",
2051
+ "scope": 1028,
2052
+ "src": "1764:16:5",
2053
+ "stateVariable": false,
2054
+ "storageLocation": "default",
2055
+ "typeDescriptions": {
2056
+ "typeIdentifier": "t_uint256",
2057
+ "typeString": "uint256"
2058
+ },
2059
+ "typeName": {
2060
+ "id": 959,
2061
+ "name": "uint256",
2062
+ "nodeType": "ElementaryTypeName",
2063
+ "src": "1764:7:5",
2064
+ "typeDescriptions": {
2065
+ "typeIdentifier": "t_uint256",
2066
+ "typeString": "uint256"
2067
+ }
2068
+ },
2069
+ "visibility": "internal"
2070
+ },
2071
+ {
2072
+ "constant": false,
2073
+ "id": 962,
2074
+ "mutability": "mutable",
2075
+ "name": "v",
2076
+ "nameLocation": "1796:1:5",
2077
+ "nodeType": "VariableDeclaration",
2078
+ "scope": 1028,
2079
+ "src": "1790:7:5",
2080
+ "stateVariable": false,
2081
+ "storageLocation": "default",
2082
+ "typeDescriptions": {
2083
+ "typeIdentifier": "t_uint8",
2084
+ "typeString": "uint8"
2085
+ },
2086
+ "typeName": {
2087
+ "id": 961,
2088
+ "name": "uint8",
2089
+ "nodeType": "ElementaryTypeName",
2090
+ "src": "1790:5:5",
2091
+ "typeDescriptions": {
2092
+ "typeIdentifier": "t_uint8",
2093
+ "typeString": "uint8"
2094
+ }
2095
+ },
2096
+ "visibility": "internal"
2097
+ },
2098
+ {
2099
+ "constant": false,
2100
+ "id": 964,
2101
+ "mutability": "mutable",
2102
+ "name": "r",
2103
+ "nameLocation": "1815:1:5",
2104
+ "nodeType": "VariableDeclaration",
2105
+ "scope": 1028,
2106
+ "src": "1807:9:5",
2107
+ "stateVariable": false,
2108
+ "storageLocation": "default",
2109
+ "typeDescriptions": {
2110
+ "typeIdentifier": "t_bytes32",
2111
+ "typeString": "bytes32"
2112
+ },
2113
+ "typeName": {
2114
+ "id": 963,
2115
+ "name": "bytes32",
2116
+ "nodeType": "ElementaryTypeName",
2117
+ "src": "1807:7:5",
2118
+ "typeDescriptions": {
2119
+ "typeIdentifier": "t_bytes32",
2120
+ "typeString": "bytes32"
2121
+ }
2122
+ },
2123
+ "visibility": "internal"
2124
+ },
2125
+ {
2126
+ "constant": false,
2127
+ "id": 966,
2128
+ "mutability": "mutable",
2129
+ "name": "s",
2130
+ "nameLocation": "1834:1:5",
2131
+ "nodeType": "VariableDeclaration",
2132
+ "scope": 1028,
2133
+ "src": "1826:9:5",
2134
+ "stateVariable": false,
2135
+ "storageLocation": "default",
2136
+ "typeDescriptions": {
2137
+ "typeIdentifier": "t_bytes32",
2138
+ "typeString": "bytes32"
2139
+ },
2140
+ "typeName": {
2141
+ "id": 965,
2142
+ "name": "bytes32",
2143
+ "nodeType": "ElementaryTypeName",
2144
+ "src": "1826:7:5",
2145
+ "typeDescriptions": {
2146
+ "typeIdentifier": "t_bytes32",
2147
+ "typeString": "bytes32"
2148
+ }
2149
+ },
2150
+ "visibility": "internal"
2151
+ }
2152
+ ],
2153
+ "src": "1683:158:5"
2154
+ },
2155
+ "returnParameters": {
2156
+ "id": 968,
2157
+ "nodeType": "ParameterList",
2158
+ "parameters": [],
2159
+ "src": "1857:0:5"
2160
+ },
2161
+ "scope": 1056,
2162
+ "src": "1668:672:5",
2163
+ "stateMutability": "nonpayable",
2164
+ "virtual": true,
2165
+ "visibility": "public"
2166
+ },
2167
+ {
2168
+ "baseFunctions": [
2169
+ 1111,
2170
+ 2372
2171
+ ],
2172
+ "body": {
2173
+ "id": 1044,
2174
+ "nodeType": "Block",
2175
+ "src": "2479:43:5",
2176
+ "statements": [
2177
+ {
2178
+ "expression": {
2179
+ "arguments": [
2180
+ {
2181
+ "id": 1041,
2182
+ "name": "owner",
2183
+ "nodeType": "Identifier",
2184
+ "overloadedDeclarations": [],
2185
+ "referencedDeclaration": 1031,
2186
+ "src": "2509:5:5",
2187
+ "typeDescriptions": {
2188
+ "typeIdentifier": "t_address",
2189
+ "typeString": "address"
2190
+ }
2191
+ }
2192
+ ],
2193
+ "expression": {
2194
+ "argumentTypes": [
2195
+ {
2196
+ "typeIdentifier": "t_address",
2197
+ "typeString": "address"
2198
+ }
2199
+ ],
2200
+ "expression": {
2201
+ "id": 1039,
2202
+ "name": "super",
2203
+ "nodeType": "Identifier",
2204
+ "overloadedDeclarations": [],
2205
+ "referencedDeclaration": 4294967271,
2206
+ "src": "2496:5:5",
2207
+ "typeDescriptions": {
2208
+ "typeIdentifier": "t_type$_t_super$_ERC20Permit_$1056_$",
2209
+ "typeString": "type(contract super ERC20Permit)"
2210
+ }
2211
+ },
2212
+ "id": 1040,
2213
+ "isConstant": false,
2214
+ "isLValue": false,
2215
+ "isPure": false,
2216
+ "lValueRequested": false,
2217
+ "memberLocation": "2502:6:5",
2218
+ "memberName": "nonces",
2219
+ "nodeType": "MemberAccess",
2220
+ "referencedDeclaration": 2372,
2221
+ "src": "2496:12:5",
2222
+ "typeDescriptions": {
2223
+ "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_uint256_$",
2224
+ "typeString": "function (address) view returns (uint256)"
2225
+ }
2226
+ },
2227
+ "id": 1042,
2228
+ "isConstant": false,
2229
+ "isLValue": false,
2230
+ "isPure": false,
2231
+ "kind": "functionCall",
2232
+ "lValueRequested": false,
2233
+ "nameLocations": [],
2234
+ "names": [],
2235
+ "nodeType": "FunctionCall",
2236
+ "src": "2496:19:5",
2237
+ "tryCall": false,
2238
+ "typeDescriptions": {
2239
+ "typeIdentifier": "t_uint256",
2240
+ "typeString": "uint256"
2241
+ }
2242
+ },
2243
+ "functionReturnParameters": 1038,
2244
+ "id": 1043,
2245
+ "nodeType": "Return",
2246
+ "src": "2489:26:5"
2247
+ }
2248
+ ]
2249
+ },
2250
+ "documentation": {
2251
+ "id": 1029,
2252
+ "nodeType": "StructuredDocumentation",
2253
+ "src": "2346:28:5",
2254
+ "text": "@inheritdoc IERC20Permit"
2255
+ },
2256
+ "functionSelector": "7ecebe00",
2257
+ "id": 1045,
2258
+ "implemented": true,
2259
+ "kind": "function",
2260
+ "modifiers": [],
2261
+ "name": "nonces",
2262
+ "nameLocation": "2388:6:5",
2263
+ "nodeType": "FunctionDefinition",
2264
+ "overrides": {
2265
+ "id": 1035,
2266
+ "nodeType": "OverrideSpecifier",
2267
+ "overrides": [
2268
+ {
2269
+ "id": 1033,
2270
+ "name": "IERC20Permit",
2271
+ "nameLocations": [
2272
+ "2439:12:5"
2273
+ ],
2274
+ "nodeType": "IdentifierPath",
2275
+ "referencedDeclaration": 1118,
2276
+ "src": "2439:12:5"
2277
+ },
2278
+ {
2279
+ "id": 1034,
2280
+ "name": "Nonces",
2281
+ "nameLocations": [
2282
+ "2453:6:5"
2283
+ ],
2284
+ "nodeType": "IdentifierPath",
2285
+ "referencedDeclaration": 2413,
2286
+ "src": "2453:6:5"
2287
+ }
2288
+ ],
2289
+ "src": "2430:30:5"
2290
+ },
2291
+ "parameters": {
2292
+ "id": 1032,
2293
+ "nodeType": "ParameterList",
2294
+ "parameters": [
2295
+ {
2296
+ "constant": false,
2297
+ "id": 1031,
2298
+ "mutability": "mutable",
2299
+ "name": "owner",
2300
+ "nameLocation": "2403:5:5",
2301
+ "nodeType": "VariableDeclaration",
2302
+ "scope": 1045,
2303
+ "src": "2395:13:5",
2304
+ "stateVariable": false,
2305
+ "storageLocation": "default",
2306
+ "typeDescriptions": {
2307
+ "typeIdentifier": "t_address",
2308
+ "typeString": "address"
2309
+ },
2310
+ "typeName": {
2311
+ "id": 1030,
2312
+ "name": "address",
2313
+ "nodeType": "ElementaryTypeName",
2314
+ "src": "2395:7:5",
2315
+ "stateMutability": "nonpayable",
2316
+ "typeDescriptions": {
2317
+ "typeIdentifier": "t_address",
2318
+ "typeString": "address"
2319
+ }
2320
+ },
2321
+ "visibility": "internal"
2322
+ }
2323
+ ],
2324
+ "src": "2394:15:5"
2325
+ },
2326
+ "returnParameters": {
2327
+ "id": 1038,
2328
+ "nodeType": "ParameterList",
2329
+ "parameters": [
2330
+ {
2331
+ "constant": false,
2332
+ "id": 1037,
2333
+ "mutability": "mutable",
2334
+ "name": "",
2335
+ "nameLocation": "-1:-1:-1",
2336
+ "nodeType": "VariableDeclaration",
2337
+ "scope": 1045,
2338
+ "src": "2470:7:5",
2339
+ "stateVariable": false,
2340
+ "storageLocation": "default",
2341
+ "typeDescriptions": {
2342
+ "typeIdentifier": "t_uint256",
2343
+ "typeString": "uint256"
2344
+ },
2345
+ "typeName": {
2346
+ "id": 1036,
2347
+ "name": "uint256",
2348
+ "nodeType": "ElementaryTypeName",
2349
+ "src": "2470:7:5",
2350
+ "typeDescriptions": {
2351
+ "typeIdentifier": "t_uint256",
2352
+ "typeString": "uint256"
2353
+ }
2354
+ },
2355
+ "visibility": "internal"
2356
+ }
2357
+ ],
2358
+ "src": "2469:9:5"
2359
+ },
2360
+ "scope": 1056,
2361
+ "src": "2379:143:5",
2362
+ "stateMutability": "view",
2363
+ "virtual": true,
2364
+ "visibility": "public"
2365
+ },
2366
+ {
2367
+ "baseFunctions": [
2368
+ 1117
2369
+ ],
2370
+ "body": {
2371
+ "id": 1054,
2372
+ "nodeType": "Block",
2373
+ "src": "2682:44:5",
2374
+ "statements": [
2375
+ {
2376
+ "expression": {
2377
+ "arguments": [],
2378
+ "expression": {
2379
+ "argumentTypes": [],
2380
+ "id": 1051,
2381
+ "name": "_domainSeparatorV4",
2382
+ "nodeType": "Identifier",
2383
+ "overloadedDeclarations": [],
2384
+ "referencedDeclaration": 4679,
2385
+ "src": "2699:18:5",
2386
+ "typeDescriptions": {
2387
+ "typeIdentifier": "t_function_internal_view$__$returns$_t_bytes32_$",
2388
+ "typeString": "function () view returns (bytes32)"
2389
+ }
2390
+ },
2391
+ "id": 1052,
2392
+ "isConstant": false,
2393
+ "isLValue": false,
2394
+ "isPure": false,
2395
+ "kind": "functionCall",
2396
+ "lValueRequested": false,
2397
+ "nameLocations": [],
2398
+ "names": [],
2399
+ "nodeType": "FunctionCall",
2400
+ "src": "2699:20:5",
2401
+ "tryCall": false,
2402
+ "typeDescriptions": {
2403
+ "typeIdentifier": "t_bytes32",
2404
+ "typeString": "bytes32"
2405
+ }
2406
+ },
2407
+ "functionReturnParameters": 1050,
2408
+ "id": 1053,
2409
+ "nodeType": "Return",
2410
+ "src": "2692:27:5"
2411
+ }
2412
+ ]
2413
+ },
2414
+ "documentation": {
2415
+ "id": 1046,
2416
+ "nodeType": "StructuredDocumentation",
2417
+ "src": "2528:28:5",
2418
+ "text": "@inheritdoc IERC20Permit"
2419
+ },
2420
+ "functionSelector": "3644e515",
2421
+ "id": 1055,
2422
+ "implemented": true,
2423
+ "kind": "function",
2424
+ "modifiers": [],
2425
+ "name": "DOMAIN_SEPARATOR",
2426
+ "nameLocation": "2623:16:5",
2427
+ "nodeType": "FunctionDefinition",
2428
+ "parameters": {
2429
+ "id": 1047,
2430
+ "nodeType": "ParameterList",
2431
+ "parameters": [],
2432
+ "src": "2639:2:5"
2433
+ },
2434
+ "returnParameters": {
2435
+ "id": 1050,
2436
+ "nodeType": "ParameterList",
2437
+ "parameters": [
2438
+ {
2439
+ "constant": false,
2440
+ "id": 1049,
2441
+ "mutability": "mutable",
2442
+ "name": "",
2443
+ "nameLocation": "-1:-1:-1",
2444
+ "nodeType": "VariableDeclaration",
2445
+ "scope": 1055,
2446
+ "src": "2673:7:5",
2447
+ "stateVariable": false,
2448
+ "storageLocation": "default",
2449
+ "typeDescriptions": {
2450
+ "typeIdentifier": "t_bytes32",
2451
+ "typeString": "bytes32"
2452
+ },
2453
+ "typeName": {
2454
+ "id": 1048,
2455
+ "name": "bytes32",
2456
+ "nodeType": "ElementaryTypeName",
2457
+ "src": "2673:7:5",
2458
+ "typeDescriptions": {
2459
+ "typeIdentifier": "t_bytes32",
2460
+ "typeString": "bytes32"
2461
+ }
2462
+ },
2463
+ "visibility": "internal"
2464
+ }
2465
+ ],
2466
+ "src": "2672:9:5"
2467
+ },
2468
+ "scope": 1056,
2469
+ "src": "2614:112:5",
2470
+ "stateMutability": "view",
2471
+ "virtual": true,
2472
+ "visibility": "external"
2473
+ }
2474
+ ],
2475
+ "scope": 1057,
2476
+ "src": "898:1830:5",
2477
+ "usedErrors": [
2478
+ 184,
2479
+ 189,
2480
+ 194,
2481
+ 203,
2482
+ 208,
2483
+ 213,
2484
+ 933,
2485
+ 940,
2486
+ 2355,
2487
+ 2479,
2488
+ 2481,
2489
+ 4219,
2490
+ 4224,
2491
+ 4229
2492
+ ],
2493
+ "usedEvents": [
2494
+ 152,
2495
+ 836,
2496
+ 845
2497
+ ]
2498
+ }
2499
+ ],
2500
+ "src": "122:2607:5"
2501
+ },
2502
+ "compiler": {
2503
+ "name": "solc",
2504
+ "version": "0.8.21+commit.d9974bed.Emscripten.clang"
2505
+ },
2506
+ "networks": {},
2507
+ "schemaVersion": "3.4.16",
2508
+ "updatedAt": "2026-01-24T20:23:03.904Z",
2509
+ "devdoc": {
2510
+ "details": "Implementation of the ERC-20 Permit extension allowing approvals to be made via signatures, as defined in https://eips.ethereum.org/EIPS/eip-2612[ERC-2612]. Adds the {permit} method, which can be used to change an account's ERC-20 allowance (see {IERC20-allowance}) by presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't need to send a transaction, and thus is not required to hold Ether at all.",
2511
+ "errors": {
2512
+ "ECDSAInvalidSignature()": [
2513
+ {
2514
+ "details": "The signature derives the `address(0)`."
2515
+ }
2516
+ ],
2517
+ "ECDSAInvalidSignatureLength(uint256)": [
2518
+ {
2519
+ "details": "The signature has an invalid length."
2520
+ }
2521
+ ],
2522
+ "ECDSAInvalidSignatureS(bytes32)": [
2523
+ {
2524
+ "details": "The signature has an S value that is in the upper half order."
2525
+ }
2526
+ ],
2527
+ "ERC20InsufficientAllowance(address,uint256,uint256)": [
2528
+ {
2529
+ "details": "Indicates a failure with the `spender`’s `allowance`. Used in transfers.",
2530
+ "params": {
2531
+ "allowance": "Amount of tokens a `spender` is allowed to operate with.",
2532
+ "needed": "Minimum amount required to perform a transfer.",
2533
+ "spender": "Address that may be allowed to operate on tokens without being their owner."
2534
+ }
2535
+ }
2536
+ ],
2537
+ "ERC20InsufficientBalance(address,uint256,uint256)": [
2538
+ {
2539
+ "details": "Indicates an error related to the current `balance` of a `sender`. Used in transfers.",
2540
+ "params": {
2541
+ "balance": "Current balance for the interacting account.",
2542
+ "needed": "Minimum amount required to perform a transfer.",
2543
+ "sender": "Address whose tokens are being transferred."
2544
+ }
2545
+ }
2546
+ ],
2547
+ "ERC20InvalidApprover(address)": [
2548
+ {
2549
+ "details": "Indicates a failure with the `approver` of a token to be approved. Used in approvals.",
2550
+ "params": {
2551
+ "approver": "Address initiating an approval operation."
2552
+ }
2553
+ }
2554
+ ],
2555
+ "ERC20InvalidReceiver(address)": [
2556
+ {
2557
+ "details": "Indicates a failure with the token `receiver`. Used in transfers.",
2558
+ "params": {
2559
+ "receiver": "Address to which tokens are being transferred."
2560
+ }
2561
+ }
2562
+ ],
2563
+ "ERC20InvalidSender(address)": [
2564
+ {
2565
+ "details": "Indicates a failure with the token `sender`. Used in transfers.",
2566
+ "params": {
2567
+ "sender": "Address whose tokens are being transferred."
2568
+ }
2569
+ }
2570
+ ],
2571
+ "ERC20InvalidSpender(address)": [
2572
+ {
2573
+ "details": "Indicates a failure with the `spender` to be approved. Used in approvals.",
2574
+ "params": {
2575
+ "spender": "Address that may be allowed to operate on tokens without being their owner."
2576
+ }
2577
+ }
2578
+ ],
2579
+ "ERC2612ExpiredSignature(uint256)": [
2580
+ {
2581
+ "details": "Permit deadline has expired."
2582
+ }
2583
+ ],
2584
+ "ERC2612InvalidSigner(address,address)": [
2585
+ {
2586
+ "details": "Mismatched signature."
2587
+ }
2588
+ ],
2589
+ "InvalidAccountNonce(address,uint256)": [
2590
+ {
2591
+ "details": "The nonce used for an `account` is not the expected current nonce."
2592
+ }
2593
+ ]
2594
+ },
2595
+ "events": {
2596
+ "Approval(address,address,uint256)": {
2597
+ "details": "Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance."
2598
+ },
2599
+ "EIP712DomainChanged()": {
2600
+ "details": "MAY be emitted to signal that the domain could have changed."
2601
+ },
2602
+ "Transfer(address,address,uint256)": {
2603
+ "details": "Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero."
2604
+ }
2605
+ },
2606
+ "kind": "dev",
2607
+ "methods": {
2608
+ "DOMAIN_SEPARATOR()": {
2609
+ "details": "Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."
2610
+ },
2611
+ "allowance(address,address)": {
2612
+ "details": "Returns the remaining number of tokens that `spender` will be allowed to spend on behalf of `owner` through {transferFrom}. This is zero by default. This value changes when {approve} or {transferFrom} are called."
2613
+ },
2614
+ "approve(address,uint256)": {
2615
+ "details": "See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."
2616
+ },
2617
+ "balanceOf(address)": {
2618
+ "details": "Returns the value of tokens owned by `account`."
2619
+ },
2620
+ "constructor": {
2621
+ "details": "Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `\"1\"`. It's a good idea to use the same `name` that is defined as the ERC-20 token name."
2622
+ },
2623
+ "decimals()": {
2624
+ "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
2625
+ },
2626
+ "eip712Domain()": {
2627
+ "details": "returns the fields and values that describe the domain separator used by this contract for EIP-712 signature."
2628
+ },
2629
+ "name()": {
2630
+ "details": "Returns the name of the token."
2631
+ },
2632
+ "nonces(address)": {
2633
+ "details": "Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times."
2634
+ },
2635
+ "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": {
2636
+ "details": "Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above."
2637
+ },
2638
+ "symbol()": {
2639
+ "details": "Returns the symbol of the token, usually a shorter version of the name."
2640
+ },
2641
+ "totalSupply()": {
2642
+ "details": "Returns the value of tokens in existence."
2643
+ },
2644
+ "transfer(address,uint256)": {
2645
+ "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."
2646
+ },
2647
+ "transferFrom(address,address,uint256)": {
2648
+ "details": "See {IERC20-transferFrom}. Skips emitting an {Approval} event indicating an allowance update. This is not required by the ERC. See {xref-ERC20-_approve-address-address-uint256-bool-}[_approve]. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."
2649
+ }
2650
+ },
2651
+ "version": 1
2652
+ },
2653
+ "userdoc": {
2654
+ "kind": "user",
2655
+ "methods": {},
2656
+ "version": 1
2657
+ }
2658
+ }