hopr_bindings/codegen/
hoprtoken.rs

1/**
2
3Generated by the following Solidity interface...
4```solidity
5interface HoprToken {
6    event Approval(address indexed owner, address indexed spender, uint256 value);
7    event AuthorizedOperator(address indexed operator, address indexed tokenHolder);
8    event Burned(address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData);
9    event Minted(address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData);
10    event RevokedOperator(address indexed operator, address indexed tokenHolder);
11    event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
12    event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
13    event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
14    event Sent(address indexed operator, address indexed from, address indexed to, uint256 amount, bytes data, bytes operatorData);
15    event Transfer(address indexed from, address indexed to, uint256 value);
16
17    constructor();
18
19    function DEFAULT_ADMIN_ROLE() external view returns (bytes32);
20    function MINTER_ROLE() external view returns (bytes32);
21    function accountSnapshots(address, uint256) external view returns (uint128 fromBlock, uint128 value);
22    function allowance(address holder, address spender) external view returns (uint256);
23    function approve(address spender, uint256 value) external returns (bool);
24    function authorizeOperator(address operator) external;
25    function balanceOf(address tokenHolder) external view returns (uint256);
26    function balanceOfAt(address _owner, uint128 _blockNumber) external view returns (uint256);
27    function burn(uint256 amount, bytes memory data) external;
28    function decimals() external pure returns (uint8);
29    function defaultOperators() external view returns (address[] memory);
30    function getRoleAdmin(bytes32 role) external view returns (bytes32);
31    function getRoleMember(bytes32 role, uint256 index) external view returns (address);
32    function getRoleMemberCount(bytes32 role) external view returns (uint256);
33    function grantRole(bytes32 role, address account) external;
34    function granularity() external view returns (uint256);
35    function hasRole(bytes32 role, address account) external view returns (bool);
36    function isOperatorFor(address operator, address tokenHolder) external view returns (bool);
37    function mint(address account, uint256 amount, bytes memory userData, bytes memory operatorData) external;
38    function name() external view returns (string memory);
39    function operatorBurn(address account, uint256 amount, bytes memory data, bytes memory operatorData) external;
40    function operatorSend(address sender, address recipient, uint256 amount, bytes memory data, bytes memory operatorData) external;
41    function renounceRole(bytes32 role, address account) external;
42    function revokeOperator(address operator) external;
43    function revokeRole(bytes32 role, address account) external;
44    function send(address recipient, uint256 amount, bytes memory data) external;
45    function supportsInterface(bytes4 interfaceId) external view returns (bool);
46    function symbol() external view returns (string memory);
47    function totalSupply() external view returns (uint256);
48    function totalSupplyAt(uint128 _blockNumber) external view returns (uint256);
49    function totalSupplySnapshots(uint256) external view returns (uint128 fromBlock, uint128 value);
50    function transfer(address recipient, uint256 amount) external returns (bool);
51    function transferFrom(address holder, address recipient, uint256 amount) external returns (bool);
52}
53```
54
55...which was generated by the following JSON ABI:
56```json
57[
58  {
59    "type": "constructor",
60    "inputs": [],
61    "stateMutability": "nonpayable"
62  },
63  {
64    "type": "function",
65    "name": "DEFAULT_ADMIN_ROLE",
66    "inputs": [],
67    "outputs": [
68      {
69        "name": "",
70        "type": "bytes32",
71        "internalType": "bytes32"
72      }
73    ],
74    "stateMutability": "view"
75  },
76  {
77    "type": "function",
78    "name": "MINTER_ROLE",
79    "inputs": [],
80    "outputs": [
81      {
82        "name": "",
83        "type": "bytes32",
84        "internalType": "bytes32"
85      }
86    ],
87    "stateMutability": "view"
88  },
89  {
90    "type": "function",
91    "name": "accountSnapshots",
92    "inputs": [
93      {
94        "name": "",
95        "type": "address",
96        "internalType": "address"
97      },
98      {
99        "name": "",
100        "type": "uint256",
101        "internalType": "uint256"
102      }
103    ],
104    "outputs": [
105      {
106        "name": "fromBlock",
107        "type": "uint128",
108        "internalType": "uint128"
109      },
110      {
111        "name": "value",
112        "type": "uint128",
113        "internalType": "uint128"
114      }
115    ],
116    "stateMutability": "view"
117  },
118  {
119    "type": "function",
120    "name": "allowance",
121    "inputs": [
122      {
123        "name": "holder",
124        "type": "address",
125        "internalType": "address"
126      },
127      {
128        "name": "spender",
129        "type": "address",
130        "internalType": "address"
131      }
132    ],
133    "outputs": [
134      {
135        "name": "",
136        "type": "uint256",
137        "internalType": "uint256"
138      }
139    ],
140    "stateMutability": "view"
141  },
142  {
143    "type": "function",
144    "name": "approve",
145    "inputs": [
146      {
147        "name": "spender",
148        "type": "address",
149        "internalType": "address"
150      },
151      {
152        "name": "value",
153        "type": "uint256",
154        "internalType": "uint256"
155      }
156    ],
157    "outputs": [
158      {
159        "name": "",
160        "type": "bool",
161        "internalType": "bool"
162      }
163    ],
164    "stateMutability": "nonpayable"
165  },
166  {
167    "type": "function",
168    "name": "authorizeOperator",
169    "inputs": [
170      {
171        "name": "operator",
172        "type": "address",
173        "internalType": "address"
174      }
175    ],
176    "outputs": [],
177    "stateMutability": "nonpayable"
178  },
179  {
180    "type": "function",
181    "name": "balanceOf",
182    "inputs": [
183      {
184        "name": "tokenHolder",
185        "type": "address",
186        "internalType": "address"
187      }
188    ],
189    "outputs": [
190      {
191        "name": "",
192        "type": "uint256",
193        "internalType": "uint256"
194      }
195    ],
196    "stateMutability": "view"
197  },
198  {
199    "type": "function",
200    "name": "balanceOfAt",
201    "inputs": [
202      {
203        "name": "_owner",
204        "type": "address",
205        "internalType": "address"
206      },
207      {
208        "name": "_blockNumber",
209        "type": "uint128",
210        "internalType": "uint128"
211      }
212    ],
213    "outputs": [
214      {
215        "name": "",
216        "type": "uint256",
217        "internalType": "uint256"
218      }
219    ],
220    "stateMutability": "view"
221  },
222  {
223    "type": "function",
224    "name": "burn",
225    "inputs": [
226      {
227        "name": "amount",
228        "type": "uint256",
229        "internalType": "uint256"
230      },
231      {
232        "name": "data",
233        "type": "bytes",
234        "internalType": "bytes"
235      }
236    ],
237    "outputs": [],
238    "stateMutability": "nonpayable"
239  },
240  {
241    "type": "function",
242    "name": "decimals",
243    "inputs": [],
244    "outputs": [
245      {
246        "name": "",
247        "type": "uint8",
248        "internalType": "uint8"
249      }
250    ],
251    "stateMutability": "pure"
252  },
253  {
254    "type": "function",
255    "name": "defaultOperators",
256    "inputs": [],
257    "outputs": [
258      {
259        "name": "",
260        "type": "address[]",
261        "internalType": "address[]"
262      }
263    ],
264    "stateMutability": "view"
265  },
266  {
267    "type": "function",
268    "name": "getRoleAdmin",
269    "inputs": [
270      {
271        "name": "role",
272        "type": "bytes32",
273        "internalType": "bytes32"
274      }
275    ],
276    "outputs": [
277      {
278        "name": "",
279        "type": "bytes32",
280        "internalType": "bytes32"
281      }
282    ],
283    "stateMutability": "view"
284  },
285  {
286    "type": "function",
287    "name": "getRoleMember",
288    "inputs": [
289      {
290        "name": "role",
291        "type": "bytes32",
292        "internalType": "bytes32"
293      },
294      {
295        "name": "index",
296        "type": "uint256",
297        "internalType": "uint256"
298      }
299    ],
300    "outputs": [
301      {
302        "name": "",
303        "type": "address",
304        "internalType": "address"
305      }
306    ],
307    "stateMutability": "view"
308  },
309  {
310    "type": "function",
311    "name": "getRoleMemberCount",
312    "inputs": [
313      {
314        "name": "role",
315        "type": "bytes32",
316        "internalType": "bytes32"
317      }
318    ],
319    "outputs": [
320      {
321        "name": "",
322        "type": "uint256",
323        "internalType": "uint256"
324      }
325    ],
326    "stateMutability": "view"
327  },
328  {
329    "type": "function",
330    "name": "grantRole",
331    "inputs": [
332      {
333        "name": "role",
334        "type": "bytes32",
335        "internalType": "bytes32"
336      },
337      {
338        "name": "account",
339        "type": "address",
340        "internalType": "address"
341      }
342    ],
343    "outputs": [],
344    "stateMutability": "nonpayable"
345  },
346  {
347    "type": "function",
348    "name": "granularity",
349    "inputs": [],
350    "outputs": [
351      {
352        "name": "",
353        "type": "uint256",
354        "internalType": "uint256"
355      }
356    ],
357    "stateMutability": "view"
358  },
359  {
360    "type": "function",
361    "name": "hasRole",
362    "inputs": [
363      {
364        "name": "role",
365        "type": "bytes32",
366        "internalType": "bytes32"
367      },
368      {
369        "name": "account",
370        "type": "address",
371        "internalType": "address"
372      }
373    ],
374    "outputs": [
375      {
376        "name": "",
377        "type": "bool",
378        "internalType": "bool"
379      }
380    ],
381    "stateMutability": "view"
382  },
383  {
384    "type": "function",
385    "name": "isOperatorFor",
386    "inputs": [
387      {
388        "name": "operator",
389        "type": "address",
390        "internalType": "address"
391      },
392      {
393        "name": "tokenHolder",
394        "type": "address",
395        "internalType": "address"
396      }
397    ],
398    "outputs": [
399      {
400        "name": "",
401        "type": "bool",
402        "internalType": "bool"
403      }
404    ],
405    "stateMutability": "view"
406  },
407  {
408    "type": "function",
409    "name": "mint",
410    "inputs": [
411      {
412        "name": "account",
413        "type": "address",
414        "internalType": "address"
415      },
416      {
417        "name": "amount",
418        "type": "uint256",
419        "internalType": "uint256"
420      },
421      {
422        "name": "userData",
423        "type": "bytes",
424        "internalType": "bytes"
425      },
426      {
427        "name": "operatorData",
428        "type": "bytes",
429        "internalType": "bytes"
430      }
431    ],
432    "outputs": [],
433    "stateMutability": "nonpayable"
434  },
435  {
436    "type": "function",
437    "name": "name",
438    "inputs": [],
439    "outputs": [
440      {
441        "name": "",
442        "type": "string",
443        "internalType": "string"
444      }
445    ],
446    "stateMutability": "view"
447  },
448  {
449    "type": "function",
450    "name": "operatorBurn",
451    "inputs": [
452      {
453        "name": "account",
454        "type": "address",
455        "internalType": "address"
456      },
457      {
458        "name": "amount",
459        "type": "uint256",
460        "internalType": "uint256"
461      },
462      {
463        "name": "data",
464        "type": "bytes",
465        "internalType": "bytes"
466      },
467      {
468        "name": "operatorData",
469        "type": "bytes",
470        "internalType": "bytes"
471      }
472    ],
473    "outputs": [],
474    "stateMutability": "nonpayable"
475  },
476  {
477    "type": "function",
478    "name": "operatorSend",
479    "inputs": [
480      {
481        "name": "sender",
482        "type": "address",
483        "internalType": "address"
484      },
485      {
486        "name": "recipient",
487        "type": "address",
488        "internalType": "address"
489      },
490      {
491        "name": "amount",
492        "type": "uint256",
493        "internalType": "uint256"
494      },
495      {
496        "name": "data",
497        "type": "bytes",
498        "internalType": "bytes"
499      },
500      {
501        "name": "operatorData",
502        "type": "bytes",
503        "internalType": "bytes"
504      }
505    ],
506    "outputs": [],
507    "stateMutability": "nonpayable"
508  },
509  {
510    "type": "function",
511    "name": "renounceRole",
512    "inputs": [
513      {
514        "name": "role",
515        "type": "bytes32",
516        "internalType": "bytes32"
517      },
518      {
519        "name": "account",
520        "type": "address",
521        "internalType": "address"
522      }
523    ],
524    "outputs": [],
525    "stateMutability": "nonpayable"
526  },
527  {
528    "type": "function",
529    "name": "revokeOperator",
530    "inputs": [
531      {
532        "name": "operator",
533        "type": "address",
534        "internalType": "address"
535      }
536    ],
537    "outputs": [],
538    "stateMutability": "nonpayable"
539  },
540  {
541    "type": "function",
542    "name": "revokeRole",
543    "inputs": [
544      {
545        "name": "role",
546        "type": "bytes32",
547        "internalType": "bytes32"
548      },
549      {
550        "name": "account",
551        "type": "address",
552        "internalType": "address"
553      }
554    ],
555    "outputs": [],
556    "stateMutability": "nonpayable"
557  },
558  {
559    "type": "function",
560    "name": "send",
561    "inputs": [
562      {
563        "name": "recipient",
564        "type": "address",
565        "internalType": "address"
566      },
567      {
568        "name": "amount",
569        "type": "uint256",
570        "internalType": "uint256"
571      },
572      {
573        "name": "data",
574        "type": "bytes",
575        "internalType": "bytes"
576      }
577    ],
578    "outputs": [],
579    "stateMutability": "nonpayable"
580  },
581  {
582    "type": "function",
583    "name": "supportsInterface",
584    "inputs": [
585      {
586        "name": "interfaceId",
587        "type": "bytes4",
588        "internalType": "bytes4"
589      }
590    ],
591    "outputs": [
592      {
593        "name": "",
594        "type": "bool",
595        "internalType": "bool"
596      }
597    ],
598    "stateMutability": "view"
599  },
600  {
601    "type": "function",
602    "name": "symbol",
603    "inputs": [],
604    "outputs": [
605      {
606        "name": "",
607        "type": "string",
608        "internalType": "string"
609      }
610    ],
611    "stateMutability": "view"
612  },
613  {
614    "type": "function",
615    "name": "totalSupply",
616    "inputs": [],
617    "outputs": [
618      {
619        "name": "",
620        "type": "uint256",
621        "internalType": "uint256"
622      }
623    ],
624    "stateMutability": "view"
625  },
626  {
627    "type": "function",
628    "name": "totalSupplyAt",
629    "inputs": [
630      {
631        "name": "_blockNumber",
632        "type": "uint128",
633        "internalType": "uint128"
634      }
635    ],
636    "outputs": [
637      {
638        "name": "",
639        "type": "uint256",
640        "internalType": "uint256"
641      }
642    ],
643    "stateMutability": "view"
644  },
645  {
646    "type": "function",
647    "name": "totalSupplySnapshots",
648    "inputs": [
649      {
650        "name": "",
651        "type": "uint256",
652        "internalType": "uint256"
653      }
654    ],
655    "outputs": [
656      {
657        "name": "fromBlock",
658        "type": "uint128",
659        "internalType": "uint128"
660      },
661      {
662        "name": "value",
663        "type": "uint128",
664        "internalType": "uint128"
665      }
666    ],
667    "stateMutability": "view"
668  },
669  {
670    "type": "function",
671    "name": "transfer",
672    "inputs": [
673      {
674        "name": "recipient",
675        "type": "address",
676        "internalType": "address"
677      },
678      {
679        "name": "amount",
680        "type": "uint256",
681        "internalType": "uint256"
682      }
683    ],
684    "outputs": [
685      {
686        "name": "",
687        "type": "bool",
688        "internalType": "bool"
689      }
690    ],
691    "stateMutability": "nonpayable"
692  },
693  {
694    "type": "function",
695    "name": "transferFrom",
696    "inputs": [
697      {
698        "name": "holder",
699        "type": "address",
700        "internalType": "address"
701      },
702      {
703        "name": "recipient",
704        "type": "address",
705        "internalType": "address"
706      },
707      {
708        "name": "amount",
709        "type": "uint256",
710        "internalType": "uint256"
711      }
712    ],
713    "outputs": [
714      {
715        "name": "",
716        "type": "bool",
717        "internalType": "bool"
718      }
719    ],
720    "stateMutability": "nonpayable"
721  },
722  {
723    "type": "event",
724    "name": "Approval",
725    "inputs": [
726      {
727        "name": "owner",
728        "type": "address",
729        "indexed": true,
730        "internalType": "address"
731      },
732      {
733        "name": "spender",
734        "type": "address",
735        "indexed": true,
736        "internalType": "address"
737      },
738      {
739        "name": "value",
740        "type": "uint256",
741        "indexed": false,
742        "internalType": "uint256"
743      }
744    ],
745    "anonymous": false
746  },
747  {
748    "type": "event",
749    "name": "AuthorizedOperator",
750    "inputs": [
751      {
752        "name": "operator",
753        "type": "address",
754        "indexed": true,
755        "internalType": "address"
756      },
757      {
758        "name": "tokenHolder",
759        "type": "address",
760        "indexed": true,
761        "internalType": "address"
762      }
763    ],
764    "anonymous": false
765  },
766  {
767    "type": "event",
768    "name": "Burned",
769    "inputs": [
770      {
771        "name": "operator",
772        "type": "address",
773        "indexed": true,
774        "internalType": "address"
775      },
776      {
777        "name": "from",
778        "type": "address",
779        "indexed": true,
780        "internalType": "address"
781      },
782      {
783        "name": "amount",
784        "type": "uint256",
785        "indexed": false,
786        "internalType": "uint256"
787      },
788      {
789        "name": "data",
790        "type": "bytes",
791        "indexed": false,
792        "internalType": "bytes"
793      },
794      {
795        "name": "operatorData",
796        "type": "bytes",
797        "indexed": false,
798        "internalType": "bytes"
799      }
800    ],
801    "anonymous": false
802  },
803  {
804    "type": "event",
805    "name": "Minted",
806    "inputs": [
807      {
808        "name": "operator",
809        "type": "address",
810        "indexed": true,
811        "internalType": "address"
812      },
813      {
814        "name": "to",
815        "type": "address",
816        "indexed": true,
817        "internalType": "address"
818      },
819      {
820        "name": "amount",
821        "type": "uint256",
822        "indexed": false,
823        "internalType": "uint256"
824      },
825      {
826        "name": "data",
827        "type": "bytes",
828        "indexed": false,
829        "internalType": "bytes"
830      },
831      {
832        "name": "operatorData",
833        "type": "bytes",
834        "indexed": false,
835        "internalType": "bytes"
836      }
837    ],
838    "anonymous": false
839  },
840  {
841    "type": "event",
842    "name": "RevokedOperator",
843    "inputs": [
844      {
845        "name": "operator",
846        "type": "address",
847        "indexed": true,
848        "internalType": "address"
849      },
850      {
851        "name": "tokenHolder",
852        "type": "address",
853        "indexed": true,
854        "internalType": "address"
855      }
856    ],
857    "anonymous": false
858  },
859  {
860    "type": "event",
861    "name": "RoleAdminChanged",
862    "inputs": [
863      {
864        "name": "role",
865        "type": "bytes32",
866        "indexed": true,
867        "internalType": "bytes32"
868      },
869      {
870        "name": "previousAdminRole",
871        "type": "bytes32",
872        "indexed": true,
873        "internalType": "bytes32"
874      },
875      {
876        "name": "newAdminRole",
877        "type": "bytes32",
878        "indexed": true,
879        "internalType": "bytes32"
880      }
881    ],
882    "anonymous": false
883  },
884  {
885    "type": "event",
886    "name": "RoleGranted",
887    "inputs": [
888      {
889        "name": "role",
890        "type": "bytes32",
891        "indexed": true,
892        "internalType": "bytes32"
893      },
894      {
895        "name": "account",
896        "type": "address",
897        "indexed": true,
898        "internalType": "address"
899      },
900      {
901        "name": "sender",
902        "type": "address",
903        "indexed": true,
904        "internalType": "address"
905      }
906    ],
907    "anonymous": false
908  },
909  {
910    "type": "event",
911    "name": "RoleRevoked",
912    "inputs": [
913      {
914        "name": "role",
915        "type": "bytes32",
916        "indexed": true,
917        "internalType": "bytes32"
918      },
919      {
920        "name": "account",
921        "type": "address",
922        "indexed": true,
923        "internalType": "address"
924      },
925      {
926        "name": "sender",
927        "type": "address",
928        "indexed": true,
929        "internalType": "address"
930      }
931    ],
932    "anonymous": false
933  },
934  {
935    "type": "event",
936    "name": "Sent",
937    "inputs": [
938      {
939        "name": "operator",
940        "type": "address",
941        "indexed": true,
942        "internalType": "address"
943      },
944      {
945        "name": "from",
946        "type": "address",
947        "indexed": true,
948        "internalType": "address"
949      },
950      {
951        "name": "to",
952        "type": "address",
953        "indexed": true,
954        "internalType": "address"
955      },
956      {
957        "name": "amount",
958        "type": "uint256",
959        "indexed": false,
960        "internalType": "uint256"
961      },
962      {
963        "name": "data",
964        "type": "bytes",
965        "indexed": false,
966        "internalType": "bytes"
967      },
968      {
969        "name": "operatorData",
970        "type": "bytes",
971        "indexed": false,
972        "internalType": "bytes"
973      }
974    ],
975    "anonymous": false
976  },
977  {
978    "type": "event",
979    "name": "Transfer",
980    "inputs": [
981      {
982        "name": "from",
983        "type": "address",
984        "indexed": true,
985        "internalType": "address"
986      },
987      {
988        "name": "to",
989        "type": "address",
990        "indexed": true,
991        "internalType": "address"
992      },
993      {
994        "name": "value",
995        "type": "uint256",
996        "indexed": false,
997        "internalType": "uint256"
998      }
999    ],
1000    "anonymous": false
1001  }
1002]
1003```*/
1004#[allow(
1005    non_camel_case_types,
1006    non_snake_case,
1007    clippy::pub_underscore_fields,
1008    clippy::style,
1009    clippy::empty_structs_with_brackets
1010)]
1011pub mod HoprToken {
1012    use super::*;
1013    use alloy::sol_types as alloy_sol_types;
1014    /// The creation / init bytecode of the contract.
1015    ///
1016    /// ```text
1017    ///0x60806040523480156200001157600080fd5b50604080518082018252600a8152692427a829102a37b5b2b760b11b60208083019190915282518084018452600581526436a427a82960d91b8183015283516000815291820190935290919060046200006b8482620004bb565b5060056200007a8382620004bb565b5080516200009090600690602084019062000396565b5060005b600654811015620001045760016007600060068481548110620000bb57620000bb62000587565b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff191691151591909117905580620000fb816200059d565b91505062000094565b506040516329965a1d60e01b815230600482018190527fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce217705460248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad24906329965a1d90606401600060405180830381600087803b1580156200017f57600080fd5b505af115801562000194573d6000803e3d6000fd5b50506040516329965a1d60e01b815230600482018190527faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a60248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad2492506329965a1d9150606401600060405180830381600087803b1580156200021257600080fd5b505af115801562000227573d6000803e3d6000fd5b50505050505050620002436000801b336200024960201b60201c565b620005c5565b62000255828262000259565b5050565b62000265828262000284565b60008281526001602052604090206200027f908262000324565b505050565b6000828152602081815260408083206001600160a01b038516845290915290205460ff1662000255576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055620002e03390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006200033b836001600160a01b03841662000344565b90505b92915050565b60008181526001830160205260408120546200038d575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200033e565b5060006200033e565b828054828255906000526020600020908101928215620003ee579160200282015b82811115620003ee57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620003b7565b50620003fc92915062000400565b5090565b5b80821115620003fc576000815560010162000401565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200044257607f821691505b6020821081036200046357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200027f57600081815260208120601f850160051c81016020861015620004925750805b601f850160051c820191505b81811015620004b3578281556001016200049e565b505050505050565b81516001600160401b03811115620004d757620004d762000417565b620004ef81620004e884546200042d565b8462000469565b602080601f8311600181146200052757600084156200050e5750858301515b600019600386901b1c1916600185901b178555620004b3565b600085815260208120601f198616915b82811015620005585788860151825594840194600190910190840162000537565b5085821015620005775787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052603260045260246000fd5b600060018201620005be57634e487b7160e01b600052601160045260246000fd5b5060010190565b6128f180620005d56000396000f3fe608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063947975d91161011a578063d5391393116100ad578063dd62ed3e1161007c578063dd62ed3e1461047a578063f772a092146104b3578063fad8b32a146104c6578063fc673c4f146104d9578063fe9d9303146104ec57600080fd5b8063d53913931461041a578063d547741f14610441578063d95b637114610454578063dcdc7dd01461046757600080fd5b8063a217fddf116100e9578063a217fddf146103d9578063a9059cbb146103e1578063b7d78b1a146103f4578063ca15c8731461040757600080fd5b8063947975d914610398578063959b8c3f146103ab57806395d89b41146103be5780639bd9bbc6146103c657600080fd5b80632f2ff15d1161019257806362ad1b831161016157806362ad1b831461031e57806370a08231146103315780639010d07c1461035a57806391d148541461038557600080fd5b80632f2ff15d146102e0578063313ce567146102f557806336568abe14610304578063556f0dc71461031757600080fd5b806318160ddd116101ce57806318160ddd1461026557806323b872dd14610277578063248a9ca31461028a5780632497aee6146102ad57600080fd5b806301ffc9a71461020057806306e485381461022857806306fdde031461023d578063095ea7b314610252575b600080fd5b61021361020e3660046120ce565b6104ff565b60405190151581526020015b60405180910390f35b61023061052a565b60405161021f91906120f8565b61024561058c565b60405161021f9190612195565b6102136102603660046121c0565b610615565b6003545b60405190815260200161021f565b6102136102853660046121ec565b61062d565b61026961029836600461222d565b60009081526020819052604090206001015490565b6102c06102bb3660046121c0565b6107ad565b604080516001600160801b0393841681529290911660208301520161021f565b6102f36102ee366004612246565b6107f0565b005b6040516012815260200161021f565b6102f3610312366004612246565b61081b565b6001610269565b6102f361032c366004612319565b610899565b61026961033f3660046123ac565b6001600160a01b031660009081526002602052604090205490565b61036d6103683660046123c9565b6108d5565b6040516001600160a01b03909116815260200161021f565b610213610393366004612246565b6108f4565b6102696103a6366004612407565b61091d565b6102f36103b93660046123ac565b61092a565b610245610a47565b6102f36103d4366004612422565b610a56565b610269600081565b6102136103ef3660046121c0565b610a74565b6102c061040236600461222d565b610b27565b61026961041536600461222d565b610b5c565b6102697f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102f361044f366004612246565b610b73565b61021361046236600461247b565b610b99565b6102f36104753660046124a9565b610c3a565b61026961048836600461247b565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b6102696104c1366004612529565b610cc2565b6102f36104d43660046123ac565b610ce4565b6102f36104e73660046124a9565b610dff565b6102f36104fa36600461255e565b610e31565b60006001600160e01b03198216635a05180f60e01b1480610524575061052482610e4c565b92915050565b6060600680548060200260200160405190810160405280929190818152602001828054801561058257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610564575b5050505050905090565b60606004805461059b906125a5565b80601f01602080910402602001604051908101604052809291908181526020018280546105c7906125a5565b80156105825780601f106105e957610100808354040283529160200191610582565b820191906000526020600020905b8154815290600101906020018083116105f757509395945050505050565b600033610623818585610e81565b5060019392505050565b60006001600160a01b03831661065e5760405162461bcd60e51b8152600401610655906125df565b60405180910390fd5b6001600160a01b0384166106c35760405162461bcd60e51b815260206004820152602660248201527f4552433737373a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b6064820152608401610655565b60003390506106f4818686866040518060200160405280600081525060405180602001604052806000815250610fa8565b6107208186868660405180602001604052806000815250604051806020016040528060008152506110d0565b610774858261076f86604051806060016040528060298152602001612870602991396001600160a01b03808c166000908152600a60209081526040808320938b168352929052205491906111fe565b610e81565b6107a2818686866040518060200160405280600081525060405180602001604052806000815250600061122a565b506001949350505050565b600b60205281600052604060002081815481106107c957600080fd5b6000918252602090912001546001600160801b038082169350600160801b90910416905082565b60008281526020819052604090206001015461080c81336113ef565b6108168383611453565b505050565b6001600160a01b038116331461088b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610655565b6108958282611475565b5050565b6108a33386610b99565b6108bf5760405162461bcd60e51b815260040161065590612623565b6108ce85858585856001611497565b5050505050565b60008281526001602052604081206108ed908361157a565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610524600c83611586565b6001600160a01b038116330361098e5760405162461bcd60e51b8152602060048201526024808201527f4552433737373a20617574686f72697a696e672073656c66206173206f70657260448201526330ba37b960e11b6064820152608401610655565b6001600160a01b03811660009081526007602052604090205460ff16156109df573360009081526009602090815260408083206001600160a01b03851684529091529020805460ff19169055610a0e565b3360009081526008602090815260408083206001600160a01b03851684529091529020805460ff191660011790555b60405133906001600160a01b038316907ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f990600090a350565b60606005805461059b906125a5565b61081633848484604051806020016040528060008152506001611497565b60006001600160a01b038316610a9c5760405162461bcd60e51b8152600401610655906125df565b6000339050610acd818286866040518060200160405280600081525060405180602001604052806000815250610fa8565b610af98182868660405180602001604052806000815250604051806020016040528060008152506110d0565b610623818286866040518060200160405280600081525060405180602001604052806000815250600061122a565b600c8181548110610b3757600080fd5b6000918252602090912001546001600160801b038082169250600160801b9091041682565b600081815260016020526040812061052490611769565b600082815260208190526040902060010154610b8f81336113ef565b6108168383611475565b6000816001600160a01b0316836001600160a01b03161480610c0457506001600160a01b03831660009081526007602052604090205460ff168015610c0457506001600160a01b0380831660009081526009602090815260408083209387168352929052205460ff16155b806108ed5750506001600160a01b0390811660009081526008602090815260408083209490931682529290925290205460ff1690565b610c647f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336108f4565b610cb05760405162461bcd60e51b815260206004820181905260248201527f63616c6c657220646f6573206e6f742068617665206d696e74657220726f6c656044820152606401610655565b610cbc84848484611773565b50505050565b6001600160a01b0382166000908152600b602052604081206108ed9083611586565b336001600160a01b03821603610d465760405162461bcd60e51b815260206004820152602160248201527f4552433737373a207265766f6b696e672073656c66206173206f70657261746f6044820152603960f91b6064820152608401610655565b6001600160a01b03811660009081526007602052604090205460ff1615610d9a573360009081526009602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610dc6565b3360009081526008602090815260408083206001600160a01b03851684529091529020805460ff191690555b60405133906001600160a01b038316907f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa190600090a350565b610e093385610b99565b610e255760405162461bcd60e51b815260040161065590612623565b610cbc848484846118cf565b610895338383604051806020016040528060008152506118cf565b60006001600160e01b03198216637965db0b60e01b148061052457506301ffc9a760e01b6001600160e01b0319831614610524565b6001600160a01b038316610ee55760405162461bcd60e51b815260206004820152602560248201527f4552433737373a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610655565b6001600160a01b038216610f475760405162461bcd60e51b815260206004820152602360248201527f4552433737373a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610655565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa158015611029573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104d919061266f565b90506001600160a01b038116156110c757604051633ad5cbc160e11b81526001600160a01b038216906375ab978290611094908a908a908a908a908a908a9060040161268c565b600060405180830381600087803b1580156110ae57600080fd5b505af11580156110c2573d6000803e3d6000fd5b505050505b50505050505050565b6110dc86868686611a43565b61111983604051806060016040528060278152602001612849602791396001600160a01b03881660009081526002602052604090205491906111fe565b6001600160a01b0380871660009081526002602052604080822093909355908616815220546111489084611b7a565b6001600160a01b0380861660008181526002602052604090819020939093559151878216918916907f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987906111a1908890889088906126e6565b60405180910390a4836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516111ee91815260200190565b60405180910390a3505050505050565b600081848411156112225760405162461bcd60e51b81526004016106559190612195565b505050900390565b60405163555ddc6560e11b81526001600160a01b03861660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa1580156112ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cf919061266f565b90506001600160a01b0381161561134b576040516223de2960e01b81526001600160a01b038216906223de2990611314908b908b908b908b908b908b9060040161268c565b600060405180830381600087803b15801561132e57600080fd5b505af1158015611342573d6000803e3d6000fd5b505050506113e5565b81156113e5576001600160a01b0386163b156113e55760405162461bcd60e51b815260206004820152604d60248201527f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460448201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60648201526c1ad95b9cd49958da5c1a595b9d609a1b608482015260a401610655565b5050505050505050565b6113f982826108f4565b61089557611411816001600160a01b03166014611b86565b61141c836020611b86565b60405160200161142d92919061271b565b60408051601f198184030181529082905262461bcd60e51b825261065591600401612195565b61145d8282611d22565b60008281526001602052604090206108169082611da6565b61147f8282611dbb565b60008281526001602052604090206108169082611e20565b6001600160a01b0386166114f85760405162461bcd60e51b815260206004820152602260248201527f4552433737373a2073656e642066726f6d20746865207a65726f206164647265604482015261737360f01b6064820152608401610655565b6001600160a01b03851661154e5760405162461bcd60e51b815260206004820181905260248201527f4552433737373a2073656e6420746f20746865207a65726f20616464726573736044820152606401610655565b3361155d818888888888610fa8565b61156b8188888888886110d0565b6110c78188888888888861122a565b60006108ed8383611e35565b815460009080820361159c576000915050610524565b836115a86001836127a6565b815481106115b8576115b86127b9565b6000918252602090912001546001600160801b039081169084161061161857836115e36001836127a6565b815481106115f3576115f36127b9565b600091825260209091200154600160801b90046001600160801b031691506105249050565b8360008154811061162b5761162b6127b9565b6000918252602090912001546001600160801b039081169084161015611655576000915050610524565b6000806116636001846127a6565b90505b81811115611731576000600261167c84846127cf565b6116879060016127cf565b61169191906127e2565b905060008782815481106116a7576116a76127b9565b6000918252602090912001546001600160801b03908116915087168103611703578782815481106116da576116da6127b9565b600091825260209091200154600160801b90046001600160801b03169550610524945050505050565b866001600160801b031681101561171c5781935061172a565b6117276001836127a6565b92505b5050611666565b858281548110611743576117436127b9565b600091825260209091200154600160801b90046001600160801b03169695505050505050565b6000610524825490565b6001600160a01b0384166117c95760405162461bcd60e51b815260206004820181905260248201527f4552433737373a206d696e7420746f20746865207a65726f20616464726573736044820152606401610655565b336117d78160008787611a43565b6003546117e49085611b7a565b6003556001600160a01b03851660009081526002602052604090205461180a9085611b7a565b6001600160a01b03861660009081526002602052604081209190915561183790829087878787600161122a565b846001600160a01b0316816001600160a01b03167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d86868660405161187e939291906126e6565b60405180910390a36040518481526001600160a01b038616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050505050565b6001600160a01b0384166119305760405162461bcd60e51b815260206004820152602260248201527f4552433737373a206275726e2066726f6d20746865207a65726f206164647265604482015261737360f01b6064820152608401610655565b3361194081866000878787610fa8565b61194d8186600087611a43565b61198a84604051806060016040528060238152602001612899602391396001600160a01b03881660009081526002602052604090205491906111fe565b6001600160a01b0386166000908152600260205260409020556003546119b09085611e5f565b600381905550846001600160a01b0316816001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a40988686866040516119fd939291906126e6565b60405180910390a36040518481526000906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016118c0565b6001600160a01b038316611aa3576001600160a01b0382166000908152600b60209081526040808320600290925290912054611a8c9190611a879084905b90611b7a565b611e6b565b611a9e600c611a8783611a8160035490565b610cbc565b6001600160a01b038216611af9576001600160a01b0383166000908152600b60209081526040808320600290925290912054611ae79190611a879084905b90611e5f565b611a9e600c611a8783611ae160035490565b816001600160a01b0316836001600160a01b031614610cbc576001600160a01b0383166000908152600b60209081526040808320600290925290912054611b469190611a87908490611ae1565b6001600160a01b0382166000908152600b60209081526040808320600290925290912054610cbc9190611a87908490611a81565b60006108ed82846127cf565b60606000611b95836002612804565b611ba09060026127cf565b67ffffffffffffffff811115611bb857611bb8612276565b6040519080825280601f01601f191660200182016040528015611be2576020820181803683370190505b509050600360fc1b81600081518110611bfd57611bfd6127b9565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611c2c57611c2c6127b9565b60200101906001600160f81b031916908160001a9053506000611c50846002612804565b611c5b9060016127cf565b90505b6001811115611cd3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611c8f57611c8f6127b9565b1a60f81b828281518110611ca557611ca56127b9565b60200101906001600160f81b031916908160001a90535060049490941c93611ccc8161281b565b9050611c5e565b5083156108ed5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610655565b611d2c82826108f4565b610895576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055611d623390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006108ed836001600160a01b038416611f8c565b611dc582826108f4565b15610895576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006108ed836001600160a01b038416611fdb565b6000826000018281548110611e4c57611e4c6127b9565b9060005260206000200154905092915050565b60006108ed82846127a6565b6001600160801b03811115611eb55760405162461bcd60e51b815260206004820152601060248201526f63617374696e67206f766572666c6f7760801b6044820152606401610655565b8154801580611ef357504383611ecc6001846127a6565b81548110611edc57611edc6127b9565b6000918252602090912001546001600160801b0316105b15611f4457604080518082019091526001600160801b03438116825283811660208084019182528654600181018855600088815291909120935191518316600160801b029190921617910155505050565b8183611f516001846127a6565b81548110611f6157611f616127b9565b600091825260209091200180546001600160801b03928316600160801b029216919091179055505050565b6000818152600183016020526040812054611fd357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610524565b506000610524565b600081815260018301602052604081205480156120c4576000611fff6001836127a6565b8554909150600090612013906001906127a6565b9050818114612078576000866000018281548110612033576120336127b9565b9060005260206000200154905080876000018481548110612056576120566127b9565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061208957612089612832565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610524565b6000915050610524565b6000602082840312156120e057600080fd5b81356001600160e01b0319811681146108ed57600080fd5b6020808252825182820181905260009190848201906040850190845b818110156121395783516001600160a01b031683529284019291840191600101612114565b50909695505050505050565b60005b83811015612160578181015183820152602001612148565b50506000910152565b60008151808452612181816020860160208601612145565b601f01601f19169290920160200192915050565b6020815260006108ed6020830184612169565b6001600160a01b03811681146121bd57600080fd5b50565b600080604083850312156121d357600080fd5b82356121de816121a8565b946020939093013593505050565b60008060006060848603121561220157600080fd5b833561220c816121a8565b9250602084013561221c816121a8565b929592945050506040919091013590565b60006020828403121561223f57600080fd5b5035919050565b6000806040838503121561225957600080fd5b82359150602083013561226b816121a8565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261229d57600080fd5b813567ffffffffffffffff808211156122b8576122b8612276565b604051601f8301601f19908116603f011681019082821181831017156122e0576122e0612276565b816040528381528660208588010111156122f957600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a0868803121561233157600080fd5b853561233c816121a8565b9450602086013561234c816121a8565b935060408601359250606086013567ffffffffffffffff8082111561237057600080fd5b61237c89838a0161228c565b9350608088013591508082111561239257600080fd5b5061239f8882890161228c565b9150509295509295909350565b6000602082840312156123be57600080fd5b81356108ed816121a8565b600080604083850312156123dc57600080fd5b50508035926020909101359150565b80356001600160801b038116811461240257600080fd5b919050565b60006020828403121561241957600080fd5b6108ed826123eb565b60008060006060848603121561243757600080fd5b8335612442816121a8565b925060208401359150604084013567ffffffffffffffff81111561246557600080fd5b6124718682870161228c565b9150509250925092565b6000806040838503121561248e57600080fd5b8235612499816121a8565b9150602083013561226b816121a8565b600080600080608085870312156124bf57600080fd5b84356124ca816121a8565b935060208501359250604085013567ffffffffffffffff808211156124ee57600080fd5b6124fa8883890161228c565b9350606087013591508082111561251057600080fd5b5061251d8782880161228c565b91505092959194509250565b6000806040838503121561253c57600080fd5b8235612547816121a8565b9150612555602084016123eb565b90509250929050565b6000806040838503121561257157600080fd5b82359150602083013567ffffffffffffffff81111561258f57600080fd5b61259b8582860161228c565b9150509250929050565b600181811c908216806125b957607f821691505b6020821081036125d957634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526024908201527f4552433737373a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602c908201527f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60408201526b39103337b9103437b63232b960a11b606082015260800190565b60006020828403121561268157600080fd5b81516108ed816121a8565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c0608082018190526000906126c790830185612169565b82810360a08401526126d98185612169565b9998505050505050505050565b8381526060602082015260006126ff6060830185612169565b82810360408401526127118185612169565b9695505050505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612753816017850160208801612145565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612784816028840160208801612145565b01602801949350505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561052457610524612790565b634e487b7160e01b600052603260045260246000fd5b8082018082111561052457610524612790565b6000826127ff57634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761052457610524612790565b60008161282a5761282a612790565b506000190190565b634e487b7160e01b600052603160045260246000fdfe4552433737373a207472616e7366657220616d6f756e7420657863656564732062616c616e63654552433737373a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654552433737373a206275726e20616d6f756e7420657863656564732062616c616e6365a26469706673582212208318904979f95be032f995b75b0fa06184e9864778b434c6cc298f3a663bd80164736f6c63430008130033
1018    /// ```
1019    #[rustfmt::skip]
1020    #[allow(clippy::all)]
1021    pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
1022        b"`\x80`@R4\x80\x15b\0\0\x11W`\0\x80\xFD[P`@\x80Q\x80\x82\x01\x82R`\n\x81Ri$'\xA8)\x10*7\xB5\xB2\xB7`\xB1\x1B` \x80\x83\x01\x91\x90\x91R\x82Q\x80\x84\x01\x84R`\x05\x81Rd6\xA4'\xA8)`\xD9\x1B\x81\x83\x01R\x83Q`\0\x81R\x91\x82\x01\x90\x93R\x90\x91\x90`\x04b\0\0k\x84\x82b\0\x04\xBBV[P`\x05b\0\0z\x83\x82b\0\x04\xBBV[P\x80Qb\0\0\x90\x90`\x06\x90` \x84\x01\x90b\0\x03\x96V[P`\0[`\x06T\x81\x10\x15b\0\x01\x04W`\x01`\x07`\0`\x06\x84\x81T\x81\x10b\0\0\xBBWb\0\0\xBBb\0\x05\x87V[`\0\x91\x82R` \x80\x83 \x91\x90\x91\x01T`\x01`\x01`\xA0\x1B\x03\x16\x83R\x82\x01\x92\x90\x92R`@\x01\x90 \x80T`\xFF\x19\x16\x91\x15\x15\x91\x90\x91\x17\x90U\x80b\0\0\xFB\x81b\0\x05\x9DV[\x91PPb\0\0\x94V[P`@Qc)\x96Z\x1D`\xE0\x1B\x81R0`\x04\x82\x01\x81\x90R\x7F\xAC\x7F\xBA\xB5\xF5J<\xA8\x19AgR<gS\xBF\xEB\x96\xA4E'\x92\x94\xB6\x12[h\xCC\xE2\x17pT`$\x83\x01R`D\x82\x01Rs\x18 \xA4\xB7a\x8B\xDEq\xDC\xE8\xCD\xC7:\xABl\x95\x90_\xAD$\x90c)\x96Z\x1D\x90`d\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15b\0\x01\x7FW`\0\x80\xFD[PZ\xF1\x15\x80\x15b\0\x01\x94W=`\0\x80>=`\0\xFD[PP`@Qc)\x96Z\x1D`\xE0\x1B\x81R0`\x04\x82\x01\x81\x90R\x7F\xAE\xA1\x99\xE3\x1AYbi\xB4,\xDA\xFD\x93@\x7F\x14Cm\xB6\xE4\xCA\xD6T\x17\x99L.\xB3s\x81\xE0Z`$\x83\x01R`D\x82\x01Rs\x18 \xA4\xB7a\x8B\xDEq\xDC\xE8\xCD\xC7:\xABl\x95\x90_\xAD$\x92Pc)\x96Z\x1D\x91P`d\x01`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15b\0\x02\x12W`\0\x80\xFD[PZ\xF1\x15\x80\x15b\0\x02'W=`\0\x80>=`\0\xFD[PPPPPPPb\0\x02C`\0\x80\x1B3b\0\x02I` \x1B` \x1CV[b\0\x05\xC5V[b\0\x02U\x82\x82b\0\x02YV[PPV[b\0\x02e\x82\x82b\0\x02\x84V[`\0\x82\x81R`\x01` R`@\x90 b\0\x02\x7F\x90\x82b\0\x03$V[PPPV[`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 T`\xFF\x16b\0\x02UW`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ub\0\x02\xE03\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[`\0b\0\x03;\x83`\x01`\x01`\xA0\x1B\x03\x84\x16b\0\x03DV[\x90P[\x92\x91PPV[`\0\x81\x81R`\x01\x83\x01` R`@\x81 Tb\0\x03\x8DWP\x81T`\x01\x81\x81\x01\x84U`\0\x84\x81R` \x80\x82 \x90\x93\x01\x84\x90U\x84T\x84\x82R\x82\x86\x01\x90\x93R`@\x90 \x91\x90\x91Ub\0\x03>V[P`\0b\0\x03>V[\x82\x80T\x82\x82U\x90`\0R` `\0 \x90\x81\x01\x92\x82\x15b\0\x03\xEEW\x91` \x02\x82\x01[\x82\x81\x11\x15b\0\x03\xEEW\x82Q\x82T`\x01`\x01`\xA0\x1B\x03\x19\x16`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x17\x82U` \x90\x92\x01\x91`\x01\x90\x91\x01\x90b\0\x03\xB7V[Pb\0\x03\xFC\x92\x91Pb\0\x04\0V[P\x90V[[\x80\x82\x11\x15b\0\x03\xFCW`\0\x81U`\x01\x01b\0\x04\x01V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\x01\x81\x81\x1C\x90\x82\x16\x80b\0\x04BW`\x7F\x82\x16\x91P[` \x82\x10\x81\x03b\0\x04cWcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[`\x1F\x82\x11\x15b\0\x02\x7FW`\0\x81\x81R` \x81 `\x1F\x85\x01`\x05\x1C\x81\x01` \x86\x10\x15b\0\x04\x92WP\x80[`\x1F\x85\x01`\x05\x1C\x82\x01\x91P[\x81\x81\x10\x15b\0\x04\xB3W\x82\x81U`\x01\x01b\0\x04\x9EV[PPPPPPV[\x81Q`\x01`\x01`@\x1B\x03\x81\x11\x15b\0\x04\xD7Wb\0\x04\xD7b\0\x04\x17V[b\0\x04\xEF\x81b\0\x04\xE8\x84Tb\0\x04-V[\x84b\0\x04iV[` \x80`\x1F\x83\x11`\x01\x81\x14b\0\x05'W`\0\x84\x15b\0\x05\x0EWP\x85\x83\x01Q[`\0\x19`\x03\x86\x90\x1B\x1C\x19\x16`\x01\x85\x90\x1B\x17\x85Ub\0\x04\xB3V[`\0\x85\x81R` \x81 `\x1F\x19\x86\x16\x91[\x82\x81\x10\x15b\0\x05XW\x88\x86\x01Q\x82U\x94\x84\x01\x94`\x01\x90\x91\x01\x90\x84\x01b\0\x057V[P\x85\x82\x10\x15b\0\x05wW\x87\x85\x01Q`\0\x19`\x03\x88\x90\x1B`\xF8\x16\x1C\x19\x16\x81U[PPPPP`\x01\x90\x81\x1B\x01\x90UPV[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0`\x01\x82\x01b\0\x05\xBEWcNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[P`\x01\x01\x90V[a(\xF1\x80b\0\x05\xD5`\09`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x01\xFBW`\x005`\xE0\x1C\x80c\x94yu\xD9\x11a\x01\x1AW\x80c\xD59\x13\x93\x11a\0\xADW\x80c\xDDb\xED>\x11a\0|W\x80c\xDDb\xED>\x14a\x04zW\x80c\xF7r\xA0\x92\x14a\x04\xB3W\x80c\xFA\xD8\xB3*\x14a\x04\xC6W\x80c\xFCg<O\x14a\x04\xD9W\x80c\xFE\x9D\x93\x03\x14a\x04\xECW`\0\x80\xFD[\x80c\xD59\x13\x93\x14a\x04\x1AW\x80c\xD5Gt\x1F\x14a\x04AW\x80c\xD9[cq\x14a\x04TW\x80c\xDC\xDC}\xD0\x14a\x04gW`\0\x80\xFD[\x80c\xA2\x17\xFD\xDF\x11a\0\xE9W\x80c\xA2\x17\xFD\xDF\x14a\x03\xD9W\x80c\xA9\x05\x9C\xBB\x14a\x03\xE1W\x80c\xB7\xD7\x8B\x1A\x14a\x03\xF4W\x80c\xCA\x15\xC8s\x14a\x04\x07W`\0\x80\xFD[\x80c\x94yu\xD9\x14a\x03\x98W\x80c\x95\x9B\x8C?\x14a\x03\xABW\x80c\x95\xD8\x9BA\x14a\x03\xBEW\x80c\x9B\xD9\xBB\xC6\x14a\x03\xC6W`\0\x80\xFD[\x80c//\xF1]\x11a\x01\x92W\x80cb\xAD\x1B\x83\x11a\x01aW\x80cb\xAD\x1B\x83\x14a\x03\x1EW\x80cp\xA0\x821\x14a\x031W\x80c\x90\x10\xD0|\x14a\x03ZW\x80c\x91\xD1HT\x14a\x03\x85W`\0\x80\xFD[\x80c//\xF1]\x14a\x02\xE0W\x80c1<\xE5g\x14a\x02\xF5W\x80c6V\x8A\xBE\x14a\x03\x04W\x80cUo\r\xC7\x14a\x03\x17W`\0\x80\xFD[\x80c\x18\x16\r\xDD\x11a\x01\xCEW\x80c\x18\x16\r\xDD\x14a\x02eW\x80c#\xB8r\xDD\x14a\x02wW\x80c$\x8A\x9C\xA3\x14a\x02\x8AW\x80c$\x97\xAE\xE6\x14a\x02\xADW`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\x02\0W\x80c\x06\xE4\x858\x14a\x02(W\x80c\x06\xFD\xDE\x03\x14a\x02=W\x80c\t^\xA7\xB3\x14a\x02RW[`\0\x80\xFD[a\x02\x13a\x02\x0E6`\x04a \xCEV[a\x04\xFFV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x020a\x05*V[`@Qa\x02\x1F\x91\x90a \xF8V[a\x02Ea\x05\x8CV[`@Qa\x02\x1F\x91\x90a!\x95V[a\x02\x13a\x02`6`\x04a!\xC0V[a\x06\x15V[`\x03T[`@Q\x90\x81R` \x01a\x02\x1FV[a\x02\x13a\x02\x856`\x04a!\xECV[a\x06-V[a\x02ia\x02\x986`\x04a\"-V[`\0\x90\x81R` \x81\x90R`@\x90 `\x01\x01T\x90V[a\x02\xC0a\x02\xBB6`\x04a!\xC0V[a\x07\xADV[`@\x80Q`\x01`\x01`\x80\x1B\x03\x93\x84\x16\x81R\x92\x90\x91\x16` \x83\x01R\x01a\x02\x1FV[a\x02\xF3a\x02\xEE6`\x04a\"FV[a\x07\xF0V[\0[`@Q`\x12\x81R` \x01a\x02\x1FV[a\x02\xF3a\x03\x126`\x04a\"FV[a\x08\x1BV[`\x01a\x02iV[a\x02\xF3a\x03,6`\x04a#\x19V[a\x08\x99V[a\x02ia\x03?6`\x04a#\xACV[`\x01`\x01`\xA0\x1B\x03\x16`\0\x90\x81R`\x02` R`@\x90 T\x90V[a\x03ma\x03h6`\x04a#\xC9V[a\x08\xD5V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x02\x1FV[a\x02\x13a\x03\x936`\x04a\"FV[a\x08\xF4V[a\x02ia\x03\xA66`\x04a$\x07V[a\t\x1DV[a\x02\xF3a\x03\xB96`\x04a#\xACV[a\t*V[a\x02Ea\nGV[a\x02\xF3a\x03\xD46`\x04a$\"V[a\nVV[a\x02i`\0\x81V[a\x02\x13a\x03\xEF6`\x04a!\xC0V[a\ntV[a\x02\xC0a\x04\x026`\x04a\"-V[a\x0B'V[a\x02ia\x04\x156`\x04a\"-V[a\x0B\\V[a\x02i\x7F\x9F-\xF0\xFE\xD2\xC7vH\xDEX`\xA4\xCCP\x8C\xD0\x81\x8C\x85\xB8\xB8\xA1\xABL\xEE\xEF\x8D\x98\x1C\x89V\xA6\x81V[a\x02\xF3a\x04O6`\x04a\"FV[a\x0BsV[a\x02\x13a\x04b6`\x04a${V[a\x0B\x99V[a\x02\xF3a\x04u6`\x04a$\xA9V[a\x0C:V[a\x02ia\x04\x886`\x04a${V[`\x01`\x01`\xA0\x1B\x03\x91\x82\x16`\0\x90\x81R`\n` \x90\x81R`@\x80\x83 \x93\x90\x94\x16\x82R\x91\x90\x91R T\x90V[a\x02ia\x04\xC16`\x04a%)V[a\x0C\xC2V[a\x02\xF3a\x04\xD46`\x04a#\xACV[a\x0C\xE4V[a\x02\xF3a\x04\xE76`\x04a$\xA9V[a\r\xFFV[a\x02\xF3a\x04\xFA6`\x04a%^V[a\x0E1V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cZ\x05\x18\x0F`\xE0\x1B\x14\x80a\x05$WPa\x05$\x82a\x0ELV[\x92\x91PPV[```\x06\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x05\x82W` \x02\x82\x01\x91\x90`\0R` `\0 \x90[\x81T`\x01`\x01`\xA0\x1B\x03\x16\x81R`\x01\x90\x91\x01\x90` \x01\x80\x83\x11a\x05dW[PPPPP\x90P\x90V[```\x04\x80Ta\x05\x9B\x90a%\xA5V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x05\xC7\x90a%\xA5V[\x80\x15a\x05\x82W\x80`\x1F\x10a\x05\xE9Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x05\x82V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x05\xF7WP\x93\x95\x94PPPPPV[`\x003a\x06#\x81\x85\x85a\x0E\x81V[P`\x01\x93\x92PPPV[`\0`\x01`\x01`\xA0\x1B\x03\x83\x16a\x06^W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06U\x90a%\xDFV[`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x84\x16a\x06\xC3W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FERC777: transfer from the zero a`D\x82\x01Reddress`\xD0\x1B`d\x82\x01R`\x84\x01a\x06UV[`\x003\x90Pa\x06\xF4\x81\x86\x86\x86`@Q\x80` \x01`@R\x80`\0\x81RP`@Q\x80` \x01`@R\x80`\0\x81RPa\x0F\xA8V[a\x07 \x81\x86\x86\x86`@Q\x80` \x01`@R\x80`\0\x81RP`@Q\x80` \x01`@R\x80`\0\x81RPa\x10\xD0V[a\x07t\x85\x82a\x07o\x86`@Q\x80``\x01`@R\x80`)\x81R` \x01a(p`)\x919`\x01`\x01`\xA0\x1B\x03\x80\x8C\x16`\0\x90\x81R`\n` \x90\x81R`@\x80\x83 \x93\x8B\x16\x83R\x92\x90R T\x91\x90a\x11\xFEV[a\x0E\x81V[a\x07\xA2\x81\x86\x86\x86`@Q\x80` \x01`@R\x80`\0\x81RP`@Q\x80` \x01`@R\x80`\0\x81RP`\0a\x12*V[P`\x01\x94\x93PPPPV[`\x0B` R\x81`\0R`@`\0 \x81\x81T\x81\x10a\x07\xC9W`\0\x80\xFD[`\0\x91\x82R` \x90\x91 \x01T`\x01`\x01`\x80\x1B\x03\x80\x82\x16\x93P`\x01`\x80\x1B\x90\x91\x04\x16\x90P\x82V[`\0\x82\x81R` \x81\x90R`@\x90 `\x01\x01Ta\x08\x0C\x813a\x13\xEFV[a\x08\x16\x83\x83a\x14SV[PPPV[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\x08\x8BW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01a\x06UV[a\x08\x95\x82\x82a\x14uV[PPV[a\x08\xA33\x86a\x0B\x99V[a\x08\xBFW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06U\x90a&#V[a\x08\xCE\x85\x85\x85\x85\x85`\x01a\x14\x97V[PPPPPV[`\0\x82\x81R`\x01` R`@\x81 a\x08\xED\x90\x83a\x15zV[\x93\x92PPPV[`\0\x91\x82R` \x82\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[`\0a\x05$`\x0C\x83a\x15\x86V[`\x01`\x01`\xA0\x1B\x03\x81\x163\x03a\t\x8EW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`$\x80\x82\x01R\x7FERC777: authorizing self as oper`D\x82\x01Rc0\xBA7\xB9`\xE1\x1B`d\x82\x01R`\x84\x01a\x06UV[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x90\x81R`\x07` R`@\x90 T`\xFF\x16\x15a\t\xDFW3`\0\x90\x81R`\t` \x90\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16\x90Ua\n\x0EV[3`\0\x90\x81R`\x08` \x90\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90U[`@Q3\x90`\x01`\x01`\xA0\x1B\x03\x83\x16\x90\x7F\xF4\xCA\xEB-l\xA8\x93*!Z5=\x07\x03\xC3&\xEC-\x81\xFCh\x17\x0F2\x0E\xB2\xABI\xE9\xDFa\xF9\x90`\0\x90\xA3PV[```\x05\x80Ta\x05\x9B\x90a%\xA5V[a\x08\x163\x84\x84\x84`@Q\x80` \x01`@R\x80`\0\x81RP`\x01a\x14\x97V[`\0`\x01`\x01`\xA0\x1B\x03\x83\x16a\n\x9CW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06U\x90a%\xDFV[`\x003\x90Pa\n\xCD\x81\x82\x86\x86`@Q\x80` \x01`@R\x80`\0\x81RP`@Q\x80` \x01`@R\x80`\0\x81RPa\x0F\xA8V[a\n\xF9\x81\x82\x86\x86`@Q\x80` \x01`@R\x80`\0\x81RP`@Q\x80` \x01`@R\x80`\0\x81RPa\x10\xD0V[a\x06#\x81\x82\x86\x86`@Q\x80` \x01`@R\x80`\0\x81RP`@Q\x80` \x01`@R\x80`\0\x81RP`\0a\x12*V[`\x0C\x81\x81T\x81\x10a\x0B7W`\0\x80\xFD[`\0\x91\x82R` \x90\x91 \x01T`\x01`\x01`\x80\x1B\x03\x80\x82\x16\x92P`\x01`\x80\x1B\x90\x91\x04\x16\x82V[`\0\x81\x81R`\x01` R`@\x81 a\x05$\x90a\x17iV[`\0\x82\x81R` \x81\x90R`@\x90 `\x01\x01Ta\x0B\x8F\x813a\x13\xEFV[a\x08\x16\x83\x83a\x14uV[`\0\x81`\x01`\x01`\xA0\x1B\x03\x16\x83`\x01`\x01`\xA0\x1B\x03\x16\x14\x80a\x0C\x04WP`\x01`\x01`\xA0\x1B\x03\x83\x16`\0\x90\x81R`\x07` R`@\x90 T`\xFF\x16\x80\x15a\x0C\x04WP`\x01`\x01`\xA0\x1B\x03\x80\x83\x16`\0\x90\x81R`\t` \x90\x81R`@\x80\x83 \x93\x87\x16\x83R\x92\x90R T`\xFF\x16\x15[\x80a\x08\xEDWPP`\x01`\x01`\xA0\x1B\x03\x90\x81\x16`\0\x90\x81R`\x08` \x90\x81R`@\x80\x83 \x94\x90\x93\x16\x82R\x92\x90\x92R\x90 T`\xFF\x16\x90V[a\x0Cd\x7F\x9F-\xF0\xFE\xD2\xC7vH\xDEX`\xA4\xCCP\x8C\xD0\x81\x8C\x85\xB8\xB8\xA1\xABL\xEE\xEF\x8D\x98\x1C\x89V\xA63a\x08\xF4V[a\x0C\xB0W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7Fcaller does not have minter role`D\x82\x01R`d\x01a\x06UV[a\x0C\xBC\x84\x84\x84\x84a\x17sV[PPPPV[`\x01`\x01`\xA0\x1B\x03\x82\x16`\0\x90\x81R`\x0B` R`@\x81 a\x08\xED\x90\x83a\x15\x86V[3`\x01`\x01`\xA0\x1B\x03\x82\x16\x03a\rFW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`!`$\x82\x01R\x7FERC777: revoking self as operato`D\x82\x01R`9`\xF9\x1B`d\x82\x01R`\x84\x01a\x06UV[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x90\x81R`\x07` R`@\x90 T`\xFF\x16\x15a\r\x9AW3`\0\x90\x81R`\t` \x90\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\r\xC6V[3`\0\x90\x81R`\x08` \x90\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16\x90U[`@Q3\x90`\x01`\x01`\xA0\x1B\x03\x83\x16\x90\x7FPTnf\xE5\xF4Mr\x83e\xDC9\x08\xC6;\xC5\xCF\xEE\xABG\x07\"\xC1g~0s\xA6\xAC)J\xA1\x90`\0\x90\xA3PV[a\x0E\t3\x85a\x0B\x99V[a\x0E%W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06U\x90a&#V[a\x0C\xBC\x84\x84\x84\x84a\x18\xCFV[a\x08\x953\x83\x83`@Q\x80` \x01`@R\x80`\0\x81RPa\x18\xCFV[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x05$WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14a\x05$V[`\x01`\x01`\xA0\x1B\x03\x83\x16a\x0E\xE5W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FERC777: approve from the zero ad`D\x82\x01Rddress`\xD8\x1B`d\x82\x01R`\x84\x01a\x06UV[`\x01`\x01`\xA0\x1B\x03\x82\x16a\x0FGW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`#`$\x82\x01R\x7FERC777: approve to the zero addr`D\x82\x01Rbess`\xE8\x1B`d\x82\x01R`\x84\x01a\x06UV[`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\0\x81\x81R`\n` \x90\x81R`@\x80\x83 \x94\x87\x16\x80\x84R\x94\x82R\x91\x82\x90 \x85\x90U\x90Q\x84\x81R\x7F\x8C[\xE1\xE5\xEB\xEC}[\xD1OqB}\x1E\x84\xF3\xDD\x03\x14\xC0\xF7\xB2)\x1E[ \n\xC8\xC7\xC3\xB9%\x91\x01`@Q\x80\x91\x03\x90\xA3PPPV[`@QcU]\xDCe`\xE1\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x86\x16`\x04\x82\x01R\x7F)\xDD\xB5\x89\xB1\xFB_\xC7\xCF9Ia\xC1\xAD\xF5\xF8\xC6EGa\xAD\xF7\x95\xE6\x7F\xE1I\xF6X\xAB\xE8\x95`$\x82\x01R`\0\x90s\x18 \xA4\xB7a\x8B\xDEq\xDC\xE8\xCD\xC7:\xABl\x95\x90_\xAD$\x90c\xAA\xBB\xB8\xCA\x90`D\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x10)W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10M\x91\x90a&oV[\x90P`\x01`\x01`\xA0\x1B\x03\x81\x16\x15a\x10\xC7W`@Qc:\xD5\xCB\xC1`\xE1\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x82\x16\x90cu\xAB\x97\x82\x90a\x10\x94\x90\x8A\x90\x8A\x90\x8A\x90\x8A\x90\x8A\x90\x8A\x90`\x04\x01a&\x8CV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x10\xAEW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x10\xC2W=`\0\x80>=`\0\xFD[PPPP[PPPPPPPV[a\x10\xDC\x86\x86\x86\x86a\x1ACV[a\x11\x19\x83`@Q\x80``\x01`@R\x80`'\x81R` \x01a(I`'\x919`\x01`\x01`\xA0\x1B\x03\x88\x16`\0\x90\x81R`\x02` R`@\x90 T\x91\x90a\x11\xFEV[`\x01`\x01`\xA0\x1B\x03\x80\x87\x16`\0\x90\x81R`\x02` R`@\x80\x82 \x93\x90\x93U\x90\x86\x16\x81R Ta\x11H\x90\x84a\x1BzV[`\x01`\x01`\xA0\x1B\x03\x80\x86\x16`\0\x81\x81R`\x02` R`@\x90\x81\x90 \x93\x90\x93U\x91Q\x87\x82\x16\x91\x89\x16\x90\x7F\x06\xB5A\xDD\xAAr\r\xB2\xB1\nM\x0C\xDA\xC3\x9B\x8D6\x04%\xFC\x070\x85\xFA\xC1\x9B\xC8&\x14gy\x87\x90a\x11\xA1\x90\x88\x90\x88\x90\x88\x90a&\xE6V[`@Q\x80\x91\x03\x90\xA4\x83`\x01`\x01`\xA0\x1B\x03\x16\x85`\x01`\x01`\xA0\x1B\x03\x16\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x85`@Qa\x11\xEE\x91\x81R` \x01\x90V[`@Q\x80\x91\x03\x90\xA3PPPPPPV[`\0\x81\x84\x84\x11\x15a\x12\"W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06U\x91\x90a!\x95V[PPP\x90\x03\x90V[`@QcU]\xDCe`\xE1\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x86\x16`\x04\x82\x01R\x7F\xB2\x81\xFC\x8C\x12\x95M\"TM\xB4]\xE3\x15\x9A9'(\x95\xB1i\xA8R\xB3\x14\xF9\xCCv.D\xC5;`$\x82\x01R`\0\x90s\x18 \xA4\xB7a\x8B\xDEq\xDC\xE8\xCD\xC7:\xABl\x95\x90_\xAD$\x90c\xAA\xBB\xB8\xCA\x90`D\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x12\xABW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x12\xCF\x91\x90a&oV[\x90P`\x01`\x01`\xA0\x1B\x03\x81\x16\x15a\x13KW`@Qb#\xDE)`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x82\x16\x90b#\xDE)\x90a\x13\x14\x90\x8B\x90\x8B\x90\x8B\x90\x8B\x90\x8B\x90\x8B\x90`\x04\x01a&\x8CV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x13.W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x13BW=`\0\x80>=`\0\xFD[PPPPa\x13\xE5V[\x81\x15a\x13\xE5W`\x01`\x01`\xA0\x1B\x03\x86\x16;\x15a\x13\xE5W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`M`$\x82\x01R\x7FERC777: token recipient contract`D\x82\x01R\x7F has no implementer for ERC777To`d\x82\x01Rl\x1A\xD9[\x9C\xD4\x99X\xDA\\\x1AY[\x9D`\x9A\x1B`\x84\x82\x01R`\xA4\x01a\x06UV[PPPPPPPPV[a\x13\xF9\x82\x82a\x08\xF4V[a\x08\x95Wa\x14\x11\x81`\x01`\x01`\xA0\x1B\x03\x16`\x14a\x1B\x86V[a\x14\x1C\x83` a\x1B\x86V[`@Q` \x01a\x14-\x92\x91\x90a'\x1BV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x06U\x91`\x04\x01a!\x95V[a\x14]\x82\x82a\x1D\"V[`\0\x82\x81R`\x01` R`@\x90 a\x08\x16\x90\x82a\x1D\xA6V[a\x14\x7F\x82\x82a\x1D\xBBV[`\0\x82\x81R`\x01` R`@\x90 a\x08\x16\x90\x82a\x1E V[`\x01`\x01`\xA0\x1B\x03\x86\x16a\x14\xF8W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FERC777: send from the zero addre`D\x82\x01Rass`\xF0\x1B`d\x82\x01R`\x84\x01a\x06UV[`\x01`\x01`\xA0\x1B\x03\x85\x16a\x15NW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FERC777: send to the zero address`D\x82\x01R`d\x01a\x06UV[3a\x15]\x81\x88\x88\x88\x88\x88a\x0F\xA8V[a\x15k\x81\x88\x88\x88\x88\x88a\x10\xD0V[a\x10\xC7\x81\x88\x88\x88\x88\x88\x88a\x12*V[`\0a\x08\xED\x83\x83a\x1E5V[\x81T`\0\x90\x80\x82\x03a\x15\x9CW`\0\x91PPa\x05$V[\x83a\x15\xA8`\x01\x83a'\xA6V[\x81T\x81\x10a\x15\xB8Wa\x15\xB8a'\xB9V[`\0\x91\x82R` \x90\x91 \x01T`\x01`\x01`\x80\x1B\x03\x90\x81\x16\x90\x84\x16\x10a\x16\x18W\x83a\x15\xE3`\x01\x83a'\xA6V[\x81T\x81\x10a\x15\xF3Wa\x15\xF3a'\xB9V[`\0\x91\x82R` \x90\x91 \x01T`\x01`\x80\x1B\x90\x04`\x01`\x01`\x80\x1B\x03\x16\x91Pa\x05$\x90PV[\x83`\0\x81T\x81\x10a\x16+Wa\x16+a'\xB9V[`\0\x91\x82R` \x90\x91 \x01T`\x01`\x01`\x80\x1B\x03\x90\x81\x16\x90\x84\x16\x10\x15a\x16UW`\0\x91PPa\x05$V[`\0\x80a\x16c`\x01\x84a'\xA6V[\x90P[\x81\x81\x11\x15a\x171W`\0`\x02a\x16|\x84\x84a'\xCFV[a\x16\x87\x90`\x01a'\xCFV[a\x16\x91\x91\x90a'\xE2V[\x90P`\0\x87\x82\x81T\x81\x10a\x16\xA7Wa\x16\xA7a'\xB9V[`\0\x91\x82R` \x90\x91 \x01T`\x01`\x01`\x80\x1B\x03\x90\x81\x16\x91P\x87\x16\x81\x03a\x17\x03W\x87\x82\x81T\x81\x10a\x16\xDAWa\x16\xDAa'\xB9V[`\0\x91\x82R` \x90\x91 \x01T`\x01`\x80\x1B\x90\x04`\x01`\x01`\x80\x1B\x03\x16\x95Pa\x05$\x94PPPPPV[\x86`\x01`\x01`\x80\x1B\x03\x16\x81\x10\x15a\x17\x1CW\x81\x93Pa\x17*V[a\x17'`\x01\x83a'\xA6V[\x92P[PPa\x16fV[\x85\x82\x81T\x81\x10a\x17CWa\x17Ca'\xB9V[`\0\x91\x82R` \x90\x91 \x01T`\x01`\x80\x1B\x90\x04`\x01`\x01`\x80\x1B\x03\x16\x96\x95PPPPPPV[`\0a\x05$\x82T\x90V[`\x01`\x01`\xA0\x1B\x03\x84\x16a\x17\xC9W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FERC777: mint to the zero address`D\x82\x01R`d\x01a\x06UV[3a\x17\xD7\x81`\0\x87\x87a\x1ACV[`\x03Ta\x17\xE4\x90\x85a\x1BzV[`\x03U`\x01`\x01`\xA0\x1B\x03\x85\x16`\0\x90\x81R`\x02` R`@\x90 Ta\x18\n\x90\x85a\x1BzV[`\x01`\x01`\xA0\x1B\x03\x86\x16`\0\x90\x81R`\x02` R`@\x81 \x91\x90\x91Ua\x187\x90\x82\x90\x87\x87\x87\x87`\x01a\x12*V[\x84`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x7F/\xE5\xBE\x01F\xF7L[\xCE6\xC0\xB8\t\x11\xAFl}\x86\xFF'\xE8\x9D\\\xFAa\xFCh\x13'\x95N]\x86\x86\x86`@Qa\x18~\x93\x92\x91\x90a&\xE6V[`@Q\x80\x91\x03\x90\xA3`@Q\x84\x81R`\x01`\x01`\xA0\x1B\x03\x86\x16\x90`\0\x90\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x90` \x01[`@Q\x80\x91\x03\x90\xA3PPPPPV[`\x01`\x01`\xA0\x1B\x03\x84\x16a\x190W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FERC777: burn from the zero addre`D\x82\x01Rass`\xF0\x1B`d\x82\x01R`\x84\x01a\x06UV[3a\x19@\x81\x86`\0\x87\x87\x87a\x0F\xA8V[a\x19M\x81\x86`\0\x87a\x1ACV[a\x19\x8A\x84`@Q\x80``\x01`@R\x80`#\x81R` \x01a(\x99`#\x919`\x01`\x01`\xA0\x1B\x03\x88\x16`\0\x90\x81R`\x02` R`@\x90 T\x91\x90a\x11\xFEV[`\x01`\x01`\xA0\x1B\x03\x86\x16`\0\x90\x81R`\x02` R`@\x90 U`\x03Ta\x19\xB0\x90\x85a\x1E_V[`\x03\x81\x90UP\x84`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x7F\xA7\x8A\x9B\xE3\xA7\xB8b\xD2i3\xAD\x85\xFB\x11\xD8\x0E\xF6k\x8F\x97-|\xBB\xA0f!\xD5\x83\x94:@\x98\x86\x86\x86`@Qa\x19\xFD\x93\x92\x91\x90a&\xE6V[`@Q\x80\x91\x03\x90\xA3`@Q\x84\x81R`\0\x90`\x01`\x01`\xA0\x1B\x03\x87\x16\x90\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x90` \x01a\x18\xC0V[`\x01`\x01`\xA0\x1B\x03\x83\x16a\x1A\xA3W`\x01`\x01`\xA0\x1B\x03\x82\x16`\0\x90\x81R`\x0B` \x90\x81R`@\x80\x83 `\x02\x90\x92R\x90\x91 Ta\x1A\x8C\x91\x90a\x1A\x87\x90\x84\x90[\x90a\x1BzV[a\x1EkV[a\x1A\x9E`\x0Ca\x1A\x87\x83a\x1A\x81`\x03T\x90V[a\x0C\xBCV[`\x01`\x01`\xA0\x1B\x03\x82\x16a\x1A\xF9W`\x01`\x01`\xA0\x1B\x03\x83\x16`\0\x90\x81R`\x0B` \x90\x81R`@\x80\x83 `\x02\x90\x92R\x90\x91 Ta\x1A\xE7\x91\x90a\x1A\x87\x90\x84\x90[\x90a\x1E_V[a\x1A\x9E`\x0Ca\x1A\x87\x83a\x1A\xE1`\x03T\x90V[\x81`\x01`\x01`\xA0\x1B\x03\x16\x83`\x01`\x01`\xA0\x1B\x03\x16\x14a\x0C\xBCW`\x01`\x01`\xA0\x1B\x03\x83\x16`\0\x90\x81R`\x0B` \x90\x81R`@\x80\x83 `\x02\x90\x92R\x90\x91 Ta\x1BF\x91\x90a\x1A\x87\x90\x84\x90a\x1A\xE1V[`\x01`\x01`\xA0\x1B\x03\x82\x16`\0\x90\x81R`\x0B` \x90\x81R`@\x80\x83 `\x02\x90\x92R\x90\x91 Ta\x0C\xBC\x91\x90a\x1A\x87\x90\x84\x90a\x1A\x81V[`\0a\x08\xED\x82\x84a'\xCFV[```\0a\x1B\x95\x83`\x02a(\x04V[a\x1B\xA0\x90`\x02a'\xCFV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1B\xB8Wa\x1B\xB8a\"vV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x1B\xE2W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\x1B\xFDWa\x1B\xFDa'\xB9V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\x1C,Wa\x1C,a'\xB9V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\x1CP\x84`\x02a(\x04V[a\x1C[\x90`\x01a'\xCFV[\x90P[`\x01\x81\x11\x15a\x1C\xD3Wo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\x1C\x8FWa\x1C\x8Fa'\xB9V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\x1C\xA5Wa\x1C\xA5a'\xB9V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\x1C\xCC\x81a(\x1BV[\x90Pa\x1C^V[P\x83\x15a\x08\xEDW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x06UV[a\x1D,\x82\x82a\x08\xF4V[a\x08\x95W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x1Db3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[`\0a\x08\xED\x83`\x01`\x01`\xA0\x1B\x03\x84\x16a\x1F\x8CV[a\x1D\xC5\x82\x82a\x08\xF4V[\x15a\x08\x95W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[`\0a\x08\xED\x83`\x01`\x01`\xA0\x1B\x03\x84\x16a\x1F\xDBV[`\0\x82`\0\x01\x82\x81T\x81\x10a\x1ELWa\x1ELa'\xB9V[\x90`\0R` `\0 \x01T\x90P\x92\x91PPV[`\0a\x08\xED\x82\x84a'\xA6V[`\x01`\x01`\x80\x1B\x03\x81\x11\x15a\x1E\xB5W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x10`$\x82\x01Rocasting overflow`\x80\x1B`D\x82\x01R`d\x01a\x06UV[\x81T\x80\x15\x80a\x1E\xF3WPC\x83a\x1E\xCC`\x01\x84a'\xA6V[\x81T\x81\x10a\x1E\xDCWa\x1E\xDCa'\xB9V[`\0\x91\x82R` \x90\x91 \x01T`\x01`\x01`\x80\x1B\x03\x16\x10[\x15a\x1FDW`@\x80Q\x80\x82\x01\x90\x91R`\x01`\x01`\x80\x1B\x03C\x81\x16\x82R\x83\x81\x16` \x80\x84\x01\x91\x82R\x86T`\x01\x81\x01\x88U`\0\x88\x81R\x91\x90\x91 \x93Q\x91Q\x83\x16`\x01`\x80\x1B\x02\x91\x90\x92\x16\x17\x91\x01UPPPV[\x81\x83a\x1FQ`\x01\x84a'\xA6V[\x81T\x81\x10a\x1FaWa\x1Faa'\xB9V[`\0\x91\x82R` \x90\x91 \x01\x80T`\x01`\x01`\x80\x1B\x03\x92\x83\x16`\x01`\x80\x1B\x02\x92\x16\x91\x90\x91\x17\x90UPPPV[`\0\x81\x81R`\x01\x83\x01` R`@\x81 Ta\x1F\xD3WP\x81T`\x01\x81\x81\x01\x84U`\0\x84\x81R` \x80\x82 \x90\x93\x01\x84\x90U\x84T\x84\x82R\x82\x86\x01\x90\x93R`@\x90 \x91\x90\x91Ua\x05$V[P`\0a\x05$V[`\0\x81\x81R`\x01\x83\x01` R`@\x81 T\x80\x15a \xC4W`\0a\x1F\xFF`\x01\x83a'\xA6V[\x85T\x90\x91P`\0\x90a \x13\x90`\x01\x90a'\xA6V[\x90P\x81\x81\x14a xW`\0\x86`\0\x01\x82\x81T\x81\x10a 3Wa 3a'\xB9V[\x90`\0R` `\0 \x01T\x90P\x80\x87`\0\x01\x84\x81T\x81\x10a VWa Va'\xB9V[`\0\x91\x82R` \x80\x83 \x90\x91\x01\x92\x90\x92U\x91\x82R`\x01\x88\x01\x90R`@\x90 \x83\x90U[\x85T\x86\x90\x80a \x89Wa \x89a(2V[`\x01\x90\x03\x81\x81\x90`\0R` `\0 \x01`\0\x90U\x90U\x85`\x01\x01`\0\x86\x81R` \x01\x90\x81R` \x01`\0 `\0\x90U`\x01\x93PPPPa\x05$V[`\0\x91PPa\x05$V[`\0` \x82\x84\x03\x12\x15a \xE0W`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x08\xEDW`\0\x80\xFD[` \x80\x82R\x82Q\x82\x82\x01\x81\x90R`\0\x91\x90\x84\x82\x01\x90`@\x85\x01\x90\x84[\x81\x81\x10\x15a!9W\x83Q`\x01`\x01`\xA0\x1B\x03\x16\x83R\x92\x84\x01\x92\x91\x84\x01\x91`\x01\x01a!\x14V[P\x90\x96\x95PPPPPPV[`\0[\x83\x81\x10\x15a!`W\x81\x81\x01Q\x83\x82\x01R` \x01a!HV[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra!\x81\x81` \x86\x01` \x86\x01a!EV[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[` \x81R`\0a\x08\xED` \x83\x01\x84a!iV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a!\xBDW`\0\x80\xFD[PV[`\0\x80`@\x83\x85\x03\x12\x15a!\xD3W`\0\x80\xFD[\x825a!\xDE\x81a!\xA8V[\x94` \x93\x90\x93\x015\x93PPPV[`\0\x80`\0``\x84\x86\x03\x12\x15a\"\x01W`\0\x80\xFD[\x835a\"\x0C\x81a!\xA8V[\x92P` \x84\x015a\"\x1C\x81a!\xA8V[\x92\x95\x92\x94PPP`@\x91\x90\x91\x015\x90V[`\0` \x82\x84\x03\x12\x15a\"?W`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\"YW`\0\x80\xFD[\x825\x91P` \x83\x015a\"k\x81a!\xA8V[\x80\x91PP\x92P\x92\x90PV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0\x82`\x1F\x83\x01\x12a\"\x9DW`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\"\xB8Wa\"\xB8a\"vV[`@Q`\x1F\x83\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x82\x82\x11\x81\x83\x10\x17\x15a\"\xE0Wa\"\xE0a\"vV[\x81`@R\x83\x81R\x86` \x85\x88\x01\x01\x11\x15a\"\xF9W`\0\x80\xFD[\x83` \x87\x01` \x83\x017`\0` \x85\x83\x01\x01R\x80\x94PPPPP\x92\x91PPV[`\0\x80`\0\x80`\0`\xA0\x86\x88\x03\x12\x15a#1W`\0\x80\xFD[\x855a#<\x81a!\xA8V[\x94P` \x86\x015a#L\x81a!\xA8V[\x93P`@\x86\x015\x92P``\x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a#pW`\0\x80\xFD[a#|\x89\x83\x8A\x01a\"\x8CV[\x93P`\x80\x88\x015\x91P\x80\x82\x11\x15a#\x92W`\0\x80\xFD[Pa#\x9F\x88\x82\x89\x01a\"\x8CV[\x91PP\x92\x95P\x92\x95\x90\x93PV[`\0` \x82\x84\x03\x12\x15a#\xBEW`\0\x80\xFD[\x815a\x08\xED\x81a!\xA8V[`\0\x80`@\x83\x85\x03\x12\x15a#\xDCW`\0\x80\xFD[PP\x805\x92` \x90\x91\x015\x91PV[\x805`\x01`\x01`\x80\x1B\x03\x81\x16\x81\x14a$\x02W`\0\x80\xFD[\x91\x90PV[`\0` \x82\x84\x03\x12\x15a$\x19W`\0\x80\xFD[a\x08\xED\x82a#\xEBV[`\0\x80`\0``\x84\x86\x03\x12\x15a$7W`\0\x80\xFD[\x835a$B\x81a!\xA8V[\x92P` \x84\x015\x91P`@\x84\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a$eW`\0\x80\xFD[a$q\x86\x82\x87\x01a\"\x8CV[\x91PP\x92P\x92P\x92V[`\0\x80`@\x83\x85\x03\x12\x15a$\x8EW`\0\x80\xFD[\x825a$\x99\x81a!\xA8V[\x91P` \x83\x015a\"k\x81a!\xA8V[`\0\x80`\0\x80`\x80\x85\x87\x03\x12\x15a$\xBFW`\0\x80\xFD[\x845a$\xCA\x81a!\xA8V[\x93P` \x85\x015\x92P`@\x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a$\xEEW`\0\x80\xFD[a$\xFA\x88\x83\x89\x01a\"\x8CV[\x93P``\x87\x015\x91P\x80\x82\x11\x15a%\x10W`\0\x80\xFD[Pa%\x1D\x87\x82\x88\x01a\"\x8CV[\x91PP\x92\x95\x91\x94P\x92PV[`\0\x80`@\x83\x85\x03\x12\x15a%<W`\0\x80\xFD[\x825a%G\x81a!\xA8V[\x91Pa%U` \x84\x01a#\xEBV[\x90P\x92P\x92\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a%qW`\0\x80\xFD[\x825\x91P` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a%\x8FW`\0\x80\xFD[a%\x9B\x85\x82\x86\x01a\"\x8CV[\x91PP\x92P\x92\x90PV[`\x01\x81\x81\x1C\x90\x82\x16\x80a%\xB9W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a%\xD9WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[` \x80\x82R`$\x90\x82\x01R\x7FERC777: transfer to the zero add`@\x82\x01Rcress`\xE0\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`,\x90\x82\x01R\x7FERC777: caller is not an operato`@\x82\x01Rk9\x1037\xB9\x1047\xB622\xB9`\xA1\x1B``\x82\x01R`\x80\x01\x90V[`\0` \x82\x84\x03\x12\x15a&\x81W`\0\x80\xFD[\x81Qa\x08\xED\x81a!\xA8V[`\x01`\x01`\xA0\x1B\x03\x87\x81\x16\x82R\x86\x81\x16` \x83\x01R\x85\x16`@\x82\x01R``\x81\x01\x84\x90R`\xC0`\x80\x82\x01\x81\x90R`\0\x90a&\xC7\x90\x83\x01\x85a!iV[\x82\x81\x03`\xA0\x84\x01Ra&\xD9\x81\x85a!iV[\x99\x98PPPPPPPPPV[\x83\x81R``` \x82\x01R`\0a&\xFF``\x83\x01\x85a!iV[\x82\x81\x03`@\x84\x01Ra'\x11\x81\x85a!iV[\x96\x95PPPPPPV[\x7FAccessControl: account \0\0\0\0\0\0\0\0\0\x81R`\0\x83Qa'S\x81`\x17\x85\x01` \x88\x01a!EV[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa'\x84\x81`(\x84\x01` \x88\x01a!EV[\x01`(\x01\x94\x93PPPPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x81\x81\x03\x81\x81\x11\x15a\x05$Wa\x05$a'\x90V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[\x80\x82\x01\x80\x82\x11\x15a\x05$Wa\x05$a'\x90V[`\0\x82a'\xFFWcNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[P\x04\x90V[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x05$Wa\x05$a'\x90V[`\0\x81a(*Wa(*a'\x90V[P`\0\x19\x01\x90V[cNH{q`\xE0\x1B`\0R`1`\x04R`$`\0\xFD\xFEERC777: transfer amount exceeds balanceERC777: transfer amount exceeds allowanceERC777: burn amount exceeds balance\xA2dipfsX\"\x12 \x83\x18\x90Iy\xF9[\xE02\xF9\x95\xB7[\x0F\xA0a\x84\xE9\x86Gx\xB44\xC6\xCC)\x8F:f;\xD8\x01dsolcC\0\x08\x13\x003",
1023    );
1024    /// The runtime bytecode of the contract, as deployed on the network.
1025    ///
1026    /// ```text
1027    ///0x608060405234801561001057600080fd5b50600436106101fb5760003560e01c8063947975d91161011a578063d5391393116100ad578063dd62ed3e1161007c578063dd62ed3e1461047a578063f772a092146104b3578063fad8b32a146104c6578063fc673c4f146104d9578063fe9d9303146104ec57600080fd5b8063d53913931461041a578063d547741f14610441578063d95b637114610454578063dcdc7dd01461046757600080fd5b8063a217fddf116100e9578063a217fddf146103d9578063a9059cbb146103e1578063b7d78b1a146103f4578063ca15c8731461040757600080fd5b8063947975d914610398578063959b8c3f146103ab57806395d89b41146103be5780639bd9bbc6146103c657600080fd5b80632f2ff15d1161019257806362ad1b831161016157806362ad1b831461031e57806370a08231146103315780639010d07c1461035a57806391d148541461038557600080fd5b80632f2ff15d146102e0578063313ce567146102f557806336568abe14610304578063556f0dc71461031757600080fd5b806318160ddd116101ce57806318160ddd1461026557806323b872dd14610277578063248a9ca31461028a5780632497aee6146102ad57600080fd5b806301ffc9a71461020057806306e485381461022857806306fdde031461023d578063095ea7b314610252575b600080fd5b61021361020e3660046120ce565b6104ff565b60405190151581526020015b60405180910390f35b61023061052a565b60405161021f91906120f8565b61024561058c565b60405161021f9190612195565b6102136102603660046121c0565b610615565b6003545b60405190815260200161021f565b6102136102853660046121ec565b61062d565b61026961029836600461222d565b60009081526020819052604090206001015490565b6102c06102bb3660046121c0565b6107ad565b604080516001600160801b0393841681529290911660208301520161021f565b6102f36102ee366004612246565b6107f0565b005b6040516012815260200161021f565b6102f3610312366004612246565b61081b565b6001610269565b6102f361032c366004612319565b610899565b61026961033f3660046123ac565b6001600160a01b031660009081526002602052604090205490565b61036d6103683660046123c9565b6108d5565b6040516001600160a01b03909116815260200161021f565b610213610393366004612246565b6108f4565b6102696103a6366004612407565b61091d565b6102f36103b93660046123ac565b61092a565b610245610a47565b6102f36103d4366004612422565b610a56565b610269600081565b6102136103ef3660046121c0565b610a74565b6102c061040236600461222d565b610b27565b61026961041536600461222d565b610b5c565b6102697f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a681565b6102f361044f366004612246565b610b73565b61021361046236600461247b565b610b99565b6102f36104753660046124a9565b610c3a565b61026961048836600461247b565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b6102696104c1366004612529565b610cc2565b6102f36104d43660046123ac565b610ce4565b6102f36104e73660046124a9565b610dff565b6102f36104fa36600461255e565b610e31565b60006001600160e01b03198216635a05180f60e01b1480610524575061052482610e4c565b92915050565b6060600680548060200260200160405190810160405280929190818152602001828054801561058257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610564575b5050505050905090565b60606004805461059b906125a5565b80601f01602080910402602001604051908101604052809291908181526020018280546105c7906125a5565b80156105825780601f106105e957610100808354040283529160200191610582565b820191906000526020600020905b8154815290600101906020018083116105f757509395945050505050565b600033610623818585610e81565b5060019392505050565b60006001600160a01b03831661065e5760405162461bcd60e51b8152600401610655906125df565b60405180910390fd5b6001600160a01b0384166106c35760405162461bcd60e51b815260206004820152602660248201527f4552433737373a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b6064820152608401610655565b60003390506106f4818686866040518060200160405280600081525060405180602001604052806000815250610fa8565b6107208186868660405180602001604052806000815250604051806020016040528060008152506110d0565b610774858261076f86604051806060016040528060298152602001612870602991396001600160a01b03808c166000908152600a60209081526040808320938b168352929052205491906111fe565b610e81565b6107a2818686866040518060200160405280600081525060405180602001604052806000815250600061122a565b506001949350505050565b600b60205281600052604060002081815481106107c957600080fd5b6000918252602090912001546001600160801b038082169350600160801b90910416905082565b60008281526020819052604090206001015461080c81336113ef565b6108168383611453565b505050565b6001600160a01b038116331461088b5760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610655565b6108958282611475565b5050565b6108a33386610b99565b6108bf5760405162461bcd60e51b815260040161065590612623565b6108ce85858585856001611497565b5050505050565b60008281526001602052604081206108ed908361157a565b9392505050565b6000918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b6000610524600c83611586565b6001600160a01b038116330361098e5760405162461bcd60e51b8152602060048201526024808201527f4552433737373a20617574686f72697a696e672073656c66206173206f70657260448201526330ba37b960e11b6064820152608401610655565b6001600160a01b03811660009081526007602052604090205460ff16156109df573360009081526009602090815260408083206001600160a01b03851684529091529020805460ff19169055610a0e565b3360009081526008602090815260408083206001600160a01b03851684529091529020805460ff191660011790555b60405133906001600160a01b038316907ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f990600090a350565b60606005805461059b906125a5565b61081633848484604051806020016040528060008152506001611497565b60006001600160a01b038316610a9c5760405162461bcd60e51b8152600401610655906125df565b6000339050610acd818286866040518060200160405280600081525060405180602001604052806000815250610fa8565b610af98182868660405180602001604052806000815250604051806020016040528060008152506110d0565b610623818286866040518060200160405280600081525060405180602001604052806000815250600061122a565b600c8181548110610b3757600080fd5b6000918252602090912001546001600160801b038082169250600160801b9091041682565b600081815260016020526040812061052490611769565b600082815260208190526040902060010154610b8f81336113ef565b6108168383611475565b6000816001600160a01b0316836001600160a01b03161480610c0457506001600160a01b03831660009081526007602052604090205460ff168015610c0457506001600160a01b0380831660009081526009602090815260408083209387168352929052205460ff16155b806108ed5750506001600160a01b0390811660009081526008602090815260408083209490931682529290925290205460ff1690565b610c647f9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6336108f4565b610cb05760405162461bcd60e51b815260206004820181905260248201527f63616c6c657220646f6573206e6f742068617665206d696e74657220726f6c656044820152606401610655565b610cbc84848484611773565b50505050565b6001600160a01b0382166000908152600b602052604081206108ed9083611586565b336001600160a01b03821603610d465760405162461bcd60e51b815260206004820152602160248201527f4552433737373a207265766f6b696e672073656c66206173206f70657261746f6044820152603960f91b6064820152608401610655565b6001600160a01b03811660009081526007602052604090205460ff1615610d9a573360009081526009602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610dc6565b3360009081526008602090815260408083206001600160a01b03851684529091529020805460ff191690555b60405133906001600160a01b038316907f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa190600090a350565b610e093385610b99565b610e255760405162461bcd60e51b815260040161065590612623565b610cbc848484846118cf565b610895338383604051806020016040528060008152506118cf565b60006001600160e01b03198216637965db0b60e01b148061052457506301ffc9a760e01b6001600160e01b0319831614610524565b6001600160a01b038316610ee55760405162461bcd60e51b815260206004820152602560248201527f4552433737373a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610655565b6001600160a01b038216610f475760405162461bcd60e51b815260206004820152602360248201527f4552433737373a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610655565b6001600160a01b038381166000818152600a602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa158015611029573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061104d919061266f565b90506001600160a01b038116156110c757604051633ad5cbc160e11b81526001600160a01b038216906375ab978290611094908a908a908a908a908a908a9060040161268c565b600060405180830381600087803b1580156110ae57600080fd5b505af11580156110c2573d6000803e3d6000fd5b505050505b50505050505050565b6110dc86868686611a43565b61111983604051806060016040528060278152602001612849602791396001600160a01b03881660009081526002602052604090205491906111fe565b6001600160a01b0380871660009081526002602052604080822093909355908616815220546111489084611b7a565b6001600160a01b0380861660008181526002602052604090819020939093559151878216918916907f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987906111a1908890889088906126e6565b60405180910390a4836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516111ee91815260200190565b60405180910390a3505050505050565b600081848411156112225760405162461bcd60e51b81526004016106559190612195565b505050900390565b60405163555ddc6560e11b81526001600160a01b03861660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa1580156112ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112cf919061266f565b90506001600160a01b0381161561134b576040516223de2960e01b81526001600160a01b038216906223de2990611314908b908b908b908b908b908b9060040161268c565b600060405180830381600087803b15801561132e57600080fd5b505af1158015611342573d6000803e3d6000fd5b505050506113e5565b81156113e5576001600160a01b0386163b156113e55760405162461bcd60e51b815260206004820152604d60248201527f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460448201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60648201526c1ad95b9cd49958da5c1a595b9d609a1b608482015260a401610655565b5050505050505050565b6113f982826108f4565b61089557611411816001600160a01b03166014611b86565b61141c836020611b86565b60405160200161142d92919061271b565b60408051601f198184030181529082905262461bcd60e51b825261065591600401612195565b61145d8282611d22565b60008281526001602052604090206108169082611da6565b61147f8282611dbb565b60008281526001602052604090206108169082611e20565b6001600160a01b0386166114f85760405162461bcd60e51b815260206004820152602260248201527f4552433737373a2073656e642066726f6d20746865207a65726f206164647265604482015261737360f01b6064820152608401610655565b6001600160a01b03851661154e5760405162461bcd60e51b815260206004820181905260248201527f4552433737373a2073656e6420746f20746865207a65726f20616464726573736044820152606401610655565b3361155d818888888888610fa8565b61156b8188888888886110d0565b6110c78188888888888861122a565b60006108ed8383611e35565b815460009080820361159c576000915050610524565b836115a86001836127a6565b815481106115b8576115b86127b9565b6000918252602090912001546001600160801b039081169084161061161857836115e36001836127a6565b815481106115f3576115f36127b9565b600091825260209091200154600160801b90046001600160801b031691506105249050565b8360008154811061162b5761162b6127b9565b6000918252602090912001546001600160801b039081169084161015611655576000915050610524565b6000806116636001846127a6565b90505b81811115611731576000600261167c84846127cf565b6116879060016127cf565b61169191906127e2565b905060008782815481106116a7576116a76127b9565b6000918252602090912001546001600160801b03908116915087168103611703578782815481106116da576116da6127b9565b600091825260209091200154600160801b90046001600160801b03169550610524945050505050565b866001600160801b031681101561171c5781935061172a565b6117276001836127a6565b92505b5050611666565b858281548110611743576117436127b9565b600091825260209091200154600160801b90046001600160801b03169695505050505050565b6000610524825490565b6001600160a01b0384166117c95760405162461bcd60e51b815260206004820181905260248201527f4552433737373a206d696e7420746f20746865207a65726f20616464726573736044820152606401610655565b336117d78160008787611a43565b6003546117e49085611b7a565b6003556001600160a01b03851660009081526002602052604090205461180a9085611b7a565b6001600160a01b03861660009081526002602052604081209190915561183790829087878787600161122a565b846001600160a01b0316816001600160a01b03167f2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d86868660405161187e939291906126e6565b60405180910390a36040518481526001600160a01b038616906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020015b60405180910390a35050505050565b6001600160a01b0384166119305760405162461bcd60e51b815260206004820152602260248201527f4552433737373a206275726e2066726f6d20746865207a65726f206164647265604482015261737360f01b6064820152608401610655565b3361194081866000878787610fa8565b61194d8186600087611a43565b61198a84604051806060016040528060238152602001612899602391396001600160a01b03881660009081526002602052604090205491906111fe565b6001600160a01b0386166000908152600260205260409020556003546119b09085611e5f565b600381905550846001600160a01b0316816001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a40988686866040516119fd939291906126e6565b60405180910390a36040518481526000906001600160a01b038716907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906020016118c0565b6001600160a01b038316611aa3576001600160a01b0382166000908152600b60209081526040808320600290925290912054611a8c9190611a879084905b90611b7a565b611e6b565b611a9e600c611a8783611a8160035490565b610cbc565b6001600160a01b038216611af9576001600160a01b0383166000908152600b60209081526040808320600290925290912054611ae79190611a879084905b90611e5f565b611a9e600c611a8783611ae160035490565b816001600160a01b0316836001600160a01b031614610cbc576001600160a01b0383166000908152600b60209081526040808320600290925290912054611b469190611a87908490611ae1565b6001600160a01b0382166000908152600b60209081526040808320600290925290912054610cbc9190611a87908490611a81565b60006108ed82846127cf565b60606000611b95836002612804565b611ba09060026127cf565b67ffffffffffffffff811115611bb857611bb8612276565b6040519080825280601f01601f191660200182016040528015611be2576020820181803683370190505b509050600360fc1b81600081518110611bfd57611bfd6127b9565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110611c2c57611c2c6127b9565b60200101906001600160f81b031916908160001a9053506000611c50846002612804565b611c5b9060016127cf565b90505b6001811115611cd3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f1660108110611c8f57611c8f6127b9565b1a60f81b828281518110611ca557611ca56127b9565b60200101906001600160f81b031916908160001a90535060049490941c93611ccc8161281b565b9050611c5e565b5083156108ed5760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610655565b611d2c82826108f4565b610895576000828152602081815260408083206001600160a01b03851684529091529020805460ff19166001179055611d623390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b60006108ed836001600160a01b038416611f8c565b611dc582826108f4565b15610895576000828152602081815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b60006108ed836001600160a01b038416611fdb565b6000826000018281548110611e4c57611e4c6127b9565b9060005260206000200154905092915050565b60006108ed82846127a6565b6001600160801b03811115611eb55760405162461bcd60e51b815260206004820152601060248201526f63617374696e67206f766572666c6f7760801b6044820152606401610655565b8154801580611ef357504383611ecc6001846127a6565b81548110611edc57611edc6127b9565b6000918252602090912001546001600160801b0316105b15611f4457604080518082019091526001600160801b03438116825283811660208084019182528654600181018855600088815291909120935191518316600160801b029190921617910155505050565b8183611f516001846127a6565b81548110611f6157611f616127b9565b600091825260209091200180546001600160801b03928316600160801b029216919091179055505050565b6000818152600183016020526040812054611fd357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610524565b506000610524565b600081815260018301602052604081205480156120c4576000611fff6001836127a6565b8554909150600090612013906001906127a6565b9050818114612078576000866000018281548110612033576120336127b9565b9060005260206000200154905080876000018481548110612056576120566127b9565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061208957612089612832565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610524565b6000915050610524565b6000602082840312156120e057600080fd5b81356001600160e01b0319811681146108ed57600080fd5b6020808252825182820181905260009190848201906040850190845b818110156121395783516001600160a01b031683529284019291840191600101612114565b50909695505050505050565b60005b83811015612160578181015183820152602001612148565b50506000910152565b60008151808452612181816020860160208601612145565b601f01601f19169290920160200192915050565b6020815260006108ed6020830184612169565b6001600160a01b03811681146121bd57600080fd5b50565b600080604083850312156121d357600080fd5b82356121de816121a8565b946020939093013593505050565b60008060006060848603121561220157600080fd5b833561220c816121a8565b9250602084013561221c816121a8565b929592945050506040919091013590565b60006020828403121561223f57600080fd5b5035919050565b6000806040838503121561225957600080fd5b82359150602083013561226b816121a8565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b600082601f83011261229d57600080fd5b813567ffffffffffffffff808211156122b8576122b8612276565b604051601f8301601f19908116603f011681019082821181831017156122e0576122e0612276565b816040528381528660208588010111156122f957600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a0868803121561233157600080fd5b853561233c816121a8565b9450602086013561234c816121a8565b935060408601359250606086013567ffffffffffffffff8082111561237057600080fd5b61237c89838a0161228c565b9350608088013591508082111561239257600080fd5b5061239f8882890161228c565b9150509295509295909350565b6000602082840312156123be57600080fd5b81356108ed816121a8565b600080604083850312156123dc57600080fd5b50508035926020909101359150565b80356001600160801b038116811461240257600080fd5b919050565b60006020828403121561241957600080fd5b6108ed826123eb565b60008060006060848603121561243757600080fd5b8335612442816121a8565b925060208401359150604084013567ffffffffffffffff81111561246557600080fd5b6124718682870161228c565b9150509250925092565b6000806040838503121561248e57600080fd5b8235612499816121a8565b9150602083013561226b816121a8565b600080600080608085870312156124bf57600080fd5b84356124ca816121a8565b935060208501359250604085013567ffffffffffffffff808211156124ee57600080fd5b6124fa8883890161228c565b9350606087013591508082111561251057600080fd5b5061251d8782880161228c565b91505092959194509250565b6000806040838503121561253c57600080fd5b8235612547816121a8565b9150612555602084016123eb565b90509250929050565b6000806040838503121561257157600080fd5b82359150602083013567ffffffffffffffff81111561258f57600080fd5b61259b8582860161228c565b9150509250929050565b600181811c908216806125b957607f821691505b6020821081036125d957634e487b7160e01b600052602260045260246000fd5b50919050565b60208082526024908201527f4552433737373a207472616e7366657220746f20746865207a65726f206164646040820152637265737360e01b606082015260800190565b6020808252602c908201527f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60408201526b39103337b9103437b63232b960a11b606082015260800190565b60006020828403121561268157600080fd5b81516108ed816121a8565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c0608082018190526000906126c790830185612169565b82810360a08401526126d98185612169565b9998505050505050505050565b8381526060602082015260006126ff6060830185612169565b82810360408401526127118185612169565b9695505050505050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351612753816017850160208801612145565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351612784816028840160208801612145565b01602801949350505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561052457610524612790565b634e487b7160e01b600052603260045260246000fd5b8082018082111561052457610524612790565b6000826127ff57634e487b7160e01b600052601260045260246000fd5b500490565b808202811582820484141761052457610524612790565b60008161282a5761282a612790565b506000190190565b634e487b7160e01b600052603160045260246000fdfe4552433737373a207472616e7366657220616d6f756e7420657863656564732062616c616e63654552433737373a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654552433737373a206275726e20616d6f756e7420657863656564732062616c616e6365a26469706673582212208318904979f95be032f995b75b0fa06184e9864778b434c6cc298f3a663bd80164736f6c63430008130033
1028    /// ```
1029    #[rustfmt::skip]
1030    #[allow(clippy::all)]
1031    pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
1032        b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x01\xFBW`\x005`\xE0\x1C\x80c\x94yu\xD9\x11a\x01\x1AW\x80c\xD59\x13\x93\x11a\0\xADW\x80c\xDDb\xED>\x11a\0|W\x80c\xDDb\xED>\x14a\x04zW\x80c\xF7r\xA0\x92\x14a\x04\xB3W\x80c\xFA\xD8\xB3*\x14a\x04\xC6W\x80c\xFCg<O\x14a\x04\xD9W\x80c\xFE\x9D\x93\x03\x14a\x04\xECW`\0\x80\xFD[\x80c\xD59\x13\x93\x14a\x04\x1AW\x80c\xD5Gt\x1F\x14a\x04AW\x80c\xD9[cq\x14a\x04TW\x80c\xDC\xDC}\xD0\x14a\x04gW`\0\x80\xFD[\x80c\xA2\x17\xFD\xDF\x11a\0\xE9W\x80c\xA2\x17\xFD\xDF\x14a\x03\xD9W\x80c\xA9\x05\x9C\xBB\x14a\x03\xE1W\x80c\xB7\xD7\x8B\x1A\x14a\x03\xF4W\x80c\xCA\x15\xC8s\x14a\x04\x07W`\0\x80\xFD[\x80c\x94yu\xD9\x14a\x03\x98W\x80c\x95\x9B\x8C?\x14a\x03\xABW\x80c\x95\xD8\x9BA\x14a\x03\xBEW\x80c\x9B\xD9\xBB\xC6\x14a\x03\xC6W`\0\x80\xFD[\x80c//\xF1]\x11a\x01\x92W\x80cb\xAD\x1B\x83\x11a\x01aW\x80cb\xAD\x1B\x83\x14a\x03\x1EW\x80cp\xA0\x821\x14a\x031W\x80c\x90\x10\xD0|\x14a\x03ZW\x80c\x91\xD1HT\x14a\x03\x85W`\0\x80\xFD[\x80c//\xF1]\x14a\x02\xE0W\x80c1<\xE5g\x14a\x02\xF5W\x80c6V\x8A\xBE\x14a\x03\x04W\x80cUo\r\xC7\x14a\x03\x17W`\0\x80\xFD[\x80c\x18\x16\r\xDD\x11a\x01\xCEW\x80c\x18\x16\r\xDD\x14a\x02eW\x80c#\xB8r\xDD\x14a\x02wW\x80c$\x8A\x9C\xA3\x14a\x02\x8AW\x80c$\x97\xAE\xE6\x14a\x02\xADW`\0\x80\xFD[\x80c\x01\xFF\xC9\xA7\x14a\x02\0W\x80c\x06\xE4\x858\x14a\x02(W\x80c\x06\xFD\xDE\x03\x14a\x02=W\x80c\t^\xA7\xB3\x14a\x02RW[`\0\x80\xFD[a\x02\x13a\x02\x0E6`\x04a \xCEV[a\x04\xFFV[`@Q\x90\x15\x15\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x020a\x05*V[`@Qa\x02\x1F\x91\x90a \xF8V[a\x02Ea\x05\x8CV[`@Qa\x02\x1F\x91\x90a!\x95V[a\x02\x13a\x02`6`\x04a!\xC0V[a\x06\x15V[`\x03T[`@Q\x90\x81R` \x01a\x02\x1FV[a\x02\x13a\x02\x856`\x04a!\xECV[a\x06-V[a\x02ia\x02\x986`\x04a\"-V[`\0\x90\x81R` \x81\x90R`@\x90 `\x01\x01T\x90V[a\x02\xC0a\x02\xBB6`\x04a!\xC0V[a\x07\xADV[`@\x80Q`\x01`\x01`\x80\x1B\x03\x93\x84\x16\x81R\x92\x90\x91\x16` \x83\x01R\x01a\x02\x1FV[a\x02\xF3a\x02\xEE6`\x04a\"FV[a\x07\xF0V[\0[`@Q`\x12\x81R` \x01a\x02\x1FV[a\x02\xF3a\x03\x126`\x04a\"FV[a\x08\x1BV[`\x01a\x02iV[a\x02\xF3a\x03,6`\x04a#\x19V[a\x08\x99V[a\x02ia\x03?6`\x04a#\xACV[`\x01`\x01`\xA0\x1B\x03\x16`\0\x90\x81R`\x02` R`@\x90 T\x90V[a\x03ma\x03h6`\x04a#\xC9V[a\x08\xD5V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x02\x1FV[a\x02\x13a\x03\x936`\x04a\"FV[a\x08\xF4V[a\x02ia\x03\xA66`\x04a$\x07V[a\t\x1DV[a\x02\xF3a\x03\xB96`\x04a#\xACV[a\t*V[a\x02Ea\nGV[a\x02\xF3a\x03\xD46`\x04a$\"V[a\nVV[a\x02i`\0\x81V[a\x02\x13a\x03\xEF6`\x04a!\xC0V[a\ntV[a\x02\xC0a\x04\x026`\x04a\"-V[a\x0B'V[a\x02ia\x04\x156`\x04a\"-V[a\x0B\\V[a\x02i\x7F\x9F-\xF0\xFE\xD2\xC7vH\xDEX`\xA4\xCCP\x8C\xD0\x81\x8C\x85\xB8\xB8\xA1\xABL\xEE\xEF\x8D\x98\x1C\x89V\xA6\x81V[a\x02\xF3a\x04O6`\x04a\"FV[a\x0BsV[a\x02\x13a\x04b6`\x04a${V[a\x0B\x99V[a\x02\xF3a\x04u6`\x04a$\xA9V[a\x0C:V[a\x02ia\x04\x886`\x04a${V[`\x01`\x01`\xA0\x1B\x03\x91\x82\x16`\0\x90\x81R`\n` \x90\x81R`@\x80\x83 \x93\x90\x94\x16\x82R\x91\x90\x91R T\x90V[a\x02ia\x04\xC16`\x04a%)V[a\x0C\xC2V[a\x02\xF3a\x04\xD46`\x04a#\xACV[a\x0C\xE4V[a\x02\xF3a\x04\xE76`\x04a$\xA9V[a\r\xFFV[a\x02\xF3a\x04\xFA6`\x04a%^V[a\x0E1V[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cZ\x05\x18\x0F`\xE0\x1B\x14\x80a\x05$WPa\x05$\x82a\x0ELV[\x92\x91PPV[```\x06\x80T\x80` \x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80T\x80\x15a\x05\x82W` \x02\x82\x01\x91\x90`\0R` `\0 \x90[\x81T`\x01`\x01`\xA0\x1B\x03\x16\x81R`\x01\x90\x91\x01\x90` \x01\x80\x83\x11a\x05dW[PPPPP\x90P\x90V[```\x04\x80Ta\x05\x9B\x90a%\xA5V[\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x92\x91\x90\x81\x81R` \x01\x82\x80Ta\x05\xC7\x90a%\xA5V[\x80\x15a\x05\x82W\x80`\x1F\x10a\x05\xE9Wa\x01\0\x80\x83T\x04\x02\x83R\x91` \x01\x91a\x05\x82V[\x82\x01\x91\x90`\0R` `\0 \x90[\x81T\x81R\x90`\x01\x01\x90` \x01\x80\x83\x11a\x05\xF7WP\x93\x95\x94PPPPPV[`\x003a\x06#\x81\x85\x85a\x0E\x81V[P`\x01\x93\x92PPPV[`\0`\x01`\x01`\xA0\x1B\x03\x83\x16a\x06^W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06U\x90a%\xDFV[`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x84\x16a\x06\xC3W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7FERC777: transfer from the zero a`D\x82\x01Reddress`\xD0\x1B`d\x82\x01R`\x84\x01a\x06UV[`\x003\x90Pa\x06\xF4\x81\x86\x86\x86`@Q\x80` \x01`@R\x80`\0\x81RP`@Q\x80` \x01`@R\x80`\0\x81RPa\x0F\xA8V[a\x07 \x81\x86\x86\x86`@Q\x80` \x01`@R\x80`\0\x81RP`@Q\x80` \x01`@R\x80`\0\x81RPa\x10\xD0V[a\x07t\x85\x82a\x07o\x86`@Q\x80``\x01`@R\x80`)\x81R` \x01a(p`)\x919`\x01`\x01`\xA0\x1B\x03\x80\x8C\x16`\0\x90\x81R`\n` \x90\x81R`@\x80\x83 \x93\x8B\x16\x83R\x92\x90R T\x91\x90a\x11\xFEV[a\x0E\x81V[a\x07\xA2\x81\x86\x86\x86`@Q\x80` \x01`@R\x80`\0\x81RP`@Q\x80` \x01`@R\x80`\0\x81RP`\0a\x12*V[P`\x01\x94\x93PPPPV[`\x0B` R\x81`\0R`@`\0 \x81\x81T\x81\x10a\x07\xC9W`\0\x80\xFD[`\0\x91\x82R` \x90\x91 \x01T`\x01`\x01`\x80\x1B\x03\x80\x82\x16\x93P`\x01`\x80\x1B\x90\x91\x04\x16\x90P\x82V[`\0\x82\x81R` \x81\x90R`@\x90 `\x01\x01Ta\x08\x0C\x813a\x13\xEFV[a\x08\x16\x83\x83a\x14SV[PPPV[`\x01`\x01`\xA0\x1B\x03\x81\x163\x14a\x08\x8BW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`/`$\x82\x01R\x7FAccessControl: can only renounce`D\x82\x01Rn\x1097\xB62\xB9\x9037\xB9\x109\xB2\xB63`\x89\x1B`d\x82\x01R`\x84\x01a\x06UV[a\x08\x95\x82\x82a\x14uV[PPV[a\x08\xA33\x86a\x0B\x99V[a\x08\xBFW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06U\x90a&#V[a\x08\xCE\x85\x85\x85\x85\x85`\x01a\x14\x97V[PPPPPV[`\0\x82\x81R`\x01` R`@\x81 a\x08\xED\x90\x83a\x15zV[\x93\x92PPPV[`\0\x91\x82R` \x82\x81R`@\x80\x84 `\x01`\x01`\xA0\x1B\x03\x93\x90\x93\x16\x84R\x91\x90R\x90 T`\xFF\x16\x90V[`\0a\x05$`\x0C\x83a\x15\x86V[`\x01`\x01`\xA0\x1B\x03\x81\x163\x03a\t\x8EW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`$\x80\x82\x01R\x7FERC777: authorizing self as oper`D\x82\x01Rc0\xBA7\xB9`\xE1\x1B`d\x82\x01R`\x84\x01a\x06UV[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x90\x81R`\x07` R`@\x90 T`\xFF\x16\x15a\t\xDFW3`\0\x90\x81R`\t` \x90\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16\x90Ua\n\x0EV[3`\0\x90\x81R`\x08` \x90\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90U[`@Q3\x90`\x01`\x01`\xA0\x1B\x03\x83\x16\x90\x7F\xF4\xCA\xEB-l\xA8\x93*!Z5=\x07\x03\xC3&\xEC-\x81\xFCh\x17\x0F2\x0E\xB2\xABI\xE9\xDFa\xF9\x90`\0\x90\xA3PV[```\x05\x80Ta\x05\x9B\x90a%\xA5V[a\x08\x163\x84\x84\x84`@Q\x80` \x01`@R\x80`\0\x81RP`\x01a\x14\x97V[`\0`\x01`\x01`\xA0\x1B\x03\x83\x16a\n\x9CW`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06U\x90a%\xDFV[`\x003\x90Pa\n\xCD\x81\x82\x86\x86`@Q\x80` \x01`@R\x80`\0\x81RP`@Q\x80` \x01`@R\x80`\0\x81RPa\x0F\xA8V[a\n\xF9\x81\x82\x86\x86`@Q\x80` \x01`@R\x80`\0\x81RP`@Q\x80` \x01`@R\x80`\0\x81RPa\x10\xD0V[a\x06#\x81\x82\x86\x86`@Q\x80` \x01`@R\x80`\0\x81RP`@Q\x80` \x01`@R\x80`\0\x81RP`\0a\x12*V[`\x0C\x81\x81T\x81\x10a\x0B7W`\0\x80\xFD[`\0\x91\x82R` \x90\x91 \x01T`\x01`\x01`\x80\x1B\x03\x80\x82\x16\x92P`\x01`\x80\x1B\x90\x91\x04\x16\x82V[`\0\x81\x81R`\x01` R`@\x81 a\x05$\x90a\x17iV[`\0\x82\x81R` \x81\x90R`@\x90 `\x01\x01Ta\x0B\x8F\x813a\x13\xEFV[a\x08\x16\x83\x83a\x14uV[`\0\x81`\x01`\x01`\xA0\x1B\x03\x16\x83`\x01`\x01`\xA0\x1B\x03\x16\x14\x80a\x0C\x04WP`\x01`\x01`\xA0\x1B\x03\x83\x16`\0\x90\x81R`\x07` R`@\x90 T`\xFF\x16\x80\x15a\x0C\x04WP`\x01`\x01`\xA0\x1B\x03\x80\x83\x16`\0\x90\x81R`\t` \x90\x81R`@\x80\x83 \x93\x87\x16\x83R\x92\x90R T`\xFF\x16\x15[\x80a\x08\xEDWPP`\x01`\x01`\xA0\x1B\x03\x90\x81\x16`\0\x90\x81R`\x08` \x90\x81R`@\x80\x83 \x94\x90\x93\x16\x82R\x92\x90\x92R\x90 T`\xFF\x16\x90V[a\x0Cd\x7F\x9F-\xF0\xFE\xD2\xC7vH\xDEX`\xA4\xCCP\x8C\xD0\x81\x8C\x85\xB8\xB8\xA1\xABL\xEE\xEF\x8D\x98\x1C\x89V\xA63a\x08\xF4V[a\x0C\xB0W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7Fcaller does not have minter role`D\x82\x01R`d\x01a\x06UV[a\x0C\xBC\x84\x84\x84\x84a\x17sV[PPPPV[`\x01`\x01`\xA0\x1B\x03\x82\x16`\0\x90\x81R`\x0B` R`@\x81 a\x08\xED\x90\x83a\x15\x86V[3`\x01`\x01`\xA0\x1B\x03\x82\x16\x03a\rFW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`!`$\x82\x01R\x7FERC777: revoking self as operato`D\x82\x01R`9`\xF9\x1B`d\x82\x01R`\x84\x01a\x06UV[`\x01`\x01`\xA0\x1B\x03\x81\x16`\0\x90\x81R`\x07` R`@\x90 T`\xFF\x16\x15a\r\x9AW3`\0\x90\x81R`\t` \x90\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\r\xC6V[3`\0\x90\x81R`\x08` \x90\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16\x90U[`@Q3\x90`\x01`\x01`\xA0\x1B\x03\x83\x16\x90\x7FPTnf\xE5\xF4Mr\x83e\xDC9\x08\xC6;\xC5\xCF\xEE\xABG\x07\"\xC1g~0s\xA6\xAC)J\xA1\x90`\0\x90\xA3PV[a\x0E\t3\x85a\x0B\x99V[a\x0E%W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06U\x90a&#V[a\x0C\xBC\x84\x84\x84\x84a\x18\xCFV[a\x08\x953\x83\x83`@Q\x80` \x01`@R\x80`\0\x81RPa\x18\xCFV[`\0`\x01`\x01`\xE0\x1B\x03\x19\x82\x16cye\xDB\x0B`\xE0\x1B\x14\x80a\x05$WPc\x01\xFF\xC9\xA7`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x83\x16\x14a\x05$V[`\x01`\x01`\xA0\x1B\x03\x83\x16a\x0E\xE5W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`%`$\x82\x01R\x7FERC777: approve from the zero ad`D\x82\x01Rddress`\xD8\x1B`d\x82\x01R`\x84\x01a\x06UV[`\x01`\x01`\xA0\x1B\x03\x82\x16a\x0FGW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`#`$\x82\x01R\x7FERC777: approve to the zero addr`D\x82\x01Rbess`\xE8\x1B`d\x82\x01R`\x84\x01a\x06UV[`\x01`\x01`\xA0\x1B\x03\x83\x81\x16`\0\x81\x81R`\n` \x90\x81R`@\x80\x83 \x94\x87\x16\x80\x84R\x94\x82R\x91\x82\x90 \x85\x90U\x90Q\x84\x81R\x7F\x8C[\xE1\xE5\xEB\xEC}[\xD1OqB}\x1E\x84\xF3\xDD\x03\x14\xC0\xF7\xB2)\x1E[ \n\xC8\xC7\xC3\xB9%\x91\x01`@Q\x80\x91\x03\x90\xA3PPPV[`@QcU]\xDCe`\xE1\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x86\x16`\x04\x82\x01R\x7F)\xDD\xB5\x89\xB1\xFB_\xC7\xCF9Ia\xC1\xAD\xF5\xF8\xC6EGa\xAD\xF7\x95\xE6\x7F\xE1I\xF6X\xAB\xE8\x95`$\x82\x01R`\0\x90s\x18 \xA4\xB7a\x8B\xDEq\xDC\xE8\xCD\xC7:\xABl\x95\x90_\xAD$\x90c\xAA\xBB\xB8\xCA\x90`D\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x10)W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10M\x91\x90a&oV[\x90P`\x01`\x01`\xA0\x1B\x03\x81\x16\x15a\x10\xC7W`@Qc:\xD5\xCB\xC1`\xE1\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x82\x16\x90cu\xAB\x97\x82\x90a\x10\x94\x90\x8A\x90\x8A\x90\x8A\x90\x8A\x90\x8A\x90\x8A\x90`\x04\x01a&\x8CV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x10\xAEW`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x10\xC2W=`\0\x80>=`\0\xFD[PPPP[PPPPPPPV[a\x10\xDC\x86\x86\x86\x86a\x1ACV[a\x11\x19\x83`@Q\x80``\x01`@R\x80`'\x81R` \x01a(I`'\x919`\x01`\x01`\xA0\x1B\x03\x88\x16`\0\x90\x81R`\x02` R`@\x90 T\x91\x90a\x11\xFEV[`\x01`\x01`\xA0\x1B\x03\x80\x87\x16`\0\x90\x81R`\x02` R`@\x80\x82 \x93\x90\x93U\x90\x86\x16\x81R Ta\x11H\x90\x84a\x1BzV[`\x01`\x01`\xA0\x1B\x03\x80\x86\x16`\0\x81\x81R`\x02` R`@\x90\x81\x90 \x93\x90\x93U\x91Q\x87\x82\x16\x91\x89\x16\x90\x7F\x06\xB5A\xDD\xAAr\r\xB2\xB1\nM\x0C\xDA\xC3\x9B\x8D6\x04%\xFC\x070\x85\xFA\xC1\x9B\xC8&\x14gy\x87\x90a\x11\xA1\x90\x88\x90\x88\x90\x88\x90a&\xE6V[`@Q\x80\x91\x03\x90\xA4\x83`\x01`\x01`\xA0\x1B\x03\x16\x85`\x01`\x01`\xA0\x1B\x03\x16\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x85`@Qa\x11\xEE\x91\x81R` \x01\x90V[`@Q\x80\x91\x03\x90\xA3PPPPPPV[`\0\x81\x84\x84\x11\x15a\x12\"W`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x06U\x91\x90a!\x95V[PPP\x90\x03\x90V[`@QcU]\xDCe`\xE1\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x86\x16`\x04\x82\x01R\x7F\xB2\x81\xFC\x8C\x12\x95M\"TM\xB4]\xE3\x15\x9A9'(\x95\xB1i\xA8R\xB3\x14\xF9\xCCv.D\xC5;`$\x82\x01R`\0\x90s\x18 \xA4\xB7a\x8B\xDEq\xDC\xE8\xCD\xC7:\xABl\x95\x90_\xAD$\x90c\xAA\xBB\xB8\xCA\x90`D\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x12\xABW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x12\xCF\x91\x90a&oV[\x90P`\x01`\x01`\xA0\x1B\x03\x81\x16\x15a\x13KW`@Qb#\xDE)`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x82\x16\x90b#\xDE)\x90a\x13\x14\x90\x8B\x90\x8B\x90\x8B\x90\x8B\x90\x8B\x90\x8B\x90`\x04\x01a&\x8CV[`\0`@Q\x80\x83\x03\x81`\0\x87\x80;\x15\x80\x15a\x13.W`\0\x80\xFD[PZ\xF1\x15\x80\x15a\x13BW=`\0\x80>=`\0\xFD[PPPPa\x13\xE5V[\x81\x15a\x13\xE5W`\x01`\x01`\xA0\x1B\x03\x86\x16;\x15a\x13\xE5W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`M`$\x82\x01R\x7FERC777: token recipient contract`D\x82\x01R\x7F has no implementer for ERC777To`d\x82\x01Rl\x1A\xD9[\x9C\xD4\x99X\xDA\\\x1AY[\x9D`\x9A\x1B`\x84\x82\x01R`\xA4\x01a\x06UV[PPPPPPPPV[a\x13\xF9\x82\x82a\x08\xF4V[a\x08\x95Wa\x14\x11\x81`\x01`\x01`\xA0\x1B\x03\x16`\x14a\x1B\x86V[a\x14\x1C\x83` a\x1B\x86V[`@Q` \x01a\x14-\x92\x91\x90a'\x1BV[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x90\x82\x90RbF\x1B\xCD`\xE5\x1B\x82Ra\x06U\x91`\x04\x01a!\x95V[a\x14]\x82\x82a\x1D\"V[`\0\x82\x81R`\x01` R`@\x90 a\x08\x16\x90\x82a\x1D\xA6V[a\x14\x7F\x82\x82a\x1D\xBBV[`\0\x82\x81R`\x01` R`@\x90 a\x08\x16\x90\x82a\x1E V[`\x01`\x01`\xA0\x1B\x03\x86\x16a\x14\xF8W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FERC777: send from the zero addre`D\x82\x01Rass`\xF0\x1B`d\x82\x01R`\x84\x01a\x06UV[`\x01`\x01`\xA0\x1B\x03\x85\x16a\x15NW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FERC777: send to the zero address`D\x82\x01R`d\x01a\x06UV[3a\x15]\x81\x88\x88\x88\x88\x88a\x0F\xA8V[a\x15k\x81\x88\x88\x88\x88\x88a\x10\xD0V[a\x10\xC7\x81\x88\x88\x88\x88\x88\x88a\x12*V[`\0a\x08\xED\x83\x83a\x1E5V[\x81T`\0\x90\x80\x82\x03a\x15\x9CW`\0\x91PPa\x05$V[\x83a\x15\xA8`\x01\x83a'\xA6V[\x81T\x81\x10a\x15\xB8Wa\x15\xB8a'\xB9V[`\0\x91\x82R` \x90\x91 \x01T`\x01`\x01`\x80\x1B\x03\x90\x81\x16\x90\x84\x16\x10a\x16\x18W\x83a\x15\xE3`\x01\x83a'\xA6V[\x81T\x81\x10a\x15\xF3Wa\x15\xF3a'\xB9V[`\0\x91\x82R` \x90\x91 \x01T`\x01`\x80\x1B\x90\x04`\x01`\x01`\x80\x1B\x03\x16\x91Pa\x05$\x90PV[\x83`\0\x81T\x81\x10a\x16+Wa\x16+a'\xB9V[`\0\x91\x82R` \x90\x91 \x01T`\x01`\x01`\x80\x1B\x03\x90\x81\x16\x90\x84\x16\x10\x15a\x16UW`\0\x91PPa\x05$V[`\0\x80a\x16c`\x01\x84a'\xA6V[\x90P[\x81\x81\x11\x15a\x171W`\0`\x02a\x16|\x84\x84a'\xCFV[a\x16\x87\x90`\x01a'\xCFV[a\x16\x91\x91\x90a'\xE2V[\x90P`\0\x87\x82\x81T\x81\x10a\x16\xA7Wa\x16\xA7a'\xB9V[`\0\x91\x82R` \x90\x91 \x01T`\x01`\x01`\x80\x1B\x03\x90\x81\x16\x91P\x87\x16\x81\x03a\x17\x03W\x87\x82\x81T\x81\x10a\x16\xDAWa\x16\xDAa'\xB9V[`\0\x91\x82R` \x90\x91 \x01T`\x01`\x80\x1B\x90\x04`\x01`\x01`\x80\x1B\x03\x16\x95Pa\x05$\x94PPPPPV[\x86`\x01`\x01`\x80\x1B\x03\x16\x81\x10\x15a\x17\x1CW\x81\x93Pa\x17*V[a\x17'`\x01\x83a'\xA6V[\x92P[PPa\x16fV[\x85\x82\x81T\x81\x10a\x17CWa\x17Ca'\xB9V[`\0\x91\x82R` \x90\x91 \x01T`\x01`\x80\x1B\x90\x04`\x01`\x01`\x80\x1B\x03\x16\x96\x95PPPPPPV[`\0a\x05$\x82T\x90V[`\x01`\x01`\xA0\x1B\x03\x84\x16a\x17\xC9W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FERC777: mint to the zero address`D\x82\x01R`d\x01a\x06UV[3a\x17\xD7\x81`\0\x87\x87a\x1ACV[`\x03Ta\x17\xE4\x90\x85a\x1BzV[`\x03U`\x01`\x01`\xA0\x1B\x03\x85\x16`\0\x90\x81R`\x02` R`@\x90 Ta\x18\n\x90\x85a\x1BzV[`\x01`\x01`\xA0\x1B\x03\x86\x16`\0\x90\x81R`\x02` R`@\x81 \x91\x90\x91Ua\x187\x90\x82\x90\x87\x87\x87\x87`\x01a\x12*V[\x84`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x7F/\xE5\xBE\x01F\xF7L[\xCE6\xC0\xB8\t\x11\xAFl}\x86\xFF'\xE8\x9D\\\xFAa\xFCh\x13'\x95N]\x86\x86\x86`@Qa\x18~\x93\x92\x91\x90a&\xE6V[`@Q\x80\x91\x03\x90\xA3`@Q\x84\x81R`\x01`\x01`\xA0\x1B\x03\x86\x16\x90`\0\x90\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x90` \x01[`@Q\x80\x91\x03\x90\xA3PPPPPV[`\x01`\x01`\xA0\x1B\x03\x84\x16a\x190W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FERC777: burn from the zero addre`D\x82\x01Rass`\xF0\x1B`d\x82\x01R`\x84\x01a\x06UV[3a\x19@\x81\x86`\0\x87\x87\x87a\x0F\xA8V[a\x19M\x81\x86`\0\x87a\x1ACV[a\x19\x8A\x84`@Q\x80``\x01`@R\x80`#\x81R` \x01a(\x99`#\x919`\x01`\x01`\xA0\x1B\x03\x88\x16`\0\x90\x81R`\x02` R`@\x90 T\x91\x90a\x11\xFEV[`\x01`\x01`\xA0\x1B\x03\x86\x16`\0\x90\x81R`\x02` R`@\x90 U`\x03Ta\x19\xB0\x90\x85a\x1E_V[`\x03\x81\x90UP\x84`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x7F\xA7\x8A\x9B\xE3\xA7\xB8b\xD2i3\xAD\x85\xFB\x11\xD8\x0E\xF6k\x8F\x97-|\xBB\xA0f!\xD5\x83\x94:@\x98\x86\x86\x86`@Qa\x19\xFD\x93\x92\x91\x90a&\xE6V[`@Q\x80\x91\x03\x90\xA3`@Q\x84\x81R`\0\x90`\x01`\x01`\xA0\x1B\x03\x87\x16\x90\x7F\xDD\xF2R\xAD\x1B\xE2\xC8\x9Bi\xC2\xB0h\xFC7\x8D\xAA\x95+\xA7\xF1c\xC4\xA1\x16(\xF5ZM\xF5#\xB3\xEF\x90` \x01a\x18\xC0V[`\x01`\x01`\xA0\x1B\x03\x83\x16a\x1A\xA3W`\x01`\x01`\xA0\x1B\x03\x82\x16`\0\x90\x81R`\x0B` \x90\x81R`@\x80\x83 `\x02\x90\x92R\x90\x91 Ta\x1A\x8C\x91\x90a\x1A\x87\x90\x84\x90[\x90a\x1BzV[a\x1EkV[a\x1A\x9E`\x0Ca\x1A\x87\x83a\x1A\x81`\x03T\x90V[a\x0C\xBCV[`\x01`\x01`\xA0\x1B\x03\x82\x16a\x1A\xF9W`\x01`\x01`\xA0\x1B\x03\x83\x16`\0\x90\x81R`\x0B` \x90\x81R`@\x80\x83 `\x02\x90\x92R\x90\x91 Ta\x1A\xE7\x91\x90a\x1A\x87\x90\x84\x90[\x90a\x1E_V[a\x1A\x9E`\x0Ca\x1A\x87\x83a\x1A\xE1`\x03T\x90V[\x81`\x01`\x01`\xA0\x1B\x03\x16\x83`\x01`\x01`\xA0\x1B\x03\x16\x14a\x0C\xBCW`\x01`\x01`\xA0\x1B\x03\x83\x16`\0\x90\x81R`\x0B` \x90\x81R`@\x80\x83 `\x02\x90\x92R\x90\x91 Ta\x1BF\x91\x90a\x1A\x87\x90\x84\x90a\x1A\xE1V[`\x01`\x01`\xA0\x1B\x03\x82\x16`\0\x90\x81R`\x0B` \x90\x81R`@\x80\x83 `\x02\x90\x92R\x90\x91 Ta\x0C\xBC\x91\x90a\x1A\x87\x90\x84\x90a\x1A\x81V[`\0a\x08\xED\x82\x84a'\xCFV[```\0a\x1B\x95\x83`\x02a(\x04V[a\x1B\xA0\x90`\x02a'\xCFV[g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x1B\xB8Wa\x1B\xB8a\"vV[`@Q\x90\x80\x82R\x80`\x1F\x01`\x1F\x19\x16` \x01\x82\x01`@R\x80\x15a\x1B\xE2W` \x82\x01\x81\x806\x837\x01\x90P[P\x90P`\x03`\xFC\x1B\x81`\0\x81Q\x81\x10a\x1B\xFDWa\x1B\xFDa'\xB9V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x0F`\xFB\x1B\x81`\x01\x81Q\x81\x10a\x1C,Wa\x1C,a'\xB9V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\0a\x1CP\x84`\x02a(\x04V[a\x1C[\x90`\x01a'\xCFV[\x90P[`\x01\x81\x11\x15a\x1C\xD3Wo\x18\x18\x99\x19\x9A\x1A\x9B\x1B\x9C\x1C\xB0\xB11\xB22\xB3`\x81\x1B\x85`\x0F\x16`\x10\x81\x10a\x1C\x8FWa\x1C\x8Fa'\xB9V[\x1A`\xF8\x1B\x82\x82\x81Q\x81\x10a\x1C\xA5Wa\x1C\xA5a'\xB9V[` \x01\x01\x90`\x01`\x01`\xF8\x1B\x03\x19\x16\x90\x81`\0\x1A\x90SP`\x04\x94\x90\x94\x1C\x93a\x1C\xCC\x81a(\x1BV[\x90Pa\x1C^V[P\x83\x15a\x08\xEDW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01\x81\x90R`$\x82\x01R\x7FStrings: hex length insufficient`D\x82\x01R`d\x01a\x06UV[a\x1D,\x82\x82a\x08\xF4V[a\x08\x95W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x90 \x80T`\xFF\x19\x16`\x01\x17\x90Ua\x1Db3\x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x83\x7F/\x87\x88\x11~~\xFF\x1D\x82\xE9&\xECyI\x01\xD1|x\x02JP'\t@0E@\xA73eo\r`@Q`@Q\x80\x91\x03\x90\xA4PPV[`\0a\x08\xED\x83`\x01`\x01`\xA0\x1B\x03\x84\x16a\x1F\x8CV[a\x1D\xC5\x82\x82a\x08\xF4V[\x15a\x08\x95W`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x80\x85R\x92R\x80\x83 \x80T`\xFF\x19\x16\x90UQ3\x92\x85\x91\x7F\xF69\x1F\\2\xD9\xC6\x9D*G\xEAg\x0BD)t\xB595\xD1\xED\xC7\xFDd\xEB!\xE0G\xA89\x17\x1B\x91\x90\xA4PPV[`\0a\x08\xED\x83`\x01`\x01`\xA0\x1B\x03\x84\x16a\x1F\xDBV[`\0\x82`\0\x01\x82\x81T\x81\x10a\x1ELWa\x1ELa'\xB9V[\x90`\0R` `\0 \x01T\x90P\x92\x91PPV[`\0a\x08\xED\x82\x84a'\xA6V[`\x01`\x01`\x80\x1B\x03\x81\x11\x15a\x1E\xB5W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x10`$\x82\x01Rocasting overflow`\x80\x1B`D\x82\x01R`d\x01a\x06UV[\x81T\x80\x15\x80a\x1E\xF3WPC\x83a\x1E\xCC`\x01\x84a'\xA6V[\x81T\x81\x10a\x1E\xDCWa\x1E\xDCa'\xB9V[`\0\x91\x82R` \x90\x91 \x01T`\x01`\x01`\x80\x1B\x03\x16\x10[\x15a\x1FDW`@\x80Q\x80\x82\x01\x90\x91R`\x01`\x01`\x80\x1B\x03C\x81\x16\x82R\x83\x81\x16` \x80\x84\x01\x91\x82R\x86T`\x01\x81\x01\x88U`\0\x88\x81R\x91\x90\x91 \x93Q\x91Q\x83\x16`\x01`\x80\x1B\x02\x91\x90\x92\x16\x17\x91\x01UPPPV[\x81\x83a\x1FQ`\x01\x84a'\xA6V[\x81T\x81\x10a\x1FaWa\x1Faa'\xB9V[`\0\x91\x82R` \x90\x91 \x01\x80T`\x01`\x01`\x80\x1B\x03\x92\x83\x16`\x01`\x80\x1B\x02\x92\x16\x91\x90\x91\x17\x90UPPPV[`\0\x81\x81R`\x01\x83\x01` R`@\x81 Ta\x1F\xD3WP\x81T`\x01\x81\x81\x01\x84U`\0\x84\x81R` \x80\x82 \x90\x93\x01\x84\x90U\x84T\x84\x82R\x82\x86\x01\x90\x93R`@\x90 \x91\x90\x91Ua\x05$V[P`\0a\x05$V[`\0\x81\x81R`\x01\x83\x01` R`@\x81 T\x80\x15a \xC4W`\0a\x1F\xFF`\x01\x83a'\xA6V[\x85T\x90\x91P`\0\x90a \x13\x90`\x01\x90a'\xA6V[\x90P\x81\x81\x14a xW`\0\x86`\0\x01\x82\x81T\x81\x10a 3Wa 3a'\xB9V[\x90`\0R` `\0 \x01T\x90P\x80\x87`\0\x01\x84\x81T\x81\x10a VWa Va'\xB9V[`\0\x91\x82R` \x80\x83 \x90\x91\x01\x92\x90\x92U\x91\x82R`\x01\x88\x01\x90R`@\x90 \x83\x90U[\x85T\x86\x90\x80a \x89Wa \x89a(2V[`\x01\x90\x03\x81\x81\x90`\0R` `\0 \x01`\0\x90U\x90U\x85`\x01\x01`\0\x86\x81R` \x01\x90\x81R` \x01`\0 `\0\x90U`\x01\x93PPPPa\x05$V[`\0\x91PPa\x05$V[`\0` \x82\x84\x03\x12\x15a \xE0W`\0\x80\xFD[\x815`\x01`\x01`\xE0\x1B\x03\x19\x81\x16\x81\x14a\x08\xEDW`\0\x80\xFD[` \x80\x82R\x82Q\x82\x82\x01\x81\x90R`\0\x91\x90\x84\x82\x01\x90`@\x85\x01\x90\x84[\x81\x81\x10\x15a!9W\x83Q`\x01`\x01`\xA0\x1B\x03\x16\x83R\x92\x84\x01\x92\x91\x84\x01\x91`\x01\x01a!\x14V[P\x90\x96\x95PPPPPPV[`\0[\x83\x81\x10\x15a!`W\x81\x81\x01Q\x83\x82\x01R` \x01a!HV[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra!\x81\x81` \x86\x01` \x86\x01a!EV[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[` \x81R`\0a\x08\xED` \x83\x01\x84a!iV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a!\xBDW`\0\x80\xFD[PV[`\0\x80`@\x83\x85\x03\x12\x15a!\xD3W`\0\x80\xFD[\x825a!\xDE\x81a!\xA8V[\x94` \x93\x90\x93\x015\x93PPPV[`\0\x80`\0``\x84\x86\x03\x12\x15a\"\x01W`\0\x80\xFD[\x835a\"\x0C\x81a!\xA8V[\x92P` \x84\x015a\"\x1C\x81a!\xA8V[\x92\x95\x92\x94PPP`@\x91\x90\x91\x015\x90V[`\0` \x82\x84\x03\x12\x15a\"?W`\0\x80\xFD[P5\x91\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a\"YW`\0\x80\xFD[\x825\x91P` \x83\x015a\"k\x81a!\xA8V[\x80\x91PP\x92P\x92\x90PV[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[`\0\x82`\x1F\x83\x01\x12a\"\x9DW`\0\x80\xFD[\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a\"\xB8Wa\"\xB8a\"vV[`@Q`\x1F\x83\x01`\x1F\x19\x90\x81\x16`?\x01\x16\x81\x01\x90\x82\x82\x11\x81\x83\x10\x17\x15a\"\xE0Wa\"\xE0a\"vV[\x81`@R\x83\x81R\x86` \x85\x88\x01\x01\x11\x15a\"\xF9W`\0\x80\xFD[\x83` \x87\x01` \x83\x017`\0` \x85\x83\x01\x01R\x80\x94PPPPP\x92\x91PPV[`\0\x80`\0\x80`\0`\xA0\x86\x88\x03\x12\x15a#1W`\0\x80\xFD[\x855a#<\x81a!\xA8V[\x94P` \x86\x015a#L\x81a!\xA8V[\x93P`@\x86\x015\x92P``\x86\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a#pW`\0\x80\xFD[a#|\x89\x83\x8A\x01a\"\x8CV[\x93P`\x80\x88\x015\x91P\x80\x82\x11\x15a#\x92W`\0\x80\xFD[Pa#\x9F\x88\x82\x89\x01a\"\x8CV[\x91PP\x92\x95P\x92\x95\x90\x93PV[`\0` \x82\x84\x03\x12\x15a#\xBEW`\0\x80\xFD[\x815a\x08\xED\x81a!\xA8V[`\0\x80`@\x83\x85\x03\x12\x15a#\xDCW`\0\x80\xFD[PP\x805\x92` \x90\x91\x015\x91PV[\x805`\x01`\x01`\x80\x1B\x03\x81\x16\x81\x14a$\x02W`\0\x80\xFD[\x91\x90PV[`\0` \x82\x84\x03\x12\x15a$\x19W`\0\x80\xFD[a\x08\xED\x82a#\xEBV[`\0\x80`\0``\x84\x86\x03\x12\x15a$7W`\0\x80\xFD[\x835a$B\x81a!\xA8V[\x92P` \x84\x015\x91P`@\x84\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a$eW`\0\x80\xFD[a$q\x86\x82\x87\x01a\"\x8CV[\x91PP\x92P\x92P\x92V[`\0\x80`@\x83\x85\x03\x12\x15a$\x8EW`\0\x80\xFD[\x825a$\x99\x81a!\xA8V[\x91P` \x83\x015a\"k\x81a!\xA8V[`\0\x80`\0\x80`\x80\x85\x87\x03\x12\x15a$\xBFW`\0\x80\xFD[\x845a$\xCA\x81a!\xA8V[\x93P` \x85\x015\x92P`@\x85\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a$\xEEW`\0\x80\xFD[a$\xFA\x88\x83\x89\x01a\"\x8CV[\x93P``\x87\x015\x91P\x80\x82\x11\x15a%\x10W`\0\x80\xFD[Pa%\x1D\x87\x82\x88\x01a\"\x8CV[\x91PP\x92\x95\x91\x94P\x92PV[`\0\x80`@\x83\x85\x03\x12\x15a%<W`\0\x80\xFD[\x825a%G\x81a!\xA8V[\x91Pa%U` \x84\x01a#\xEBV[\x90P\x92P\x92\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a%qW`\0\x80\xFD[\x825\x91P` \x83\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a%\x8FW`\0\x80\xFD[a%\x9B\x85\x82\x86\x01a\"\x8CV[\x91PP\x92P\x92\x90PV[`\x01\x81\x81\x1C\x90\x82\x16\x80a%\xB9W`\x7F\x82\x16\x91P[` \x82\x10\x81\x03a%\xD9WcNH{q`\xE0\x1B`\0R`\"`\x04R`$`\0\xFD[P\x91\x90PV[` \x80\x82R`$\x90\x82\x01R\x7FERC777: transfer to the zero add`@\x82\x01Rcress`\xE0\x1B``\x82\x01R`\x80\x01\x90V[` \x80\x82R`,\x90\x82\x01R\x7FERC777: caller is not an operato`@\x82\x01Rk9\x1037\xB9\x1047\xB622\xB9`\xA1\x1B``\x82\x01R`\x80\x01\x90V[`\0` \x82\x84\x03\x12\x15a&\x81W`\0\x80\xFD[\x81Qa\x08\xED\x81a!\xA8V[`\x01`\x01`\xA0\x1B\x03\x87\x81\x16\x82R\x86\x81\x16` \x83\x01R\x85\x16`@\x82\x01R``\x81\x01\x84\x90R`\xC0`\x80\x82\x01\x81\x90R`\0\x90a&\xC7\x90\x83\x01\x85a!iV[\x82\x81\x03`\xA0\x84\x01Ra&\xD9\x81\x85a!iV[\x99\x98PPPPPPPPPV[\x83\x81R``` \x82\x01R`\0a&\xFF``\x83\x01\x85a!iV[\x82\x81\x03`@\x84\x01Ra'\x11\x81\x85a!iV[\x96\x95PPPPPPV[\x7FAccessControl: account \0\0\0\0\0\0\0\0\0\x81R`\0\x83Qa'S\x81`\x17\x85\x01` \x88\x01a!EV[p\x01\x03K\x99\x03kK\x9B\x9BKs9\x03\x93{c)`}\x1B`\x17\x91\x84\x01\x91\x82\x01R\x83Qa'\x84\x81`(\x84\x01` \x88\x01a!EV[\x01`(\x01\x94\x93PPPPV[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x81\x81\x03\x81\x81\x11\x15a\x05$Wa\x05$a'\x90V[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[\x80\x82\x01\x80\x82\x11\x15a\x05$Wa\x05$a'\x90V[`\0\x82a'\xFFWcNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[P\x04\x90V[\x80\x82\x02\x81\x15\x82\x82\x04\x84\x14\x17a\x05$Wa\x05$a'\x90V[`\0\x81a(*Wa(*a'\x90V[P`\0\x19\x01\x90V[cNH{q`\xE0\x1B`\0R`1`\x04R`$`\0\xFD\xFEERC777: transfer amount exceeds balanceERC777: transfer amount exceeds allowanceERC777: burn amount exceeds balance\xA2dipfsX\"\x12 \x83\x18\x90Iy\xF9[\xE02\xF9\x95\xB7[\x0F\xA0a\x84\xE9\x86Gx\xB44\xC6\xCC)\x8F:f;\xD8\x01dsolcC\0\x08\x13\x003",
1033    );
1034    #[derive(serde::Serialize, serde::Deserialize)]
1035    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1036    /**Event with signature `Approval(address,address,uint256)` and selector `0x8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925`.
1037```solidity
1038event Approval(address indexed owner, address indexed spender, uint256 value);
1039```*/
1040    #[allow(
1041        non_camel_case_types,
1042        non_snake_case,
1043        clippy::pub_underscore_fields,
1044        clippy::style
1045    )]
1046    #[derive(Clone)]
1047    pub struct Approval {
1048        #[allow(missing_docs)]
1049        pub owner: alloy::sol_types::private::Address,
1050        #[allow(missing_docs)]
1051        pub spender: alloy::sol_types::private::Address,
1052        #[allow(missing_docs)]
1053        pub value: alloy::sol_types::private::primitives::aliases::U256,
1054    }
1055    #[allow(
1056        non_camel_case_types,
1057        non_snake_case,
1058        clippy::pub_underscore_fields,
1059        clippy::style
1060    )]
1061    const _: () = {
1062        use alloy::sol_types as alloy_sol_types;
1063        #[automatically_derived]
1064        impl alloy_sol_types::SolEvent for Approval {
1065            type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
1066            type DataToken<'a> = <Self::DataTuple<
1067                'a,
1068            > as alloy_sol_types::SolType>::Token<'a>;
1069            type TopicList = (
1070                alloy_sol_types::sol_data::FixedBytes<32>,
1071                alloy::sol_types::sol_data::Address,
1072                alloy::sol_types::sol_data::Address,
1073            );
1074            const SIGNATURE: &'static str = "Approval(address,address,uint256)";
1075            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
1076                140u8, 91u8, 225u8, 229u8, 235u8, 236u8, 125u8, 91u8, 209u8, 79u8, 113u8,
1077                66u8, 125u8, 30u8, 132u8, 243u8, 221u8, 3u8, 20u8, 192u8, 247u8, 178u8,
1078                41u8, 30u8, 91u8, 32u8, 10u8, 200u8, 199u8, 195u8, 185u8, 37u8,
1079            ]);
1080            const ANONYMOUS: bool = false;
1081            #[allow(unused_variables)]
1082            #[inline]
1083            fn new(
1084                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
1085                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
1086            ) -> Self {
1087                Self {
1088                    owner: topics.1,
1089                    spender: topics.2,
1090                    value: data.0,
1091                }
1092            }
1093            #[inline]
1094            fn check_signature(
1095                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
1096            ) -> alloy_sol_types::Result<()> {
1097                if topics.0 != Self::SIGNATURE_HASH {
1098                    return Err(
1099                        alloy_sol_types::Error::invalid_event_signature_hash(
1100                            Self::SIGNATURE,
1101                            topics.0,
1102                            Self::SIGNATURE_HASH,
1103                        ),
1104                    );
1105                }
1106                Ok(())
1107            }
1108            #[inline]
1109            fn tokenize_body(&self) -> Self::DataToken<'_> {
1110                (
1111                    <alloy::sol_types::sol_data::Uint<
1112                        256,
1113                    > as alloy_sol_types::SolType>::tokenize(&self.value),
1114                )
1115            }
1116            #[inline]
1117            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1118                (Self::SIGNATURE_HASH.into(), self.owner.clone(), self.spender.clone())
1119            }
1120            #[inline]
1121            fn encode_topics_raw(
1122                &self,
1123                out: &mut [alloy_sol_types::abi::token::WordToken],
1124            ) -> alloy_sol_types::Result<()> {
1125                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1126                    return Err(alloy_sol_types::Error::Overrun);
1127                }
1128                out[0usize] = alloy_sol_types::abi::token::WordToken(
1129                    Self::SIGNATURE_HASH,
1130                );
1131                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1132                    &self.owner,
1133                );
1134                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1135                    &self.spender,
1136                );
1137                Ok(())
1138            }
1139        }
1140        #[automatically_derived]
1141        impl alloy_sol_types::private::IntoLogData for Approval {
1142            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1143                From::from(self)
1144            }
1145            fn into_log_data(self) -> alloy_sol_types::private::LogData {
1146                From::from(&self)
1147            }
1148        }
1149        #[automatically_derived]
1150        impl From<&Approval> for alloy_sol_types::private::LogData {
1151            #[inline]
1152            fn from(this: &Approval) -> alloy_sol_types::private::LogData {
1153                alloy_sol_types::SolEvent::encode_log_data(this)
1154            }
1155        }
1156    };
1157    #[derive(serde::Serialize, serde::Deserialize)]
1158    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1159    /**Event with signature `AuthorizedOperator(address,address)` and selector `0xf4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f9`.
1160```solidity
1161event AuthorizedOperator(address indexed operator, address indexed tokenHolder);
1162```*/
1163    #[allow(
1164        non_camel_case_types,
1165        non_snake_case,
1166        clippy::pub_underscore_fields,
1167        clippy::style
1168    )]
1169    #[derive(Clone)]
1170    pub struct AuthorizedOperator {
1171        #[allow(missing_docs)]
1172        pub operator: alloy::sol_types::private::Address,
1173        #[allow(missing_docs)]
1174        pub tokenHolder: alloy::sol_types::private::Address,
1175    }
1176    #[allow(
1177        non_camel_case_types,
1178        non_snake_case,
1179        clippy::pub_underscore_fields,
1180        clippy::style
1181    )]
1182    const _: () = {
1183        use alloy::sol_types as alloy_sol_types;
1184        #[automatically_derived]
1185        impl alloy_sol_types::SolEvent for AuthorizedOperator {
1186            type DataTuple<'a> = ();
1187            type DataToken<'a> = <Self::DataTuple<
1188                'a,
1189            > as alloy_sol_types::SolType>::Token<'a>;
1190            type TopicList = (
1191                alloy_sol_types::sol_data::FixedBytes<32>,
1192                alloy::sol_types::sol_data::Address,
1193                alloy::sol_types::sol_data::Address,
1194            );
1195            const SIGNATURE: &'static str = "AuthorizedOperator(address,address)";
1196            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
1197                244u8, 202u8, 235u8, 45u8, 108u8, 168u8, 147u8, 42u8, 33u8, 90u8, 53u8,
1198                61u8, 7u8, 3u8, 195u8, 38u8, 236u8, 45u8, 129u8, 252u8, 104u8, 23u8,
1199                15u8, 50u8, 14u8, 178u8, 171u8, 73u8, 233u8, 223u8, 97u8, 249u8,
1200            ]);
1201            const ANONYMOUS: bool = false;
1202            #[allow(unused_variables)]
1203            #[inline]
1204            fn new(
1205                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
1206                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
1207            ) -> Self {
1208                Self {
1209                    operator: topics.1,
1210                    tokenHolder: topics.2,
1211                }
1212            }
1213            #[inline]
1214            fn check_signature(
1215                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
1216            ) -> alloy_sol_types::Result<()> {
1217                if topics.0 != Self::SIGNATURE_HASH {
1218                    return Err(
1219                        alloy_sol_types::Error::invalid_event_signature_hash(
1220                            Self::SIGNATURE,
1221                            topics.0,
1222                            Self::SIGNATURE_HASH,
1223                        ),
1224                    );
1225                }
1226                Ok(())
1227            }
1228            #[inline]
1229            fn tokenize_body(&self) -> Self::DataToken<'_> {
1230                ()
1231            }
1232            #[inline]
1233            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1234                (
1235                    Self::SIGNATURE_HASH.into(),
1236                    self.operator.clone(),
1237                    self.tokenHolder.clone(),
1238                )
1239            }
1240            #[inline]
1241            fn encode_topics_raw(
1242                &self,
1243                out: &mut [alloy_sol_types::abi::token::WordToken],
1244            ) -> alloy_sol_types::Result<()> {
1245                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1246                    return Err(alloy_sol_types::Error::Overrun);
1247                }
1248                out[0usize] = alloy_sol_types::abi::token::WordToken(
1249                    Self::SIGNATURE_HASH,
1250                );
1251                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1252                    &self.operator,
1253                );
1254                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1255                    &self.tokenHolder,
1256                );
1257                Ok(())
1258            }
1259        }
1260        #[automatically_derived]
1261        impl alloy_sol_types::private::IntoLogData for AuthorizedOperator {
1262            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1263                From::from(self)
1264            }
1265            fn into_log_data(self) -> alloy_sol_types::private::LogData {
1266                From::from(&self)
1267            }
1268        }
1269        #[automatically_derived]
1270        impl From<&AuthorizedOperator> for alloy_sol_types::private::LogData {
1271            #[inline]
1272            fn from(this: &AuthorizedOperator) -> alloy_sol_types::private::LogData {
1273                alloy_sol_types::SolEvent::encode_log_data(this)
1274            }
1275        }
1276    };
1277    #[derive(serde::Serialize, serde::Deserialize)]
1278    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1279    /**Event with signature `Burned(address,address,uint256,bytes,bytes)` and selector `0xa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098`.
1280```solidity
1281event Burned(address indexed operator, address indexed from, uint256 amount, bytes data, bytes operatorData);
1282```*/
1283    #[allow(
1284        non_camel_case_types,
1285        non_snake_case,
1286        clippy::pub_underscore_fields,
1287        clippy::style
1288    )]
1289    #[derive(Clone)]
1290    pub struct Burned {
1291        #[allow(missing_docs)]
1292        pub operator: alloy::sol_types::private::Address,
1293        #[allow(missing_docs)]
1294        pub from: alloy::sol_types::private::Address,
1295        #[allow(missing_docs)]
1296        pub amount: alloy::sol_types::private::primitives::aliases::U256,
1297        #[allow(missing_docs)]
1298        pub data: alloy::sol_types::private::Bytes,
1299        #[allow(missing_docs)]
1300        pub operatorData: alloy::sol_types::private::Bytes,
1301    }
1302    #[allow(
1303        non_camel_case_types,
1304        non_snake_case,
1305        clippy::pub_underscore_fields,
1306        clippy::style
1307    )]
1308    const _: () = {
1309        use alloy::sol_types as alloy_sol_types;
1310        #[automatically_derived]
1311        impl alloy_sol_types::SolEvent for Burned {
1312            type DataTuple<'a> = (
1313                alloy::sol_types::sol_data::Uint<256>,
1314                alloy::sol_types::sol_data::Bytes,
1315                alloy::sol_types::sol_data::Bytes,
1316            );
1317            type DataToken<'a> = <Self::DataTuple<
1318                'a,
1319            > as alloy_sol_types::SolType>::Token<'a>;
1320            type TopicList = (
1321                alloy_sol_types::sol_data::FixedBytes<32>,
1322                alloy::sol_types::sol_data::Address,
1323                alloy::sol_types::sol_data::Address,
1324            );
1325            const SIGNATURE: &'static str = "Burned(address,address,uint256,bytes,bytes)";
1326            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
1327                167u8, 138u8, 155u8, 227u8, 167u8, 184u8, 98u8, 210u8, 105u8, 51u8,
1328                173u8, 133u8, 251u8, 17u8, 216u8, 14u8, 246u8, 107u8, 143u8, 151u8, 45u8,
1329                124u8, 187u8, 160u8, 102u8, 33u8, 213u8, 131u8, 148u8, 58u8, 64u8, 152u8,
1330            ]);
1331            const ANONYMOUS: bool = false;
1332            #[allow(unused_variables)]
1333            #[inline]
1334            fn new(
1335                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
1336                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
1337            ) -> Self {
1338                Self {
1339                    operator: topics.1,
1340                    from: topics.2,
1341                    amount: data.0,
1342                    data: data.1,
1343                    operatorData: data.2,
1344                }
1345            }
1346            #[inline]
1347            fn check_signature(
1348                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
1349            ) -> alloy_sol_types::Result<()> {
1350                if topics.0 != Self::SIGNATURE_HASH {
1351                    return Err(
1352                        alloy_sol_types::Error::invalid_event_signature_hash(
1353                            Self::SIGNATURE,
1354                            topics.0,
1355                            Self::SIGNATURE_HASH,
1356                        ),
1357                    );
1358                }
1359                Ok(())
1360            }
1361            #[inline]
1362            fn tokenize_body(&self) -> Self::DataToken<'_> {
1363                (
1364                    <alloy::sol_types::sol_data::Uint<
1365                        256,
1366                    > as alloy_sol_types::SolType>::tokenize(&self.amount),
1367                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
1368                        &self.data,
1369                    ),
1370                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
1371                        &self.operatorData,
1372                    ),
1373                )
1374            }
1375            #[inline]
1376            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1377                (Self::SIGNATURE_HASH.into(), self.operator.clone(), self.from.clone())
1378            }
1379            #[inline]
1380            fn encode_topics_raw(
1381                &self,
1382                out: &mut [alloy_sol_types::abi::token::WordToken],
1383            ) -> alloy_sol_types::Result<()> {
1384                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1385                    return Err(alloy_sol_types::Error::Overrun);
1386                }
1387                out[0usize] = alloy_sol_types::abi::token::WordToken(
1388                    Self::SIGNATURE_HASH,
1389                );
1390                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1391                    &self.operator,
1392                );
1393                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1394                    &self.from,
1395                );
1396                Ok(())
1397            }
1398        }
1399        #[automatically_derived]
1400        impl alloy_sol_types::private::IntoLogData for Burned {
1401            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1402                From::from(self)
1403            }
1404            fn into_log_data(self) -> alloy_sol_types::private::LogData {
1405                From::from(&self)
1406            }
1407        }
1408        #[automatically_derived]
1409        impl From<&Burned> for alloy_sol_types::private::LogData {
1410            #[inline]
1411            fn from(this: &Burned) -> alloy_sol_types::private::LogData {
1412                alloy_sol_types::SolEvent::encode_log_data(this)
1413            }
1414        }
1415    };
1416    #[derive(serde::Serialize, serde::Deserialize)]
1417    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1418    /**Event with signature `Minted(address,address,uint256,bytes,bytes)` and selector `0x2fe5be0146f74c5bce36c0b80911af6c7d86ff27e89d5cfa61fc681327954e5d`.
1419```solidity
1420event Minted(address indexed operator, address indexed to, uint256 amount, bytes data, bytes operatorData);
1421```*/
1422    #[allow(
1423        non_camel_case_types,
1424        non_snake_case,
1425        clippy::pub_underscore_fields,
1426        clippy::style
1427    )]
1428    #[derive(Clone)]
1429    pub struct Minted {
1430        #[allow(missing_docs)]
1431        pub operator: alloy::sol_types::private::Address,
1432        #[allow(missing_docs)]
1433        pub to: alloy::sol_types::private::Address,
1434        #[allow(missing_docs)]
1435        pub amount: alloy::sol_types::private::primitives::aliases::U256,
1436        #[allow(missing_docs)]
1437        pub data: alloy::sol_types::private::Bytes,
1438        #[allow(missing_docs)]
1439        pub operatorData: alloy::sol_types::private::Bytes,
1440    }
1441    #[allow(
1442        non_camel_case_types,
1443        non_snake_case,
1444        clippy::pub_underscore_fields,
1445        clippy::style
1446    )]
1447    const _: () = {
1448        use alloy::sol_types as alloy_sol_types;
1449        #[automatically_derived]
1450        impl alloy_sol_types::SolEvent for Minted {
1451            type DataTuple<'a> = (
1452                alloy::sol_types::sol_data::Uint<256>,
1453                alloy::sol_types::sol_data::Bytes,
1454                alloy::sol_types::sol_data::Bytes,
1455            );
1456            type DataToken<'a> = <Self::DataTuple<
1457                'a,
1458            > as alloy_sol_types::SolType>::Token<'a>;
1459            type TopicList = (
1460                alloy_sol_types::sol_data::FixedBytes<32>,
1461                alloy::sol_types::sol_data::Address,
1462                alloy::sol_types::sol_data::Address,
1463            );
1464            const SIGNATURE: &'static str = "Minted(address,address,uint256,bytes,bytes)";
1465            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
1466                47u8, 229u8, 190u8, 1u8, 70u8, 247u8, 76u8, 91u8, 206u8, 54u8, 192u8,
1467                184u8, 9u8, 17u8, 175u8, 108u8, 125u8, 134u8, 255u8, 39u8, 232u8, 157u8,
1468                92u8, 250u8, 97u8, 252u8, 104u8, 19u8, 39u8, 149u8, 78u8, 93u8,
1469            ]);
1470            const ANONYMOUS: bool = false;
1471            #[allow(unused_variables)]
1472            #[inline]
1473            fn new(
1474                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
1475                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
1476            ) -> Self {
1477                Self {
1478                    operator: topics.1,
1479                    to: topics.2,
1480                    amount: data.0,
1481                    data: data.1,
1482                    operatorData: data.2,
1483                }
1484            }
1485            #[inline]
1486            fn check_signature(
1487                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
1488            ) -> alloy_sol_types::Result<()> {
1489                if topics.0 != Self::SIGNATURE_HASH {
1490                    return Err(
1491                        alloy_sol_types::Error::invalid_event_signature_hash(
1492                            Self::SIGNATURE,
1493                            topics.0,
1494                            Self::SIGNATURE_HASH,
1495                        ),
1496                    );
1497                }
1498                Ok(())
1499            }
1500            #[inline]
1501            fn tokenize_body(&self) -> Self::DataToken<'_> {
1502                (
1503                    <alloy::sol_types::sol_data::Uint<
1504                        256,
1505                    > as alloy_sol_types::SolType>::tokenize(&self.amount),
1506                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
1507                        &self.data,
1508                    ),
1509                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
1510                        &self.operatorData,
1511                    ),
1512                )
1513            }
1514            #[inline]
1515            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1516                (Self::SIGNATURE_HASH.into(), self.operator.clone(), self.to.clone())
1517            }
1518            #[inline]
1519            fn encode_topics_raw(
1520                &self,
1521                out: &mut [alloy_sol_types::abi::token::WordToken],
1522            ) -> alloy_sol_types::Result<()> {
1523                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1524                    return Err(alloy_sol_types::Error::Overrun);
1525                }
1526                out[0usize] = alloy_sol_types::abi::token::WordToken(
1527                    Self::SIGNATURE_HASH,
1528                );
1529                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1530                    &self.operator,
1531                );
1532                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1533                    &self.to,
1534                );
1535                Ok(())
1536            }
1537        }
1538        #[automatically_derived]
1539        impl alloy_sol_types::private::IntoLogData for Minted {
1540            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1541                From::from(self)
1542            }
1543            fn into_log_data(self) -> alloy_sol_types::private::LogData {
1544                From::from(&self)
1545            }
1546        }
1547        #[automatically_derived]
1548        impl From<&Minted> for alloy_sol_types::private::LogData {
1549            #[inline]
1550            fn from(this: &Minted) -> alloy_sol_types::private::LogData {
1551                alloy_sol_types::SolEvent::encode_log_data(this)
1552            }
1553        }
1554    };
1555    #[derive(serde::Serialize, serde::Deserialize)]
1556    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1557    /**Event with signature `RevokedOperator(address,address)` and selector `0x50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa1`.
1558```solidity
1559event RevokedOperator(address indexed operator, address indexed tokenHolder);
1560```*/
1561    #[allow(
1562        non_camel_case_types,
1563        non_snake_case,
1564        clippy::pub_underscore_fields,
1565        clippy::style
1566    )]
1567    #[derive(Clone)]
1568    pub struct RevokedOperator {
1569        #[allow(missing_docs)]
1570        pub operator: alloy::sol_types::private::Address,
1571        #[allow(missing_docs)]
1572        pub tokenHolder: alloy::sol_types::private::Address,
1573    }
1574    #[allow(
1575        non_camel_case_types,
1576        non_snake_case,
1577        clippy::pub_underscore_fields,
1578        clippy::style
1579    )]
1580    const _: () = {
1581        use alloy::sol_types as alloy_sol_types;
1582        #[automatically_derived]
1583        impl alloy_sol_types::SolEvent for RevokedOperator {
1584            type DataTuple<'a> = ();
1585            type DataToken<'a> = <Self::DataTuple<
1586                'a,
1587            > as alloy_sol_types::SolType>::Token<'a>;
1588            type TopicList = (
1589                alloy_sol_types::sol_data::FixedBytes<32>,
1590                alloy::sol_types::sol_data::Address,
1591                alloy::sol_types::sol_data::Address,
1592            );
1593            const SIGNATURE: &'static str = "RevokedOperator(address,address)";
1594            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
1595                80u8, 84u8, 110u8, 102u8, 229u8, 244u8, 77u8, 114u8, 131u8, 101u8, 220u8,
1596                57u8, 8u8, 198u8, 59u8, 197u8, 207u8, 238u8, 171u8, 71u8, 7u8, 34u8,
1597                193u8, 103u8, 126u8, 48u8, 115u8, 166u8, 172u8, 41u8, 74u8, 161u8,
1598            ]);
1599            const ANONYMOUS: bool = false;
1600            #[allow(unused_variables)]
1601            #[inline]
1602            fn new(
1603                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
1604                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
1605            ) -> Self {
1606                Self {
1607                    operator: topics.1,
1608                    tokenHolder: topics.2,
1609                }
1610            }
1611            #[inline]
1612            fn check_signature(
1613                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
1614            ) -> alloy_sol_types::Result<()> {
1615                if topics.0 != Self::SIGNATURE_HASH {
1616                    return Err(
1617                        alloy_sol_types::Error::invalid_event_signature_hash(
1618                            Self::SIGNATURE,
1619                            topics.0,
1620                            Self::SIGNATURE_HASH,
1621                        ),
1622                    );
1623                }
1624                Ok(())
1625            }
1626            #[inline]
1627            fn tokenize_body(&self) -> Self::DataToken<'_> {
1628                ()
1629            }
1630            #[inline]
1631            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1632                (
1633                    Self::SIGNATURE_HASH.into(),
1634                    self.operator.clone(),
1635                    self.tokenHolder.clone(),
1636                )
1637            }
1638            #[inline]
1639            fn encode_topics_raw(
1640                &self,
1641                out: &mut [alloy_sol_types::abi::token::WordToken],
1642            ) -> alloy_sol_types::Result<()> {
1643                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1644                    return Err(alloy_sol_types::Error::Overrun);
1645                }
1646                out[0usize] = alloy_sol_types::abi::token::WordToken(
1647                    Self::SIGNATURE_HASH,
1648                );
1649                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1650                    &self.operator,
1651                );
1652                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1653                    &self.tokenHolder,
1654                );
1655                Ok(())
1656            }
1657        }
1658        #[automatically_derived]
1659        impl alloy_sol_types::private::IntoLogData for RevokedOperator {
1660            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1661                From::from(self)
1662            }
1663            fn into_log_data(self) -> alloy_sol_types::private::LogData {
1664                From::from(&self)
1665            }
1666        }
1667        #[automatically_derived]
1668        impl From<&RevokedOperator> for alloy_sol_types::private::LogData {
1669            #[inline]
1670            fn from(this: &RevokedOperator) -> alloy_sol_types::private::LogData {
1671                alloy_sol_types::SolEvent::encode_log_data(this)
1672            }
1673        }
1674    };
1675    #[derive(serde::Serialize, serde::Deserialize)]
1676    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1677    /**Event with signature `RoleAdminChanged(bytes32,bytes32,bytes32)` and selector `0xbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff`.
1678```solidity
1679event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
1680```*/
1681    #[allow(
1682        non_camel_case_types,
1683        non_snake_case,
1684        clippy::pub_underscore_fields,
1685        clippy::style
1686    )]
1687    #[derive(Clone)]
1688    pub struct RoleAdminChanged {
1689        #[allow(missing_docs)]
1690        pub role: alloy::sol_types::private::FixedBytes<32>,
1691        #[allow(missing_docs)]
1692        pub previousAdminRole: alloy::sol_types::private::FixedBytes<32>,
1693        #[allow(missing_docs)]
1694        pub newAdminRole: alloy::sol_types::private::FixedBytes<32>,
1695    }
1696    #[allow(
1697        non_camel_case_types,
1698        non_snake_case,
1699        clippy::pub_underscore_fields,
1700        clippy::style
1701    )]
1702    const _: () = {
1703        use alloy::sol_types as alloy_sol_types;
1704        #[automatically_derived]
1705        impl alloy_sol_types::SolEvent for RoleAdminChanged {
1706            type DataTuple<'a> = ();
1707            type DataToken<'a> = <Self::DataTuple<
1708                'a,
1709            > as alloy_sol_types::SolType>::Token<'a>;
1710            type TopicList = (
1711                alloy_sol_types::sol_data::FixedBytes<32>,
1712                alloy::sol_types::sol_data::FixedBytes<32>,
1713                alloy::sol_types::sol_data::FixedBytes<32>,
1714                alloy::sol_types::sol_data::FixedBytes<32>,
1715            );
1716            const SIGNATURE: &'static str = "RoleAdminChanged(bytes32,bytes32,bytes32)";
1717            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
1718                189u8, 121u8, 184u8, 111u8, 254u8, 10u8, 184u8, 232u8, 119u8, 97u8, 81u8,
1719                81u8, 66u8, 23u8, 205u8, 124u8, 172u8, 213u8, 44u8, 144u8, 159u8, 102u8,
1720                71u8, 92u8, 58u8, 244u8, 78u8, 18u8, 159u8, 11u8, 0u8, 255u8,
1721            ]);
1722            const ANONYMOUS: bool = false;
1723            #[allow(unused_variables)]
1724            #[inline]
1725            fn new(
1726                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
1727                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
1728            ) -> Self {
1729                Self {
1730                    role: topics.1,
1731                    previousAdminRole: topics.2,
1732                    newAdminRole: topics.3,
1733                }
1734            }
1735            #[inline]
1736            fn check_signature(
1737                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
1738            ) -> alloy_sol_types::Result<()> {
1739                if topics.0 != Self::SIGNATURE_HASH {
1740                    return Err(
1741                        alloy_sol_types::Error::invalid_event_signature_hash(
1742                            Self::SIGNATURE,
1743                            topics.0,
1744                            Self::SIGNATURE_HASH,
1745                        ),
1746                    );
1747                }
1748                Ok(())
1749            }
1750            #[inline]
1751            fn tokenize_body(&self) -> Self::DataToken<'_> {
1752                ()
1753            }
1754            #[inline]
1755            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1756                (
1757                    Self::SIGNATURE_HASH.into(),
1758                    self.role.clone(),
1759                    self.previousAdminRole.clone(),
1760                    self.newAdminRole.clone(),
1761                )
1762            }
1763            #[inline]
1764            fn encode_topics_raw(
1765                &self,
1766                out: &mut [alloy_sol_types::abi::token::WordToken],
1767            ) -> alloy_sol_types::Result<()> {
1768                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1769                    return Err(alloy_sol_types::Error::Overrun);
1770                }
1771                out[0usize] = alloy_sol_types::abi::token::WordToken(
1772                    Self::SIGNATURE_HASH,
1773                );
1774                out[1usize] = <alloy::sol_types::sol_data::FixedBytes<
1775                    32,
1776                > as alloy_sol_types::EventTopic>::encode_topic(&self.role);
1777                out[2usize] = <alloy::sol_types::sol_data::FixedBytes<
1778                    32,
1779                > as alloy_sol_types::EventTopic>::encode_topic(&self.previousAdminRole);
1780                out[3usize] = <alloy::sol_types::sol_data::FixedBytes<
1781                    32,
1782                > as alloy_sol_types::EventTopic>::encode_topic(&self.newAdminRole);
1783                Ok(())
1784            }
1785        }
1786        #[automatically_derived]
1787        impl alloy_sol_types::private::IntoLogData for RoleAdminChanged {
1788            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1789                From::from(self)
1790            }
1791            fn into_log_data(self) -> alloy_sol_types::private::LogData {
1792                From::from(&self)
1793            }
1794        }
1795        #[automatically_derived]
1796        impl From<&RoleAdminChanged> for alloy_sol_types::private::LogData {
1797            #[inline]
1798            fn from(this: &RoleAdminChanged) -> alloy_sol_types::private::LogData {
1799                alloy_sol_types::SolEvent::encode_log_data(this)
1800            }
1801        }
1802    };
1803    #[derive(serde::Serialize, serde::Deserialize)]
1804    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1805    /**Event with signature `RoleGranted(bytes32,address,address)` and selector `0x2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d`.
1806```solidity
1807event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
1808```*/
1809    #[allow(
1810        non_camel_case_types,
1811        non_snake_case,
1812        clippy::pub_underscore_fields,
1813        clippy::style
1814    )]
1815    #[derive(Clone)]
1816    pub struct RoleGranted {
1817        #[allow(missing_docs)]
1818        pub role: alloy::sol_types::private::FixedBytes<32>,
1819        #[allow(missing_docs)]
1820        pub account: alloy::sol_types::private::Address,
1821        #[allow(missing_docs)]
1822        pub sender: alloy::sol_types::private::Address,
1823    }
1824    #[allow(
1825        non_camel_case_types,
1826        non_snake_case,
1827        clippy::pub_underscore_fields,
1828        clippy::style
1829    )]
1830    const _: () = {
1831        use alloy::sol_types as alloy_sol_types;
1832        #[automatically_derived]
1833        impl alloy_sol_types::SolEvent for RoleGranted {
1834            type DataTuple<'a> = ();
1835            type DataToken<'a> = <Self::DataTuple<
1836                'a,
1837            > as alloy_sol_types::SolType>::Token<'a>;
1838            type TopicList = (
1839                alloy_sol_types::sol_data::FixedBytes<32>,
1840                alloy::sol_types::sol_data::FixedBytes<32>,
1841                alloy::sol_types::sol_data::Address,
1842                alloy::sol_types::sol_data::Address,
1843            );
1844            const SIGNATURE: &'static str = "RoleGranted(bytes32,address,address)";
1845            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
1846                47u8, 135u8, 136u8, 17u8, 126u8, 126u8, 255u8, 29u8, 130u8, 233u8, 38u8,
1847                236u8, 121u8, 73u8, 1u8, 209u8, 124u8, 120u8, 2u8, 74u8, 80u8, 39u8, 9u8,
1848                64u8, 48u8, 69u8, 64u8, 167u8, 51u8, 101u8, 111u8, 13u8,
1849            ]);
1850            const ANONYMOUS: bool = false;
1851            #[allow(unused_variables)]
1852            #[inline]
1853            fn new(
1854                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
1855                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
1856            ) -> Self {
1857                Self {
1858                    role: topics.1,
1859                    account: topics.2,
1860                    sender: topics.3,
1861                }
1862            }
1863            #[inline]
1864            fn check_signature(
1865                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
1866            ) -> alloy_sol_types::Result<()> {
1867                if topics.0 != Self::SIGNATURE_HASH {
1868                    return Err(
1869                        alloy_sol_types::Error::invalid_event_signature_hash(
1870                            Self::SIGNATURE,
1871                            topics.0,
1872                            Self::SIGNATURE_HASH,
1873                        ),
1874                    );
1875                }
1876                Ok(())
1877            }
1878            #[inline]
1879            fn tokenize_body(&self) -> Self::DataToken<'_> {
1880                ()
1881            }
1882            #[inline]
1883            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
1884                (
1885                    Self::SIGNATURE_HASH.into(),
1886                    self.role.clone(),
1887                    self.account.clone(),
1888                    self.sender.clone(),
1889                )
1890            }
1891            #[inline]
1892            fn encode_topics_raw(
1893                &self,
1894                out: &mut [alloy_sol_types::abi::token::WordToken],
1895            ) -> alloy_sol_types::Result<()> {
1896                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
1897                    return Err(alloy_sol_types::Error::Overrun);
1898                }
1899                out[0usize] = alloy_sol_types::abi::token::WordToken(
1900                    Self::SIGNATURE_HASH,
1901                );
1902                out[1usize] = <alloy::sol_types::sol_data::FixedBytes<
1903                    32,
1904                > as alloy_sol_types::EventTopic>::encode_topic(&self.role);
1905                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1906                    &self.account,
1907                );
1908                out[3usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
1909                    &self.sender,
1910                );
1911                Ok(())
1912            }
1913        }
1914        #[automatically_derived]
1915        impl alloy_sol_types::private::IntoLogData for RoleGranted {
1916            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
1917                From::from(self)
1918            }
1919            fn into_log_data(self) -> alloy_sol_types::private::LogData {
1920                From::from(&self)
1921            }
1922        }
1923        #[automatically_derived]
1924        impl From<&RoleGranted> for alloy_sol_types::private::LogData {
1925            #[inline]
1926            fn from(this: &RoleGranted) -> alloy_sol_types::private::LogData {
1927                alloy_sol_types::SolEvent::encode_log_data(this)
1928            }
1929        }
1930    };
1931    #[derive(serde::Serialize, serde::Deserialize)]
1932    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1933    /**Event with signature `RoleRevoked(bytes32,address,address)` and selector `0xf6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b`.
1934```solidity
1935event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
1936```*/
1937    #[allow(
1938        non_camel_case_types,
1939        non_snake_case,
1940        clippy::pub_underscore_fields,
1941        clippy::style
1942    )]
1943    #[derive(Clone)]
1944    pub struct RoleRevoked {
1945        #[allow(missing_docs)]
1946        pub role: alloy::sol_types::private::FixedBytes<32>,
1947        #[allow(missing_docs)]
1948        pub account: alloy::sol_types::private::Address,
1949        #[allow(missing_docs)]
1950        pub sender: alloy::sol_types::private::Address,
1951    }
1952    #[allow(
1953        non_camel_case_types,
1954        non_snake_case,
1955        clippy::pub_underscore_fields,
1956        clippy::style
1957    )]
1958    const _: () = {
1959        use alloy::sol_types as alloy_sol_types;
1960        #[automatically_derived]
1961        impl alloy_sol_types::SolEvent for RoleRevoked {
1962            type DataTuple<'a> = ();
1963            type DataToken<'a> = <Self::DataTuple<
1964                'a,
1965            > as alloy_sol_types::SolType>::Token<'a>;
1966            type TopicList = (
1967                alloy_sol_types::sol_data::FixedBytes<32>,
1968                alloy::sol_types::sol_data::FixedBytes<32>,
1969                alloy::sol_types::sol_data::Address,
1970                alloy::sol_types::sol_data::Address,
1971            );
1972            const SIGNATURE: &'static str = "RoleRevoked(bytes32,address,address)";
1973            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
1974                246u8, 57u8, 31u8, 92u8, 50u8, 217u8, 198u8, 157u8, 42u8, 71u8, 234u8,
1975                103u8, 11u8, 68u8, 41u8, 116u8, 181u8, 57u8, 53u8, 209u8, 237u8, 199u8,
1976                253u8, 100u8, 235u8, 33u8, 224u8, 71u8, 168u8, 57u8, 23u8, 27u8,
1977            ]);
1978            const ANONYMOUS: bool = false;
1979            #[allow(unused_variables)]
1980            #[inline]
1981            fn new(
1982                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
1983                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
1984            ) -> Self {
1985                Self {
1986                    role: topics.1,
1987                    account: topics.2,
1988                    sender: topics.3,
1989                }
1990            }
1991            #[inline]
1992            fn check_signature(
1993                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
1994            ) -> alloy_sol_types::Result<()> {
1995                if topics.0 != Self::SIGNATURE_HASH {
1996                    return Err(
1997                        alloy_sol_types::Error::invalid_event_signature_hash(
1998                            Self::SIGNATURE,
1999                            topics.0,
2000                            Self::SIGNATURE_HASH,
2001                        ),
2002                    );
2003                }
2004                Ok(())
2005            }
2006            #[inline]
2007            fn tokenize_body(&self) -> Self::DataToken<'_> {
2008                ()
2009            }
2010            #[inline]
2011            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
2012                (
2013                    Self::SIGNATURE_HASH.into(),
2014                    self.role.clone(),
2015                    self.account.clone(),
2016                    self.sender.clone(),
2017                )
2018            }
2019            #[inline]
2020            fn encode_topics_raw(
2021                &self,
2022                out: &mut [alloy_sol_types::abi::token::WordToken],
2023            ) -> alloy_sol_types::Result<()> {
2024                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
2025                    return Err(alloy_sol_types::Error::Overrun);
2026                }
2027                out[0usize] = alloy_sol_types::abi::token::WordToken(
2028                    Self::SIGNATURE_HASH,
2029                );
2030                out[1usize] = <alloy::sol_types::sol_data::FixedBytes<
2031                    32,
2032                > as alloy_sol_types::EventTopic>::encode_topic(&self.role);
2033                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
2034                    &self.account,
2035                );
2036                out[3usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
2037                    &self.sender,
2038                );
2039                Ok(())
2040            }
2041        }
2042        #[automatically_derived]
2043        impl alloy_sol_types::private::IntoLogData for RoleRevoked {
2044            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
2045                From::from(self)
2046            }
2047            fn into_log_data(self) -> alloy_sol_types::private::LogData {
2048                From::from(&self)
2049            }
2050        }
2051        #[automatically_derived]
2052        impl From<&RoleRevoked> for alloy_sol_types::private::LogData {
2053            #[inline]
2054            fn from(this: &RoleRevoked) -> alloy_sol_types::private::LogData {
2055                alloy_sol_types::SolEvent::encode_log_data(this)
2056            }
2057        }
2058    };
2059    #[derive(serde::Serialize, serde::Deserialize)]
2060    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2061    /**Event with signature `Sent(address,address,address,uint256,bytes,bytes)` and selector `0x06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987`.
2062```solidity
2063event Sent(address indexed operator, address indexed from, address indexed to, uint256 amount, bytes data, bytes operatorData);
2064```*/
2065    #[allow(
2066        non_camel_case_types,
2067        non_snake_case,
2068        clippy::pub_underscore_fields,
2069        clippy::style
2070    )]
2071    #[derive(Clone)]
2072    pub struct Sent {
2073        #[allow(missing_docs)]
2074        pub operator: alloy::sol_types::private::Address,
2075        #[allow(missing_docs)]
2076        pub from: alloy::sol_types::private::Address,
2077        #[allow(missing_docs)]
2078        pub to: alloy::sol_types::private::Address,
2079        #[allow(missing_docs)]
2080        pub amount: alloy::sol_types::private::primitives::aliases::U256,
2081        #[allow(missing_docs)]
2082        pub data: alloy::sol_types::private::Bytes,
2083        #[allow(missing_docs)]
2084        pub operatorData: alloy::sol_types::private::Bytes,
2085    }
2086    #[allow(
2087        non_camel_case_types,
2088        non_snake_case,
2089        clippy::pub_underscore_fields,
2090        clippy::style
2091    )]
2092    const _: () = {
2093        use alloy::sol_types as alloy_sol_types;
2094        #[automatically_derived]
2095        impl alloy_sol_types::SolEvent for Sent {
2096            type DataTuple<'a> = (
2097                alloy::sol_types::sol_data::Uint<256>,
2098                alloy::sol_types::sol_data::Bytes,
2099                alloy::sol_types::sol_data::Bytes,
2100            );
2101            type DataToken<'a> = <Self::DataTuple<
2102                'a,
2103            > as alloy_sol_types::SolType>::Token<'a>;
2104            type TopicList = (
2105                alloy_sol_types::sol_data::FixedBytes<32>,
2106                alloy::sol_types::sol_data::Address,
2107                alloy::sol_types::sol_data::Address,
2108                alloy::sol_types::sol_data::Address,
2109            );
2110            const SIGNATURE: &'static str = "Sent(address,address,address,uint256,bytes,bytes)";
2111            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
2112                6u8, 181u8, 65u8, 221u8, 170u8, 114u8, 13u8, 178u8, 177u8, 10u8, 77u8,
2113                12u8, 218u8, 195u8, 155u8, 141u8, 54u8, 4u8, 37u8, 252u8, 7u8, 48u8,
2114                133u8, 250u8, 193u8, 155u8, 200u8, 38u8, 20u8, 103u8, 121u8, 135u8,
2115            ]);
2116            const ANONYMOUS: bool = false;
2117            #[allow(unused_variables)]
2118            #[inline]
2119            fn new(
2120                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
2121                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
2122            ) -> Self {
2123                Self {
2124                    operator: topics.1,
2125                    from: topics.2,
2126                    to: topics.3,
2127                    amount: data.0,
2128                    data: data.1,
2129                    operatorData: data.2,
2130                }
2131            }
2132            #[inline]
2133            fn check_signature(
2134                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
2135            ) -> alloy_sol_types::Result<()> {
2136                if topics.0 != Self::SIGNATURE_HASH {
2137                    return Err(
2138                        alloy_sol_types::Error::invalid_event_signature_hash(
2139                            Self::SIGNATURE,
2140                            topics.0,
2141                            Self::SIGNATURE_HASH,
2142                        ),
2143                    );
2144                }
2145                Ok(())
2146            }
2147            #[inline]
2148            fn tokenize_body(&self) -> Self::DataToken<'_> {
2149                (
2150                    <alloy::sol_types::sol_data::Uint<
2151                        256,
2152                    > as alloy_sol_types::SolType>::tokenize(&self.amount),
2153                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
2154                        &self.data,
2155                    ),
2156                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
2157                        &self.operatorData,
2158                    ),
2159                )
2160            }
2161            #[inline]
2162            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
2163                (
2164                    Self::SIGNATURE_HASH.into(),
2165                    self.operator.clone(),
2166                    self.from.clone(),
2167                    self.to.clone(),
2168                )
2169            }
2170            #[inline]
2171            fn encode_topics_raw(
2172                &self,
2173                out: &mut [alloy_sol_types::abi::token::WordToken],
2174            ) -> alloy_sol_types::Result<()> {
2175                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
2176                    return Err(alloy_sol_types::Error::Overrun);
2177                }
2178                out[0usize] = alloy_sol_types::abi::token::WordToken(
2179                    Self::SIGNATURE_HASH,
2180                );
2181                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
2182                    &self.operator,
2183                );
2184                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
2185                    &self.from,
2186                );
2187                out[3usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
2188                    &self.to,
2189                );
2190                Ok(())
2191            }
2192        }
2193        #[automatically_derived]
2194        impl alloy_sol_types::private::IntoLogData for Sent {
2195            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
2196                From::from(self)
2197            }
2198            fn into_log_data(self) -> alloy_sol_types::private::LogData {
2199                From::from(&self)
2200            }
2201        }
2202        #[automatically_derived]
2203        impl From<&Sent> for alloy_sol_types::private::LogData {
2204            #[inline]
2205            fn from(this: &Sent) -> alloy_sol_types::private::LogData {
2206                alloy_sol_types::SolEvent::encode_log_data(this)
2207            }
2208        }
2209    };
2210    #[derive(serde::Serialize, serde::Deserialize)]
2211    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2212    /**Event with signature `Transfer(address,address,uint256)` and selector `0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef`.
2213```solidity
2214event Transfer(address indexed from, address indexed to, uint256 value);
2215```*/
2216    #[allow(
2217        non_camel_case_types,
2218        non_snake_case,
2219        clippy::pub_underscore_fields,
2220        clippy::style
2221    )]
2222    #[derive(Clone)]
2223    pub struct Transfer {
2224        #[allow(missing_docs)]
2225        pub from: alloy::sol_types::private::Address,
2226        #[allow(missing_docs)]
2227        pub to: alloy::sol_types::private::Address,
2228        #[allow(missing_docs)]
2229        pub value: alloy::sol_types::private::primitives::aliases::U256,
2230    }
2231    #[allow(
2232        non_camel_case_types,
2233        non_snake_case,
2234        clippy::pub_underscore_fields,
2235        clippy::style
2236    )]
2237    const _: () = {
2238        use alloy::sol_types as alloy_sol_types;
2239        #[automatically_derived]
2240        impl alloy_sol_types::SolEvent for Transfer {
2241            type DataTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
2242            type DataToken<'a> = <Self::DataTuple<
2243                'a,
2244            > as alloy_sol_types::SolType>::Token<'a>;
2245            type TopicList = (
2246                alloy_sol_types::sol_data::FixedBytes<32>,
2247                alloy::sol_types::sol_data::Address,
2248                alloy::sol_types::sol_data::Address,
2249            );
2250            const SIGNATURE: &'static str = "Transfer(address,address,uint256)";
2251            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
2252                221u8, 242u8, 82u8, 173u8, 27u8, 226u8, 200u8, 155u8, 105u8, 194u8,
2253                176u8, 104u8, 252u8, 55u8, 141u8, 170u8, 149u8, 43u8, 167u8, 241u8, 99u8,
2254                196u8, 161u8, 22u8, 40u8, 245u8, 90u8, 77u8, 245u8, 35u8, 179u8, 239u8,
2255            ]);
2256            const ANONYMOUS: bool = false;
2257            #[allow(unused_variables)]
2258            #[inline]
2259            fn new(
2260                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
2261                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
2262            ) -> Self {
2263                Self {
2264                    from: topics.1,
2265                    to: topics.2,
2266                    value: data.0,
2267                }
2268            }
2269            #[inline]
2270            fn check_signature(
2271                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
2272            ) -> alloy_sol_types::Result<()> {
2273                if topics.0 != Self::SIGNATURE_HASH {
2274                    return Err(
2275                        alloy_sol_types::Error::invalid_event_signature_hash(
2276                            Self::SIGNATURE,
2277                            topics.0,
2278                            Self::SIGNATURE_HASH,
2279                        ),
2280                    );
2281                }
2282                Ok(())
2283            }
2284            #[inline]
2285            fn tokenize_body(&self) -> Self::DataToken<'_> {
2286                (
2287                    <alloy::sol_types::sol_data::Uint<
2288                        256,
2289                    > as alloy_sol_types::SolType>::tokenize(&self.value),
2290                )
2291            }
2292            #[inline]
2293            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
2294                (Self::SIGNATURE_HASH.into(), self.from.clone(), self.to.clone())
2295            }
2296            #[inline]
2297            fn encode_topics_raw(
2298                &self,
2299                out: &mut [alloy_sol_types::abi::token::WordToken],
2300            ) -> alloy_sol_types::Result<()> {
2301                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
2302                    return Err(alloy_sol_types::Error::Overrun);
2303                }
2304                out[0usize] = alloy_sol_types::abi::token::WordToken(
2305                    Self::SIGNATURE_HASH,
2306                );
2307                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
2308                    &self.from,
2309                );
2310                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
2311                    &self.to,
2312                );
2313                Ok(())
2314            }
2315        }
2316        #[automatically_derived]
2317        impl alloy_sol_types::private::IntoLogData for Transfer {
2318            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
2319                From::from(self)
2320            }
2321            fn into_log_data(self) -> alloy_sol_types::private::LogData {
2322                From::from(&self)
2323            }
2324        }
2325        #[automatically_derived]
2326        impl From<&Transfer> for alloy_sol_types::private::LogData {
2327            #[inline]
2328            fn from(this: &Transfer) -> alloy_sol_types::private::LogData {
2329                alloy_sol_types::SolEvent::encode_log_data(this)
2330            }
2331        }
2332    };
2333    /**Constructor`.
2334```solidity
2335constructor();
2336```*/
2337    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2338    #[derive(Clone)]
2339    pub struct constructorCall {}
2340    const _: () = {
2341        use alloy::sol_types as alloy_sol_types;
2342        {
2343            #[doc(hidden)]
2344            type UnderlyingSolTuple<'a> = ();
2345            #[doc(hidden)]
2346            type UnderlyingRustTuple<'a> = ();
2347            #[cfg(test)]
2348            #[allow(dead_code, unreachable_patterns)]
2349            fn _type_assertion(
2350                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2351            ) {
2352                match _t {
2353                    alloy_sol_types::private::AssertTypeEq::<
2354                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2355                    >(_) => {}
2356                }
2357            }
2358            #[automatically_derived]
2359            #[doc(hidden)]
2360            impl ::core::convert::From<constructorCall> for UnderlyingRustTuple<'_> {
2361                fn from(value: constructorCall) -> Self {
2362                    ()
2363                }
2364            }
2365            #[automatically_derived]
2366            #[doc(hidden)]
2367            impl ::core::convert::From<UnderlyingRustTuple<'_>> for constructorCall {
2368                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2369                    Self {}
2370                }
2371            }
2372        }
2373        #[automatically_derived]
2374        impl alloy_sol_types::SolConstructor for constructorCall {
2375            type Parameters<'a> = ();
2376            type Token<'a> = <Self::Parameters<
2377                'a,
2378            > as alloy_sol_types::SolType>::Token<'a>;
2379            #[inline]
2380            fn new<'a>(
2381                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2382            ) -> Self {
2383                tuple.into()
2384            }
2385            #[inline]
2386            fn tokenize(&self) -> Self::Token<'_> {
2387                ()
2388            }
2389        }
2390    };
2391    #[derive(serde::Serialize, serde::Deserialize)]
2392    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2393    /**Function with signature `DEFAULT_ADMIN_ROLE()` and selector `0xa217fddf`.
2394```solidity
2395function DEFAULT_ADMIN_ROLE() external view returns (bytes32);
2396```*/
2397    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2398    #[derive(Clone)]
2399    pub struct DEFAULT_ADMIN_ROLECall;
2400    #[derive(serde::Serialize, serde::Deserialize)]
2401    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2402    ///Container type for the return parameters of the [`DEFAULT_ADMIN_ROLE()`](DEFAULT_ADMIN_ROLECall) function.
2403    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2404    #[derive(Clone)]
2405    pub struct DEFAULT_ADMIN_ROLEReturn {
2406        #[allow(missing_docs)]
2407        pub _0: alloy::sol_types::private::FixedBytes<32>,
2408    }
2409    #[allow(
2410        non_camel_case_types,
2411        non_snake_case,
2412        clippy::pub_underscore_fields,
2413        clippy::style
2414    )]
2415    const _: () = {
2416        use alloy::sol_types as alloy_sol_types;
2417        {
2418            #[doc(hidden)]
2419            type UnderlyingSolTuple<'a> = ();
2420            #[doc(hidden)]
2421            type UnderlyingRustTuple<'a> = ();
2422            #[cfg(test)]
2423            #[allow(dead_code, unreachable_patterns)]
2424            fn _type_assertion(
2425                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2426            ) {
2427                match _t {
2428                    alloy_sol_types::private::AssertTypeEq::<
2429                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2430                    >(_) => {}
2431                }
2432            }
2433            #[automatically_derived]
2434            #[doc(hidden)]
2435            impl ::core::convert::From<DEFAULT_ADMIN_ROLECall>
2436            for UnderlyingRustTuple<'_> {
2437                fn from(value: DEFAULT_ADMIN_ROLECall) -> Self {
2438                    ()
2439                }
2440            }
2441            #[automatically_derived]
2442            #[doc(hidden)]
2443            impl ::core::convert::From<UnderlyingRustTuple<'_>>
2444            for DEFAULT_ADMIN_ROLECall {
2445                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2446                    Self
2447                }
2448            }
2449        }
2450        {
2451            #[doc(hidden)]
2452            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
2453            #[doc(hidden)]
2454            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
2455            #[cfg(test)]
2456            #[allow(dead_code, unreachable_patterns)]
2457            fn _type_assertion(
2458                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2459            ) {
2460                match _t {
2461                    alloy_sol_types::private::AssertTypeEq::<
2462                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2463                    >(_) => {}
2464                }
2465            }
2466            #[automatically_derived]
2467            #[doc(hidden)]
2468            impl ::core::convert::From<DEFAULT_ADMIN_ROLEReturn>
2469            for UnderlyingRustTuple<'_> {
2470                fn from(value: DEFAULT_ADMIN_ROLEReturn) -> Self {
2471                    (value._0,)
2472                }
2473            }
2474            #[automatically_derived]
2475            #[doc(hidden)]
2476            impl ::core::convert::From<UnderlyingRustTuple<'_>>
2477            for DEFAULT_ADMIN_ROLEReturn {
2478                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2479                    Self { _0: tuple.0 }
2480                }
2481            }
2482        }
2483        #[automatically_derived]
2484        impl alloy_sol_types::SolCall for DEFAULT_ADMIN_ROLECall {
2485            type Parameters<'a> = ();
2486            type Token<'a> = <Self::Parameters<
2487                'a,
2488            > as alloy_sol_types::SolType>::Token<'a>;
2489            type Return = alloy::sol_types::private::FixedBytes<32>;
2490            type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
2491            type ReturnToken<'a> = <Self::ReturnTuple<
2492                'a,
2493            > as alloy_sol_types::SolType>::Token<'a>;
2494            const SIGNATURE: &'static str = "DEFAULT_ADMIN_ROLE()";
2495            const SELECTOR: [u8; 4] = [162u8, 23u8, 253u8, 223u8];
2496            #[inline]
2497            fn new<'a>(
2498                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2499            ) -> Self {
2500                tuple.into()
2501            }
2502            #[inline]
2503            fn tokenize(&self) -> Self::Token<'_> {
2504                ()
2505            }
2506            #[inline]
2507            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
2508                (
2509                    <alloy::sol_types::sol_data::FixedBytes<
2510                        32,
2511                    > as alloy_sol_types::SolType>::tokenize(ret),
2512                )
2513            }
2514            #[inline]
2515            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
2516                <Self::ReturnTuple<
2517                    '_,
2518                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
2519                    .map(|r| {
2520                        let r: DEFAULT_ADMIN_ROLEReturn = r.into();
2521                        r._0
2522                    })
2523            }
2524            #[inline]
2525            fn abi_decode_returns_validate(
2526                data: &[u8],
2527            ) -> alloy_sol_types::Result<Self::Return> {
2528                <Self::ReturnTuple<
2529                    '_,
2530                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2531                    .map(|r| {
2532                        let r: DEFAULT_ADMIN_ROLEReturn = r.into();
2533                        r._0
2534                    })
2535            }
2536        }
2537    };
2538    #[derive(serde::Serialize, serde::Deserialize)]
2539    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2540    /**Function with signature `MINTER_ROLE()` and selector `0xd5391393`.
2541```solidity
2542function MINTER_ROLE() external view returns (bytes32);
2543```*/
2544    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2545    #[derive(Clone)]
2546    pub struct MINTER_ROLECall;
2547    #[derive(serde::Serialize, serde::Deserialize)]
2548    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2549    ///Container type for the return parameters of the [`MINTER_ROLE()`](MINTER_ROLECall) function.
2550    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2551    #[derive(Clone)]
2552    pub struct MINTER_ROLEReturn {
2553        #[allow(missing_docs)]
2554        pub _0: alloy::sol_types::private::FixedBytes<32>,
2555    }
2556    #[allow(
2557        non_camel_case_types,
2558        non_snake_case,
2559        clippy::pub_underscore_fields,
2560        clippy::style
2561    )]
2562    const _: () = {
2563        use alloy::sol_types as alloy_sol_types;
2564        {
2565            #[doc(hidden)]
2566            type UnderlyingSolTuple<'a> = ();
2567            #[doc(hidden)]
2568            type UnderlyingRustTuple<'a> = ();
2569            #[cfg(test)]
2570            #[allow(dead_code, unreachable_patterns)]
2571            fn _type_assertion(
2572                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2573            ) {
2574                match _t {
2575                    alloy_sol_types::private::AssertTypeEq::<
2576                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2577                    >(_) => {}
2578                }
2579            }
2580            #[automatically_derived]
2581            #[doc(hidden)]
2582            impl ::core::convert::From<MINTER_ROLECall> for UnderlyingRustTuple<'_> {
2583                fn from(value: MINTER_ROLECall) -> Self {
2584                    ()
2585                }
2586            }
2587            #[automatically_derived]
2588            #[doc(hidden)]
2589            impl ::core::convert::From<UnderlyingRustTuple<'_>> for MINTER_ROLECall {
2590                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2591                    Self
2592                }
2593            }
2594        }
2595        {
2596            #[doc(hidden)]
2597            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
2598            #[doc(hidden)]
2599            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
2600            #[cfg(test)]
2601            #[allow(dead_code, unreachable_patterns)]
2602            fn _type_assertion(
2603                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2604            ) {
2605                match _t {
2606                    alloy_sol_types::private::AssertTypeEq::<
2607                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2608                    >(_) => {}
2609                }
2610            }
2611            #[automatically_derived]
2612            #[doc(hidden)]
2613            impl ::core::convert::From<MINTER_ROLEReturn> for UnderlyingRustTuple<'_> {
2614                fn from(value: MINTER_ROLEReturn) -> Self {
2615                    (value._0,)
2616                }
2617            }
2618            #[automatically_derived]
2619            #[doc(hidden)]
2620            impl ::core::convert::From<UnderlyingRustTuple<'_>> for MINTER_ROLEReturn {
2621                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2622                    Self { _0: tuple.0 }
2623                }
2624            }
2625        }
2626        #[automatically_derived]
2627        impl alloy_sol_types::SolCall for MINTER_ROLECall {
2628            type Parameters<'a> = ();
2629            type Token<'a> = <Self::Parameters<
2630                'a,
2631            > as alloy_sol_types::SolType>::Token<'a>;
2632            type Return = alloy::sol_types::private::FixedBytes<32>;
2633            type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
2634            type ReturnToken<'a> = <Self::ReturnTuple<
2635                'a,
2636            > as alloy_sol_types::SolType>::Token<'a>;
2637            const SIGNATURE: &'static str = "MINTER_ROLE()";
2638            const SELECTOR: [u8; 4] = [213u8, 57u8, 19u8, 147u8];
2639            #[inline]
2640            fn new<'a>(
2641                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2642            ) -> Self {
2643                tuple.into()
2644            }
2645            #[inline]
2646            fn tokenize(&self) -> Self::Token<'_> {
2647                ()
2648            }
2649            #[inline]
2650            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
2651                (
2652                    <alloy::sol_types::sol_data::FixedBytes<
2653                        32,
2654                    > as alloy_sol_types::SolType>::tokenize(ret),
2655                )
2656            }
2657            #[inline]
2658            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
2659                <Self::ReturnTuple<
2660                    '_,
2661                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
2662                    .map(|r| {
2663                        let r: MINTER_ROLEReturn = r.into();
2664                        r._0
2665                    })
2666            }
2667            #[inline]
2668            fn abi_decode_returns_validate(
2669                data: &[u8],
2670            ) -> alloy_sol_types::Result<Self::Return> {
2671                <Self::ReturnTuple<
2672                    '_,
2673                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2674                    .map(|r| {
2675                        let r: MINTER_ROLEReturn = r.into();
2676                        r._0
2677                    })
2678            }
2679        }
2680    };
2681    #[derive(serde::Serialize, serde::Deserialize)]
2682    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2683    /**Function with signature `accountSnapshots(address,uint256)` and selector `0x2497aee6`.
2684```solidity
2685function accountSnapshots(address, uint256) external view returns (uint128 fromBlock, uint128 value);
2686```*/
2687    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2688    #[derive(Clone)]
2689    pub struct accountSnapshotsCall {
2690        #[allow(missing_docs)]
2691        pub _0: alloy::sol_types::private::Address,
2692        #[allow(missing_docs)]
2693        pub _1: alloy::sol_types::private::primitives::aliases::U256,
2694    }
2695    #[derive(serde::Serialize, serde::Deserialize)]
2696    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2697    ///Container type for the return parameters of the [`accountSnapshots(address,uint256)`](accountSnapshotsCall) function.
2698    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2699    #[derive(Clone)]
2700    pub struct accountSnapshotsReturn {
2701        #[allow(missing_docs)]
2702        pub fromBlock: u128,
2703        #[allow(missing_docs)]
2704        pub value: u128,
2705    }
2706    #[allow(
2707        non_camel_case_types,
2708        non_snake_case,
2709        clippy::pub_underscore_fields,
2710        clippy::style
2711    )]
2712    const _: () = {
2713        use alloy::sol_types as alloy_sol_types;
2714        {
2715            #[doc(hidden)]
2716            type UnderlyingSolTuple<'a> = (
2717                alloy::sol_types::sol_data::Address,
2718                alloy::sol_types::sol_data::Uint<256>,
2719            );
2720            #[doc(hidden)]
2721            type UnderlyingRustTuple<'a> = (
2722                alloy::sol_types::private::Address,
2723                alloy::sol_types::private::primitives::aliases::U256,
2724            );
2725            #[cfg(test)]
2726            #[allow(dead_code, unreachable_patterns)]
2727            fn _type_assertion(
2728                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2729            ) {
2730                match _t {
2731                    alloy_sol_types::private::AssertTypeEq::<
2732                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2733                    >(_) => {}
2734                }
2735            }
2736            #[automatically_derived]
2737            #[doc(hidden)]
2738            impl ::core::convert::From<accountSnapshotsCall>
2739            for UnderlyingRustTuple<'_> {
2740                fn from(value: accountSnapshotsCall) -> Self {
2741                    (value._0, value._1)
2742                }
2743            }
2744            #[automatically_derived]
2745            #[doc(hidden)]
2746            impl ::core::convert::From<UnderlyingRustTuple<'_>>
2747            for accountSnapshotsCall {
2748                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2749                    Self { _0: tuple.0, _1: tuple.1 }
2750                }
2751            }
2752        }
2753        {
2754            #[doc(hidden)]
2755            type UnderlyingSolTuple<'a> = (
2756                alloy::sol_types::sol_data::Uint<128>,
2757                alloy::sol_types::sol_data::Uint<128>,
2758            );
2759            #[doc(hidden)]
2760            type UnderlyingRustTuple<'a> = (u128, u128);
2761            #[cfg(test)]
2762            #[allow(dead_code, unreachable_patterns)]
2763            fn _type_assertion(
2764                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2765            ) {
2766                match _t {
2767                    alloy_sol_types::private::AssertTypeEq::<
2768                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2769                    >(_) => {}
2770                }
2771            }
2772            #[automatically_derived]
2773            #[doc(hidden)]
2774            impl ::core::convert::From<accountSnapshotsReturn>
2775            for UnderlyingRustTuple<'_> {
2776                fn from(value: accountSnapshotsReturn) -> Self {
2777                    (value.fromBlock, value.value)
2778                }
2779            }
2780            #[automatically_derived]
2781            #[doc(hidden)]
2782            impl ::core::convert::From<UnderlyingRustTuple<'_>>
2783            for accountSnapshotsReturn {
2784                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2785                    Self {
2786                        fromBlock: tuple.0,
2787                        value: tuple.1,
2788                    }
2789                }
2790            }
2791        }
2792        impl accountSnapshotsReturn {
2793            fn _tokenize(
2794                &self,
2795            ) -> <accountSnapshotsCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
2796                (
2797                    <alloy::sol_types::sol_data::Uint<
2798                        128,
2799                    > as alloy_sol_types::SolType>::tokenize(&self.fromBlock),
2800                    <alloy::sol_types::sol_data::Uint<
2801                        128,
2802                    > as alloy_sol_types::SolType>::tokenize(&self.value),
2803                )
2804            }
2805        }
2806        #[automatically_derived]
2807        impl alloy_sol_types::SolCall for accountSnapshotsCall {
2808            type Parameters<'a> = (
2809                alloy::sol_types::sol_data::Address,
2810                alloy::sol_types::sol_data::Uint<256>,
2811            );
2812            type Token<'a> = <Self::Parameters<
2813                'a,
2814            > as alloy_sol_types::SolType>::Token<'a>;
2815            type Return = accountSnapshotsReturn;
2816            type ReturnTuple<'a> = (
2817                alloy::sol_types::sol_data::Uint<128>,
2818                alloy::sol_types::sol_data::Uint<128>,
2819            );
2820            type ReturnToken<'a> = <Self::ReturnTuple<
2821                'a,
2822            > as alloy_sol_types::SolType>::Token<'a>;
2823            const SIGNATURE: &'static str = "accountSnapshots(address,uint256)";
2824            const SELECTOR: [u8; 4] = [36u8, 151u8, 174u8, 230u8];
2825            #[inline]
2826            fn new<'a>(
2827                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2828            ) -> Self {
2829                tuple.into()
2830            }
2831            #[inline]
2832            fn tokenize(&self) -> Self::Token<'_> {
2833                (
2834                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
2835                        &self._0,
2836                    ),
2837                    <alloy::sol_types::sol_data::Uint<
2838                        256,
2839                    > as alloy_sol_types::SolType>::tokenize(&self._1),
2840                )
2841            }
2842            #[inline]
2843            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
2844                accountSnapshotsReturn::_tokenize(ret)
2845            }
2846            #[inline]
2847            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
2848                <Self::ReturnTuple<
2849                    '_,
2850                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
2851                    .map(Into::into)
2852            }
2853            #[inline]
2854            fn abi_decode_returns_validate(
2855                data: &[u8],
2856            ) -> alloy_sol_types::Result<Self::Return> {
2857                <Self::ReturnTuple<
2858                    '_,
2859                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
2860                    .map(Into::into)
2861            }
2862        }
2863    };
2864    #[derive(serde::Serialize, serde::Deserialize)]
2865    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2866    /**Function with signature `allowance(address,address)` and selector `0xdd62ed3e`.
2867```solidity
2868function allowance(address holder, address spender) external view returns (uint256);
2869```*/
2870    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2871    #[derive(Clone)]
2872    pub struct allowanceCall {
2873        #[allow(missing_docs)]
2874        pub holder: alloy::sol_types::private::Address,
2875        #[allow(missing_docs)]
2876        pub spender: alloy::sol_types::private::Address,
2877    }
2878    #[derive(serde::Serialize, serde::Deserialize)]
2879    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2880    ///Container type for the return parameters of the [`allowance(address,address)`](allowanceCall) function.
2881    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2882    #[derive(Clone)]
2883    pub struct allowanceReturn {
2884        #[allow(missing_docs)]
2885        pub _0: alloy::sol_types::private::primitives::aliases::U256,
2886    }
2887    #[allow(
2888        non_camel_case_types,
2889        non_snake_case,
2890        clippy::pub_underscore_fields,
2891        clippy::style
2892    )]
2893    const _: () = {
2894        use alloy::sol_types as alloy_sol_types;
2895        {
2896            #[doc(hidden)]
2897            type UnderlyingSolTuple<'a> = (
2898                alloy::sol_types::sol_data::Address,
2899                alloy::sol_types::sol_data::Address,
2900            );
2901            #[doc(hidden)]
2902            type UnderlyingRustTuple<'a> = (
2903                alloy::sol_types::private::Address,
2904                alloy::sol_types::private::Address,
2905            );
2906            #[cfg(test)]
2907            #[allow(dead_code, unreachable_patterns)]
2908            fn _type_assertion(
2909                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2910            ) {
2911                match _t {
2912                    alloy_sol_types::private::AssertTypeEq::<
2913                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2914                    >(_) => {}
2915                }
2916            }
2917            #[automatically_derived]
2918            #[doc(hidden)]
2919            impl ::core::convert::From<allowanceCall> for UnderlyingRustTuple<'_> {
2920                fn from(value: allowanceCall) -> Self {
2921                    (value.holder, value.spender)
2922                }
2923            }
2924            #[automatically_derived]
2925            #[doc(hidden)]
2926            impl ::core::convert::From<UnderlyingRustTuple<'_>> for allowanceCall {
2927                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2928                    Self {
2929                        holder: tuple.0,
2930                        spender: tuple.1,
2931                    }
2932                }
2933            }
2934        }
2935        {
2936            #[doc(hidden)]
2937            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
2938            #[doc(hidden)]
2939            type UnderlyingRustTuple<'a> = (
2940                alloy::sol_types::private::primitives::aliases::U256,
2941            );
2942            #[cfg(test)]
2943            #[allow(dead_code, unreachable_patterns)]
2944            fn _type_assertion(
2945                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
2946            ) {
2947                match _t {
2948                    alloy_sol_types::private::AssertTypeEq::<
2949                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
2950                    >(_) => {}
2951                }
2952            }
2953            #[automatically_derived]
2954            #[doc(hidden)]
2955            impl ::core::convert::From<allowanceReturn> for UnderlyingRustTuple<'_> {
2956                fn from(value: allowanceReturn) -> Self {
2957                    (value._0,)
2958                }
2959            }
2960            #[automatically_derived]
2961            #[doc(hidden)]
2962            impl ::core::convert::From<UnderlyingRustTuple<'_>> for allowanceReturn {
2963                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
2964                    Self { _0: tuple.0 }
2965                }
2966            }
2967        }
2968        #[automatically_derived]
2969        impl alloy_sol_types::SolCall for allowanceCall {
2970            type Parameters<'a> = (
2971                alloy::sol_types::sol_data::Address,
2972                alloy::sol_types::sol_data::Address,
2973            );
2974            type Token<'a> = <Self::Parameters<
2975                'a,
2976            > as alloy_sol_types::SolType>::Token<'a>;
2977            type Return = alloy::sol_types::private::primitives::aliases::U256;
2978            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
2979            type ReturnToken<'a> = <Self::ReturnTuple<
2980                'a,
2981            > as alloy_sol_types::SolType>::Token<'a>;
2982            const SIGNATURE: &'static str = "allowance(address,address)";
2983            const SELECTOR: [u8; 4] = [221u8, 98u8, 237u8, 62u8];
2984            #[inline]
2985            fn new<'a>(
2986                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
2987            ) -> Self {
2988                tuple.into()
2989            }
2990            #[inline]
2991            fn tokenize(&self) -> Self::Token<'_> {
2992                (
2993                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
2994                        &self.holder,
2995                    ),
2996                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
2997                        &self.spender,
2998                    ),
2999                )
3000            }
3001            #[inline]
3002            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3003                (
3004                    <alloy::sol_types::sol_data::Uint<
3005                        256,
3006                    > as alloy_sol_types::SolType>::tokenize(ret),
3007                )
3008            }
3009            #[inline]
3010            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3011                <Self::ReturnTuple<
3012                    '_,
3013                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3014                    .map(|r| {
3015                        let r: allowanceReturn = r.into();
3016                        r._0
3017                    })
3018            }
3019            #[inline]
3020            fn abi_decode_returns_validate(
3021                data: &[u8],
3022            ) -> alloy_sol_types::Result<Self::Return> {
3023                <Self::ReturnTuple<
3024                    '_,
3025                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3026                    .map(|r| {
3027                        let r: allowanceReturn = r.into();
3028                        r._0
3029                    })
3030            }
3031        }
3032    };
3033    #[derive(serde::Serialize, serde::Deserialize)]
3034    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3035    /**Function with signature `approve(address,uint256)` and selector `0x095ea7b3`.
3036```solidity
3037function approve(address spender, uint256 value) external returns (bool);
3038```*/
3039    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3040    #[derive(Clone)]
3041    pub struct approveCall {
3042        #[allow(missing_docs)]
3043        pub spender: alloy::sol_types::private::Address,
3044        #[allow(missing_docs)]
3045        pub value: alloy::sol_types::private::primitives::aliases::U256,
3046    }
3047    #[derive(serde::Serialize, serde::Deserialize)]
3048    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3049    ///Container type for the return parameters of the [`approve(address,uint256)`](approveCall) function.
3050    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3051    #[derive(Clone)]
3052    pub struct approveReturn {
3053        #[allow(missing_docs)]
3054        pub _0: bool,
3055    }
3056    #[allow(
3057        non_camel_case_types,
3058        non_snake_case,
3059        clippy::pub_underscore_fields,
3060        clippy::style
3061    )]
3062    const _: () = {
3063        use alloy::sol_types as alloy_sol_types;
3064        {
3065            #[doc(hidden)]
3066            type UnderlyingSolTuple<'a> = (
3067                alloy::sol_types::sol_data::Address,
3068                alloy::sol_types::sol_data::Uint<256>,
3069            );
3070            #[doc(hidden)]
3071            type UnderlyingRustTuple<'a> = (
3072                alloy::sol_types::private::Address,
3073                alloy::sol_types::private::primitives::aliases::U256,
3074            );
3075            #[cfg(test)]
3076            #[allow(dead_code, unreachable_patterns)]
3077            fn _type_assertion(
3078                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3079            ) {
3080                match _t {
3081                    alloy_sol_types::private::AssertTypeEq::<
3082                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3083                    >(_) => {}
3084                }
3085            }
3086            #[automatically_derived]
3087            #[doc(hidden)]
3088            impl ::core::convert::From<approveCall> for UnderlyingRustTuple<'_> {
3089                fn from(value: approveCall) -> Self {
3090                    (value.spender, value.value)
3091                }
3092            }
3093            #[automatically_derived]
3094            #[doc(hidden)]
3095            impl ::core::convert::From<UnderlyingRustTuple<'_>> for approveCall {
3096                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3097                    Self {
3098                        spender: tuple.0,
3099                        value: tuple.1,
3100                    }
3101                }
3102            }
3103        }
3104        {
3105            #[doc(hidden)]
3106            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,);
3107            #[doc(hidden)]
3108            type UnderlyingRustTuple<'a> = (bool,);
3109            #[cfg(test)]
3110            #[allow(dead_code, unreachable_patterns)]
3111            fn _type_assertion(
3112                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3113            ) {
3114                match _t {
3115                    alloy_sol_types::private::AssertTypeEq::<
3116                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3117                    >(_) => {}
3118                }
3119            }
3120            #[automatically_derived]
3121            #[doc(hidden)]
3122            impl ::core::convert::From<approveReturn> for UnderlyingRustTuple<'_> {
3123                fn from(value: approveReturn) -> Self {
3124                    (value._0,)
3125                }
3126            }
3127            #[automatically_derived]
3128            #[doc(hidden)]
3129            impl ::core::convert::From<UnderlyingRustTuple<'_>> for approveReturn {
3130                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3131                    Self { _0: tuple.0 }
3132                }
3133            }
3134        }
3135        #[automatically_derived]
3136        impl alloy_sol_types::SolCall for approveCall {
3137            type Parameters<'a> = (
3138                alloy::sol_types::sol_data::Address,
3139                alloy::sol_types::sol_data::Uint<256>,
3140            );
3141            type Token<'a> = <Self::Parameters<
3142                'a,
3143            > as alloy_sol_types::SolType>::Token<'a>;
3144            type Return = bool;
3145            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,);
3146            type ReturnToken<'a> = <Self::ReturnTuple<
3147                'a,
3148            > as alloy_sol_types::SolType>::Token<'a>;
3149            const SIGNATURE: &'static str = "approve(address,uint256)";
3150            const SELECTOR: [u8; 4] = [9u8, 94u8, 167u8, 179u8];
3151            #[inline]
3152            fn new<'a>(
3153                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3154            ) -> Self {
3155                tuple.into()
3156            }
3157            #[inline]
3158            fn tokenize(&self) -> Self::Token<'_> {
3159                (
3160                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
3161                        &self.spender,
3162                    ),
3163                    <alloy::sol_types::sol_data::Uint<
3164                        256,
3165                    > as alloy_sol_types::SolType>::tokenize(&self.value),
3166                )
3167            }
3168            #[inline]
3169            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3170                (
3171                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
3172                        ret,
3173                    ),
3174                )
3175            }
3176            #[inline]
3177            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3178                <Self::ReturnTuple<
3179                    '_,
3180                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3181                    .map(|r| {
3182                        let r: approveReturn = r.into();
3183                        r._0
3184                    })
3185            }
3186            #[inline]
3187            fn abi_decode_returns_validate(
3188                data: &[u8],
3189            ) -> alloy_sol_types::Result<Self::Return> {
3190                <Self::ReturnTuple<
3191                    '_,
3192                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3193                    .map(|r| {
3194                        let r: approveReturn = r.into();
3195                        r._0
3196                    })
3197            }
3198        }
3199    };
3200    #[derive(serde::Serialize, serde::Deserialize)]
3201    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3202    /**Function with signature `authorizeOperator(address)` and selector `0x959b8c3f`.
3203```solidity
3204function authorizeOperator(address operator) external;
3205```*/
3206    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3207    #[derive(Clone)]
3208    pub struct authorizeOperatorCall {
3209        #[allow(missing_docs)]
3210        pub operator: alloy::sol_types::private::Address,
3211    }
3212    ///Container type for the return parameters of the [`authorizeOperator(address)`](authorizeOperatorCall) function.
3213    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3214    #[derive(Clone)]
3215    pub struct authorizeOperatorReturn {}
3216    #[allow(
3217        non_camel_case_types,
3218        non_snake_case,
3219        clippy::pub_underscore_fields,
3220        clippy::style
3221    )]
3222    const _: () = {
3223        use alloy::sol_types as alloy_sol_types;
3224        {
3225            #[doc(hidden)]
3226            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
3227            #[doc(hidden)]
3228            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
3229            #[cfg(test)]
3230            #[allow(dead_code, unreachable_patterns)]
3231            fn _type_assertion(
3232                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3233            ) {
3234                match _t {
3235                    alloy_sol_types::private::AssertTypeEq::<
3236                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3237                    >(_) => {}
3238                }
3239            }
3240            #[automatically_derived]
3241            #[doc(hidden)]
3242            impl ::core::convert::From<authorizeOperatorCall>
3243            for UnderlyingRustTuple<'_> {
3244                fn from(value: authorizeOperatorCall) -> Self {
3245                    (value.operator,)
3246                }
3247            }
3248            #[automatically_derived]
3249            #[doc(hidden)]
3250            impl ::core::convert::From<UnderlyingRustTuple<'_>>
3251            for authorizeOperatorCall {
3252                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3253                    Self { operator: tuple.0 }
3254                }
3255            }
3256        }
3257        {
3258            #[doc(hidden)]
3259            type UnderlyingSolTuple<'a> = ();
3260            #[doc(hidden)]
3261            type UnderlyingRustTuple<'a> = ();
3262            #[cfg(test)]
3263            #[allow(dead_code, unreachable_patterns)]
3264            fn _type_assertion(
3265                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3266            ) {
3267                match _t {
3268                    alloy_sol_types::private::AssertTypeEq::<
3269                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3270                    >(_) => {}
3271                }
3272            }
3273            #[automatically_derived]
3274            #[doc(hidden)]
3275            impl ::core::convert::From<authorizeOperatorReturn>
3276            for UnderlyingRustTuple<'_> {
3277                fn from(value: authorizeOperatorReturn) -> Self {
3278                    ()
3279                }
3280            }
3281            #[automatically_derived]
3282            #[doc(hidden)]
3283            impl ::core::convert::From<UnderlyingRustTuple<'_>>
3284            for authorizeOperatorReturn {
3285                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3286                    Self {}
3287                }
3288            }
3289        }
3290        impl authorizeOperatorReturn {
3291            fn _tokenize(
3292                &self,
3293            ) -> <authorizeOperatorCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
3294                ()
3295            }
3296        }
3297        #[automatically_derived]
3298        impl alloy_sol_types::SolCall for authorizeOperatorCall {
3299            type Parameters<'a> = (alloy::sol_types::sol_data::Address,);
3300            type Token<'a> = <Self::Parameters<
3301                'a,
3302            > as alloy_sol_types::SolType>::Token<'a>;
3303            type Return = authorizeOperatorReturn;
3304            type ReturnTuple<'a> = ();
3305            type ReturnToken<'a> = <Self::ReturnTuple<
3306                'a,
3307            > as alloy_sol_types::SolType>::Token<'a>;
3308            const SIGNATURE: &'static str = "authorizeOperator(address)";
3309            const SELECTOR: [u8; 4] = [149u8, 155u8, 140u8, 63u8];
3310            #[inline]
3311            fn new<'a>(
3312                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3313            ) -> Self {
3314                tuple.into()
3315            }
3316            #[inline]
3317            fn tokenize(&self) -> Self::Token<'_> {
3318                (
3319                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
3320                        &self.operator,
3321                    ),
3322                )
3323            }
3324            #[inline]
3325            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3326                authorizeOperatorReturn::_tokenize(ret)
3327            }
3328            #[inline]
3329            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3330                <Self::ReturnTuple<
3331                    '_,
3332                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3333                    .map(Into::into)
3334            }
3335            #[inline]
3336            fn abi_decode_returns_validate(
3337                data: &[u8],
3338            ) -> alloy_sol_types::Result<Self::Return> {
3339                <Self::ReturnTuple<
3340                    '_,
3341                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3342                    .map(Into::into)
3343            }
3344        }
3345    };
3346    #[derive(serde::Serialize, serde::Deserialize)]
3347    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3348    /**Function with signature `balanceOf(address)` and selector `0x70a08231`.
3349```solidity
3350function balanceOf(address tokenHolder) external view returns (uint256);
3351```*/
3352    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3353    #[derive(Clone)]
3354    pub struct balanceOfCall {
3355        #[allow(missing_docs)]
3356        pub tokenHolder: alloy::sol_types::private::Address,
3357    }
3358    #[derive(serde::Serialize, serde::Deserialize)]
3359    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3360    ///Container type for the return parameters of the [`balanceOf(address)`](balanceOfCall) function.
3361    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3362    #[derive(Clone)]
3363    pub struct balanceOfReturn {
3364        #[allow(missing_docs)]
3365        pub _0: alloy::sol_types::private::primitives::aliases::U256,
3366    }
3367    #[allow(
3368        non_camel_case_types,
3369        non_snake_case,
3370        clippy::pub_underscore_fields,
3371        clippy::style
3372    )]
3373    const _: () = {
3374        use alloy::sol_types as alloy_sol_types;
3375        {
3376            #[doc(hidden)]
3377            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
3378            #[doc(hidden)]
3379            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
3380            #[cfg(test)]
3381            #[allow(dead_code, unreachable_patterns)]
3382            fn _type_assertion(
3383                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3384            ) {
3385                match _t {
3386                    alloy_sol_types::private::AssertTypeEq::<
3387                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3388                    >(_) => {}
3389                }
3390            }
3391            #[automatically_derived]
3392            #[doc(hidden)]
3393            impl ::core::convert::From<balanceOfCall> for UnderlyingRustTuple<'_> {
3394                fn from(value: balanceOfCall) -> Self {
3395                    (value.tokenHolder,)
3396                }
3397            }
3398            #[automatically_derived]
3399            #[doc(hidden)]
3400            impl ::core::convert::From<UnderlyingRustTuple<'_>> for balanceOfCall {
3401                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3402                    Self { tokenHolder: tuple.0 }
3403                }
3404            }
3405        }
3406        {
3407            #[doc(hidden)]
3408            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
3409            #[doc(hidden)]
3410            type UnderlyingRustTuple<'a> = (
3411                alloy::sol_types::private::primitives::aliases::U256,
3412            );
3413            #[cfg(test)]
3414            #[allow(dead_code, unreachable_patterns)]
3415            fn _type_assertion(
3416                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3417            ) {
3418                match _t {
3419                    alloy_sol_types::private::AssertTypeEq::<
3420                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3421                    >(_) => {}
3422                }
3423            }
3424            #[automatically_derived]
3425            #[doc(hidden)]
3426            impl ::core::convert::From<balanceOfReturn> for UnderlyingRustTuple<'_> {
3427                fn from(value: balanceOfReturn) -> Self {
3428                    (value._0,)
3429                }
3430            }
3431            #[automatically_derived]
3432            #[doc(hidden)]
3433            impl ::core::convert::From<UnderlyingRustTuple<'_>> for balanceOfReturn {
3434                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3435                    Self { _0: tuple.0 }
3436                }
3437            }
3438        }
3439        #[automatically_derived]
3440        impl alloy_sol_types::SolCall for balanceOfCall {
3441            type Parameters<'a> = (alloy::sol_types::sol_data::Address,);
3442            type Token<'a> = <Self::Parameters<
3443                'a,
3444            > as alloy_sol_types::SolType>::Token<'a>;
3445            type Return = alloy::sol_types::private::primitives::aliases::U256;
3446            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
3447            type ReturnToken<'a> = <Self::ReturnTuple<
3448                'a,
3449            > as alloy_sol_types::SolType>::Token<'a>;
3450            const SIGNATURE: &'static str = "balanceOf(address)";
3451            const SELECTOR: [u8; 4] = [112u8, 160u8, 130u8, 49u8];
3452            #[inline]
3453            fn new<'a>(
3454                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3455            ) -> Self {
3456                tuple.into()
3457            }
3458            #[inline]
3459            fn tokenize(&self) -> Self::Token<'_> {
3460                (
3461                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
3462                        &self.tokenHolder,
3463                    ),
3464                )
3465            }
3466            #[inline]
3467            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3468                (
3469                    <alloy::sol_types::sol_data::Uint<
3470                        256,
3471                    > as alloy_sol_types::SolType>::tokenize(ret),
3472                )
3473            }
3474            #[inline]
3475            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3476                <Self::ReturnTuple<
3477                    '_,
3478                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3479                    .map(|r| {
3480                        let r: balanceOfReturn = r.into();
3481                        r._0
3482                    })
3483            }
3484            #[inline]
3485            fn abi_decode_returns_validate(
3486                data: &[u8],
3487            ) -> alloy_sol_types::Result<Self::Return> {
3488                <Self::ReturnTuple<
3489                    '_,
3490                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3491                    .map(|r| {
3492                        let r: balanceOfReturn = r.into();
3493                        r._0
3494                    })
3495            }
3496        }
3497    };
3498    #[derive(serde::Serialize, serde::Deserialize)]
3499    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3500    /**Function with signature `balanceOfAt(address,uint128)` and selector `0xf772a092`.
3501```solidity
3502function balanceOfAt(address _owner, uint128 _blockNumber) external view returns (uint256);
3503```*/
3504    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3505    #[derive(Clone)]
3506    pub struct balanceOfAtCall {
3507        #[allow(missing_docs)]
3508        pub _owner: alloy::sol_types::private::Address,
3509        #[allow(missing_docs)]
3510        pub _blockNumber: u128,
3511    }
3512    #[derive(serde::Serialize, serde::Deserialize)]
3513    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3514    ///Container type for the return parameters of the [`balanceOfAt(address,uint128)`](balanceOfAtCall) function.
3515    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3516    #[derive(Clone)]
3517    pub struct balanceOfAtReturn {
3518        #[allow(missing_docs)]
3519        pub _0: alloy::sol_types::private::primitives::aliases::U256,
3520    }
3521    #[allow(
3522        non_camel_case_types,
3523        non_snake_case,
3524        clippy::pub_underscore_fields,
3525        clippy::style
3526    )]
3527    const _: () = {
3528        use alloy::sol_types as alloy_sol_types;
3529        {
3530            #[doc(hidden)]
3531            type UnderlyingSolTuple<'a> = (
3532                alloy::sol_types::sol_data::Address,
3533                alloy::sol_types::sol_data::Uint<128>,
3534            );
3535            #[doc(hidden)]
3536            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address, u128);
3537            #[cfg(test)]
3538            #[allow(dead_code, unreachable_patterns)]
3539            fn _type_assertion(
3540                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3541            ) {
3542                match _t {
3543                    alloy_sol_types::private::AssertTypeEq::<
3544                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3545                    >(_) => {}
3546                }
3547            }
3548            #[automatically_derived]
3549            #[doc(hidden)]
3550            impl ::core::convert::From<balanceOfAtCall> for UnderlyingRustTuple<'_> {
3551                fn from(value: balanceOfAtCall) -> Self {
3552                    (value._owner, value._blockNumber)
3553                }
3554            }
3555            #[automatically_derived]
3556            #[doc(hidden)]
3557            impl ::core::convert::From<UnderlyingRustTuple<'_>> for balanceOfAtCall {
3558                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3559                    Self {
3560                        _owner: tuple.0,
3561                        _blockNumber: tuple.1,
3562                    }
3563                }
3564            }
3565        }
3566        {
3567            #[doc(hidden)]
3568            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
3569            #[doc(hidden)]
3570            type UnderlyingRustTuple<'a> = (
3571                alloy::sol_types::private::primitives::aliases::U256,
3572            );
3573            #[cfg(test)]
3574            #[allow(dead_code, unreachable_patterns)]
3575            fn _type_assertion(
3576                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3577            ) {
3578                match _t {
3579                    alloy_sol_types::private::AssertTypeEq::<
3580                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3581                    >(_) => {}
3582                }
3583            }
3584            #[automatically_derived]
3585            #[doc(hidden)]
3586            impl ::core::convert::From<balanceOfAtReturn> for UnderlyingRustTuple<'_> {
3587                fn from(value: balanceOfAtReturn) -> Self {
3588                    (value._0,)
3589                }
3590            }
3591            #[automatically_derived]
3592            #[doc(hidden)]
3593            impl ::core::convert::From<UnderlyingRustTuple<'_>> for balanceOfAtReturn {
3594                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3595                    Self { _0: tuple.0 }
3596                }
3597            }
3598        }
3599        #[automatically_derived]
3600        impl alloy_sol_types::SolCall for balanceOfAtCall {
3601            type Parameters<'a> = (
3602                alloy::sol_types::sol_data::Address,
3603                alloy::sol_types::sol_data::Uint<128>,
3604            );
3605            type Token<'a> = <Self::Parameters<
3606                'a,
3607            > as alloy_sol_types::SolType>::Token<'a>;
3608            type Return = alloy::sol_types::private::primitives::aliases::U256;
3609            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
3610            type ReturnToken<'a> = <Self::ReturnTuple<
3611                'a,
3612            > as alloy_sol_types::SolType>::Token<'a>;
3613            const SIGNATURE: &'static str = "balanceOfAt(address,uint128)";
3614            const SELECTOR: [u8; 4] = [247u8, 114u8, 160u8, 146u8];
3615            #[inline]
3616            fn new<'a>(
3617                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3618            ) -> Self {
3619                tuple.into()
3620            }
3621            #[inline]
3622            fn tokenize(&self) -> Self::Token<'_> {
3623                (
3624                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
3625                        &self._owner,
3626                    ),
3627                    <alloy::sol_types::sol_data::Uint<
3628                        128,
3629                    > as alloy_sol_types::SolType>::tokenize(&self._blockNumber),
3630                )
3631            }
3632            #[inline]
3633            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3634                (
3635                    <alloy::sol_types::sol_data::Uint<
3636                        256,
3637                    > as alloy_sol_types::SolType>::tokenize(ret),
3638                )
3639            }
3640            #[inline]
3641            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3642                <Self::ReturnTuple<
3643                    '_,
3644                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3645                    .map(|r| {
3646                        let r: balanceOfAtReturn = r.into();
3647                        r._0
3648                    })
3649            }
3650            #[inline]
3651            fn abi_decode_returns_validate(
3652                data: &[u8],
3653            ) -> alloy_sol_types::Result<Self::Return> {
3654                <Self::ReturnTuple<
3655                    '_,
3656                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3657                    .map(|r| {
3658                        let r: balanceOfAtReturn = r.into();
3659                        r._0
3660                    })
3661            }
3662        }
3663    };
3664    #[derive(serde::Serialize, serde::Deserialize)]
3665    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3666    /**Function with signature `burn(uint256,bytes)` and selector `0xfe9d9303`.
3667```solidity
3668function burn(uint256 amount, bytes memory data) external;
3669```*/
3670    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3671    #[derive(Clone)]
3672    pub struct burnCall {
3673        #[allow(missing_docs)]
3674        pub amount: alloy::sol_types::private::primitives::aliases::U256,
3675        #[allow(missing_docs)]
3676        pub data: alloy::sol_types::private::Bytes,
3677    }
3678    ///Container type for the return parameters of the [`burn(uint256,bytes)`](burnCall) function.
3679    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3680    #[derive(Clone)]
3681    pub struct burnReturn {}
3682    #[allow(
3683        non_camel_case_types,
3684        non_snake_case,
3685        clippy::pub_underscore_fields,
3686        clippy::style
3687    )]
3688    const _: () = {
3689        use alloy::sol_types as alloy_sol_types;
3690        {
3691            #[doc(hidden)]
3692            type UnderlyingSolTuple<'a> = (
3693                alloy::sol_types::sol_data::Uint<256>,
3694                alloy::sol_types::sol_data::Bytes,
3695            );
3696            #[doc(hidden)]
3697            type UnderlyingRustTuple<'a> = (
3698                alloy::sol_types::private::primitives::aliases::U256,
3699                alloy::sol_types::private::Bytes,
3700            );
3701            #[cfg(test)]
3702            #[allow(dead_code, unreachable_patterns)]
3703            fn _type_assertion(
3704                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3705            ) {
3706                match _t {
3707                    alloy_sol_types::private::AssertTypeEq::<
3708                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3709                    >(_) => {}
3710                }
3711            }
3712            #[automatically_derived]
3713            #[doc(hidden)]
3714            impl ::core::convert::From<burnCall> for UnderlyingRustTuple<'_> {
3715                fn from(value: burnCall) -> Self {
3716                    (value.amount, value.data)
3717                }
3718            }
3719            #[automatically_derived]
3720            #[doc(hidden)]
3721            impl ::core::convert::From<UnderlyingRustTuple<'_>> for burnCall {
3722                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3723                    Self {
3724                        amount: tuple.0,
3725                        data: tuple.1,
3726                    }
3727                }
3728            }
3729        }
3730        {
3731            #[doc(hidden)]
3732            type UnderlyingSolTuple<'a> = ();
3733            #[doc(hidden)]
3734            type UnderlyingRustTuple<'a> = ();
3735            #[cfg(test)]
3736            #[allow(dead_code, unreachable_patterns)]
3737            fn _type_assertion(
3738                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3739            ) {
3740                match _t {
3741                    alloy_sol_types::private::AssertTypeEq::<
3742                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3743                    >(_) => {}
3744                }
3745            }
3746            #[automatically_derived]
3747            #[doc(hidden)]
3748            impl ::core::convert::From<burnReturn> for UnderlyingRustTuple<'_> {
3749                fn from(value: burnReturn) -> Self {
3750                    ()
3751                }
3752            }
3753            #[automatically_derived]
3754            #[doc(hidden)]
3755            impl ::core::convert::From<UnderlyingRustTuple<'_>> for burnReturn {
3756                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3757                    Self {}
3758                }
3759            }
3760        }
3761        impl burnReturn {
3762            fn _tokenize(
3763                &self,
3764            ) -> <burnCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
3765                ()
3766            }
3767        }
3768        #[automatically_derived]
3769        impl alloy_sol_types::SolCall for burnCall {
3770            type Parameters<'a> = (
3771                alloy::sol_types::sol_data::Uint<256>,
3772                alloy::sol_types::sol_data::Bytes,
3773            );
3774            type Token<'a> = <Self::Parameters<
3775                'a,
3776            > as alloy_sol_types::SolType>::Token<'a>;
3777            type Return = burnReturn;
3778            type ReturnTuple<'a> = ();
3779            type ReturnToken<'a> = <Self::ReturnTuple<
3780                'a,
3781            > as alloy_sol_types::SolType>::Token<'a>;
3782            const SIGNATURE: &'static str = "burn(uint256,bytes)";
3783            const SELECTOR: [u8; 4] = [254u8, 157u8, 147u8, 3u8];
3784            #[inline]
3785            fn new<'a>(
3786                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3787            ) -> Self {
3788                tuple.into()
3789            }
3790            #[inline]
3791            fn tokenize(&self) -> Self::Token<'_> {
3792                (
3793                    <alloy::sol_types::sol_data::Uint<
3794                        256,
3795                    > as alloy_sol_types::SolType>::tokenize(&self.amount),
3796                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
3797                        &self.data,
3798                    ),
3799                )
3800            }
3801            #[inline]
3802            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3803                burnReturn::_tokenize(ret)
3804            }
3805            #[inline]
3806            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3807                <Self::ReturnTuple<
3808                    '_,
3809                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3810                    .map(Into::into)
3811            }
3812            #[inline]
3813            fn abi_decode_returns_validate(
3814                data: &[u8],
3815            ) -> alloy_sol_types::Result<Self::Return> {
3816                <Self::ReturnTuple<
3817                    '_,
3818                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3819                    .map(Into::into)
3820            }
3821        }
3822    };
3823    #[derive(serde::Serialize, serde::Deserialize)]
3824    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3825    /**Function with signature `decimals()` and selector `0x313ce567`.
3826```solidity
3827function decimals() external pure returns (uint8);
3828```*/
3829    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3830    #[derive(Clone)]
3831    pub struct decimalsCall;
3832    #[derive(serde::Serialize, serde::Deserialize)]
3833    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3834    ///Container type for the return parameters of the [`decimals()`](decimalsCall) function.
3835    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3836    #[derive(Clone)]
3837    pub struct decimalsReturn {
3838        #[allow(missing_docs)]
3839        pub _0: u8,
3840    }
3841    #[allow(
3842        non_camel_case_types,
3843        non_snake_case,
3844        clippy::pub_underscore_fields,
3845        clippy::style
3846    )]
3847    const _: () = {
3848        use alloy::sol_types as alloy_sol_types;
3849        {
3850            #[doc(hidden)]
3851            type UnderlyingSolTuple<'a> = ();
3852            #[doc(hidden)]
3853            type UnderlyingRustTuple<'a> = ();
3854            #[cfg(test)]
3855            #[allow(dead_code, unreachable_patterns)]
3856            fn _type_assertion(
3857                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3858            ) {
3859                match _t {
3860                    alloy_sol_types::private::AssertTypeEq::<
3861                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3862                    >(_) => {}
3863                }
3864            }
3865            #[automatically_derived]
3866            #[doc(hidden)]
3867            impl ::core::convert::From<decimalsCall> for UnderlyingRustTuple<'_> {
3868                fn from(value: decimalsCall) -> Self {
3869                    ()
3870                }
3871            }
3872            #[automatically_derived]
3873            #[doc(hidden)]
3874            impl ::core::convert::From<UnderlyingRustTuple<'_>> for decimalsCall {
3875                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3876                    Self
3877                }
3878            }
3879        }
3880        {
3881            #[doc(hidden)]
3882            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<8>,);
3883            #[doc(hidden)]
3884            type UnderlyingRustTuple<'a> = (u8,);
3885            #[cfg(test)]
3886            #[allow(dead_code, unreachable_patterns)]
3887            fn _type_assertion(
3888                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3889            ) {
3890                match _t {
3891                    alloy_sol_types::private::AssertTypeEq::<
3892                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3893                    >(_) => {}
3894                }
3895            }
3896            #[automatically_derived]
3897            #[doc(hidden)]
3898            impl ::core::convert::From<decimalsReturn> for UnderlyingRustTuple<'_> {
3899                fn from(value: decimalsReturn) -> Self {
3900                    (value._0,)
3901                }
3902            }
3903            #[automatically_derived]
3904            #[doc(hidden)]
3905            impl ::core::convert::From<UnderlyingRustTuple<'_>> for decimalsReturn {
3906                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3907                    Self { _0: tuple.0 }
3908                }
3909            }
3910        }
3911        #[automatically_derived]
3912        impl alloy_sol_types::SolCall for decimalsCall {
3913            type Parameters<'a> = ();
3914            type Token<'a> = <Self::Parameters<
3915                'a,
3916            > as alloy_sol_types::SolType>::Token<'a>;
3917            type Return = u8;
3918            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<8>,);
3919            type ReturnToken<'a> = <Self::ReturnTuple<
3920                'a,
3921            > as alloy_sol_types::SolType>::Token<'a>;
3922            const SIGNATURE: &'static str = "decimals()";
3923            const SELECTOR: [u8; 4] = [49u8, 60u8, 229u8, 103u8];
3924            #[inline]
3925            fn new<'a>(
3926                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3927            ) -> Self {
3928                tuple.into()
3929            }
3930            #[inline]
3931            fn tokenize(&self) -> Self::Token<'_> {
3932                ()
3933            }
3934            #[inline]
3935            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3936                (
3937                    <alloy::sol_types::sol_data::Uint<
3938                        8,
3939                    > as alloy_sol_types::SolType>::tokenize(ret),
3940                )
3941            }
3942            #[inline]
3943            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3944                <Self::ReturnTuple<
3945                    '_,
3946                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3947                    .map(|r| {
3948                        let r: decimalsReturn = r.into();
3949                        r._0
3950                    })
3951            }
3952            #[inline]
3953            fn abi_decode_returns_validate(
3954                data: &[u8],
3955            ) -> alloy_sol_types::Result<Self::Return> {
3956                <Self::ReturnTuple<
3957                    '_,
3958                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3959                    .map(|r| {
3960                        let r: decimalsReturn = r.into();
3961                        r._0
3962                    })
3963            }
3964        }
3965    };
3966    #[derive(serde::Serialize, serde::Deserialize)]
3967    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3968    /**Function with signature `defaultOperators()` and selector `0x06e48538`.
3969```solidity
3970function defaultOperators() external view returns (address[] memory);
3971```*/
3972    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3973    #[derive(Clone)]
3974    pub struct defaultOperatorsCall;
3975    #[derive(serde::Serialize, serde::Deserialize)]
3976    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3977    ///Container type for the return parameters of the [`defaultOperators()`](defaultOperatorsCall) function.
3978    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3979    #[derive(Clone)]
3980    pub struct defaultOperatorsReturn {
3981        #[allow(missing_docs)]
3982        pub _0: alloy::sol_types::private::Vec<alloy::sol_types::private::Address>,
3983    }
3984    #[allow(
3985        non_camel_case_types,
3986        non_snake_case,
3987        clippy::pub_underscore_fields,
3988        clippy::style
3989    )]
3990    const _: () = {
3991        use alloy::sol_types as alloy_sol_types;
3992        {
3993            #[doc(hidden)]
3994            type UnderlyingSolTuple<'a> = ();
3995            #[doc(hidden)]
3996            type UnderlyingRustTuple<'a> = ();
3997            #[cfg(test)]
3998            #[allow(dead_code, unreachable_patterns)]
3999            fn _type_assertion(
4000                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4001            ) {
4002                match _t {
4003                    alloy_sol_types::private::AssertTypeEq::<
4004                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4005                    >(_) => {}
4006                }
4007            }
4008            #[automatically_derived]
4009            #[doc(hidden)]
4010            impl ::core::convert::From<defaultOperatorsCall>
4011            for UnderlyingRustTuple<'_> {
4012                fn from(value: defaultOperatorsCall) -> Self {
4013                    ()
4014                }
4015            }
4016            #[automatically_derived]
4017            #[doc(hidden)]
4018            impl ::core::convert::From<UnderlyingRustTuple<'_>>
4019            for defaultOperatorsCall {
4020                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4021                    Self
4022                }
4023            }
4024        }
4025        {
4026            #[doc(hidden)]
4027            type UnderlyingSolTuple<'a> = (
4028                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::Address>,
4029            );
4030            #[doc(hidden)]
4031            type UnderlyingRustTuple<'a> = (
4032                alloy::sol_types::private::Vec<alloy::sol_types::private::Address>,
4033            );
4034            #[cfg(test)]
4035            #[allow(dead_code, unreachable_patterns)]
4036            fn _type_assertion(
4037                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4038            ) {
4039                match _t {
4040                    alloy_sol_types::private::AssertTypeEq::<
4041                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4042                    >(_) => {}
4043                }
4044            }
4045            #[automatically_derived]
4046            #[doc(hidden)]
4047            impl ::core::convert::From<defaultOperatorsReturn>
4048            for UnderlyingRustTuple<'_> {
4049                fn from(value: defaultOperatorsReturn) -> Self {
4050                    (value._0,)
4051                }
4052            }
4053            #[automatically_derived]
4054            #[doc(hidden)]
4055            impl ::core::convert::From<UnderlyingRustTuple<'_>>
4056            for defaultOperatorsReturn {
4057                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4058                    Self { _0: tuple.0 }
4059                }
4060            }
4061        }
4062        #[automatically_derived]
4063        impl alloy_sol_types::SolCall for defaultOperatorsCall {
4064            type Parameters<'a> = ();
4065            type Token<'a> = <Self::Parameters<
4066                'a,
4067            > as alloy_sol_types::SolType>::Token<'a>;
4068            type Return = alloy::sol_types::private::Vec<
4069                alloy::sol_types::private::Address,
4070            >;
4071            type ReturnTuple<'a> = (
4072                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::Address>,
4073            );
4074            type ReturnToken<'a> = <Self::ReturnTuple<
4075                'a,
4076            > as alloy_sol_types::SolType>::Token<'a>;
4077            const SIGNATURE: &'static str = "defaultOperators()";
4078            const SELECTOR: [u8; 4] = [6u8, 228u8, 133u8, 56u8];
4079            #[inline]
4080            fn new<'a>(
4081                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4082            ) -> Self {
4083                tuple.into()
4084            }
4085            #[inline]
4086            fn tokenize(&self) -> Self::Token<'_> {
4087                ()
4088            }
4089            #[inline]
4090            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
4091                (
4092                    <alloy::sol_types::sol_data::Array<
4093                        alloy::sol_types::sol_data::Address,
4094                    > as alloy_sol_types::SolType>::tokenize(ret),
4095                )
4096            }
4097            #[inline]
4098            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
4099                <Self::ReturnTuple<
4100                    '_,
4101                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
4102                    .map(|r| {
4103                        let r: defaultOperatorsReturn = r.into();
4104                        r._0
4105                    })
4106            }
4107            #[inline]
4108            fn abi_decode_returns_validate(
4109                data: &[u8],
4110            ) -> alloy_sol_types::Result<Self::Return> {
4111                <Self::ReturnTuple<
4112                    '_,
4113                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4114                    .map(|r| {
4115                        let r: defaultOperatorsReturn = r.into();
4116                        r._0
4117                    })
4118            }
4119        }
4120    };
4121    #[derive(serde::Serialize, serde::Deserialize)]
4122    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4123    /**Function with signature `getRoleAdmin(bytes32)` and selector `0x248a9ca3`.
4124```solidity
4125function getRoleAdmin(bytes32 role) external view returns (bytes32);
4126```*/
4127    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4128    #[derive(Clone)]
4129    pub struct getRoleAdminCall {
4130        #[allow(missing_docs)]
4131        pub role: alloy::sol_types::private::FixedBytes<32>,
4132    }
4133    #[derive(serde::Serialize, serde::Deserialize)]
4134    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4135    ///Container type for the return parameters of the [`getRoleAdmin(bytes32)`](getRoleAdminCall) function.
4136    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4137    #[derive(Clone)]
4138    pub struct getRoleAdminReturn {
4139        #[allow(missing_docs)]
4140        pub _0: alloy::sol_types::private::FixedBytes<32>,
4141    }
4142    #[allow(
4143        non_camel_case_types,
4144        non_snake_case,
4145        clippy::pub_underscore_fields,
4146        clippy::style
4147    )]
4148    const _: () = {
4149        use alloy::sol_types as alloy_sol_types;
4150        {
4151            #[doc(hidden)]
4152            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
4153            #[doc(hidden)]
4154            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
4155            #[cfg(test)]
4156            #[allow(dead_code, unreachable_patterns)]
4157            fn _type_assertion(
4158                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4159            ) {
4160                match _t {
4161                    alloy_sol_types::private::AssertTypeEq::<
4162                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4163                    >(_) => {}
4164                }
4165            }
4166            #[automatically_derived]
4167            #[doc(hidden)]
4168            impl ::core::convert::From<getRoleAdminCall> for UnderlyingRustTuple<'_> {
4169                fn from(value: getRoleAdminCall) -> Self {
4170                    (value.role,)
4171                }
4172            }
4173            #[automatically_derived]
4174            #[doc(hidden)]
4175            impl ::core::convert::From<UnderlyingRustTuple<'_>> for getRoleAdminCall {
4176                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4177                    Self { role: tuple.0 }
4178                }
4179            }
4180        }
4181        {
4182            #[doc(hidden)]
4183            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
4184            #[doc(hidden)]
4185            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
4186            #[cfg(test)]
4187            #[allow(dead_code, unreachable_patterns)]
4188            fn _type_assertion(
4189                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4190            ) {
4191                match _t {
4192                    alloy_sol_types::private::AssertTypeEq::<
4193                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4194                    >(_) => {}
4195                }
4196            }
4197            #[automatically_derived]
4198            #[doc(hidden)]
4199            impl ::core::convert::From<getRoleAdminReturn> for UnderlyingRustTuple<'_> {
4200                fn from(value: getRoleAdminReturn) -> Self {
4201                    (value._0,)
4202                }
4203            }
4204            #[automatically_derived]
4205            #[doc(hidden)]
4206            impl ::core::convert::From<UnderlyingRustTuple<'_>> for getRoleAdminReturn {
4207                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4208                    Self { _0: tuple.0 }
4209                }
4210            }
4211        }
4212        #[automatically_derived]
4213        impl alloy_sol_types::SolCall for getRoleAdminCall {
4214            type Parameters<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
4215            type Token<'a> = <Self::Parameters<
4216                'a,
4217            > as alloy_sol_types::SolType>::Token<'a>;
4218            type Return = alloy::sol_types::private::FixedBytes<32>;
4219            type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
4220            type ReturnToken<'a> = <Self::ReturnTuple<
4221                'a,
4222            > as alloy_sol_types::SolType>::Token<'a>;
4223            const SIGNATURE: &'static str = "getRoleAdmin(bytes32)";
4224            const SELECTOR: [u8; 4] = [36u8, 138u8, 156u8, 163u8];
4225            #[inline]
4226            fn new<'a>(
4227                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4228            ) -> Self {
4229                tuple.into()
4230            }
4231            #[inline]
4232            fn tokenize(&self) -> Self::Token<'_> {
4233                (
4234                    <alloy::sol_types::sol_data::FixedBytes<
4235                        32,
4236                    > as alloy_sol_types::SolType>::tokenize(&self.role),
4237                )
4238            }
4239            #[inline]
4240            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
4241                (
4242                    <alloy::sol_types::sol_data::FixedBytes<
4243                        32,
4244                    > as alloy_sol_types::SolType>::tokenize(ret),
4245                )
4246            }
4247            #[inline]
4248            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
4249                <Self::ReturnTuple<
4250                    '_,
4251                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
4252                    .map(|r| {
4253                        let r: getRoleAdminReturn = r.into();
4254                        r._0
4255                    })
4256            }
4257            #[inline]
4258            fn abi_decode_returns_validate(
4259                data: &[u8],
4260            ) -> alloy_sol_types::Result<Self::Return> {
4261                <Self::ReturnTuple<
4262                    '_,
4263                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4264                    .map(|r| {
4265                        let r: getRoleAdminReturn = r.into();
4266                        r._0
4267                    })
4268            }
4269        }
4270    };
4271    #[derive(serde::Serialize, serde::Deserialize)]
4272    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4273    /**Function with signature `getRoleMember(bytes32,uint256)` and selector `0x9010d07c`.
4274```solidity
4275function getRoleMember(bytes32 role, uint256 index) external view returns (address);
4276```*/
4277    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4278    #[derive(Clone)]
4279    pub struct getRoleMemberCall {
4280        #[allow(missing_docs)]
4281        pub role: alloy::sol_types::private::FixedBytes<32>,
4282        #[allow(missing_docs)]
4283        pub index: alloy::sol_types::private::primitives::aliases::U256,
4284    }
4285    #[derive(serde::Serialize, serde::Deserialize)]
4286    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4287    ///Container type for the return parameters of the [`getRoleMember(bytes32,uint256)`](getRoleMemberCall) function.
4288    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4289    #[derive(Clone)]
4290    pub struct getRoleMemberReturn {
4291        #[allow(missing_docs)]
4292        pub _0: alloy::sol_types::private::Address,
4293    }
4294    #[allow(
4295        non_camel_case_types,
4296        non_snake_case,
4297        clippy::pub_underscore_fields,
4298        clippy::style
4299    )]
4300    const _: () = {
4301        use alloy::sol_types as alloy_sol_types;
4302        {
4303            #[doc(hidden)]
4304            type UnderlyingSolTuple<'a> = (
4305                alloy::sol_types::sol_data::FixedBytes<32>,
4306                alloy::sol_types::sol_data::Uint<256>,
4307            );
4308            #[doc(hidden)]
4309            type UnderlyingRustTuple<'a> = (
4310                alloy::sol_types::private::FixedBytes<32>,
4311                alloy::sol_types::private::primitives::aliases::U256,
4312            );
4313            #[cfg(test)]
4314            #[allow(dead_code, unreachable_patterns)]
4315            fn _type_assertion(
4316                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4317            ) {
4318                match _t {
4319                    alloy_sol_types::private::AssertTypeEq::<
4320                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4321                    >(_) => {}
4322                }
4323            }
4324            #[automatically_derived]
4325            #[doc(hidden)]
4326            impl ::core::convert::From<getRoleMemberCall> for UnderlyingRustTuple<'_> {
4327                fn from(value: getRoleMemberCall) -> Self {
4328                    (value.role, value.index)
4329                }
4330            }
4331            #[automatically_derived]
4332            #[doc(hidden)]
4333            impl ::core::convert::From<UnderlyingRustTuple<'_>> for getRoleMemberCall {
4334                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4335                    Self {
4336                        role: tuple.0,
4337                        index: tuple.1,
4338                    }
4339                }
4340            }
4341        }
4342        {
4343            #[doc(hidden)]
4344            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
4345            #[doc(hidden)]
4346            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
4347            #[cfg(test)]
4348            #[allow(dead_code, unreachable_patterns)]
4349            fn _type_assertion(
4350                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4351            ) {
4352                match _t {
4353                    alloy_sol_types::private::AssertTypeEq::<
4354                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4355                    >(_) => {}
4356                }
4357            }
4358            #[automatically_derived]
4359            #[doc(hidden)]
4360            impl ::core::convert::From<getRoleMemberReturn> for UnderlyingRustTuple<'_> {
4361                fn from(value: getRoleMemberReturn) -> Self {
4362                    (value._0,)
4363                }
4364            }
4365            #[automatically_derived]
4366            #[doc(hidden)]
4367            impl ::core::convert::From<UnderlyingRustTuple<'_>> for getRoleMemberReturn {
4368                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4369                    Self { _0: tuple.0 }
4370                }
4371            }
4372        }
4373        #[automatically_derived]
4374        impl alloy_sol_types::SolCall for getRoleMemberCall {
4375            type Parameters<'a> = (
4376                alloy::sol_types::sol_data::FixedBytes<32>,
4377                alloy::sol_types::sol_data::Uint<256>,
4378            );
4379            type Token<'a> = <Self::Parameters<
4380                'a,
4381            > as alloy_sol_types::SolType>::Token<'a>;
4382            type Return = alloy::sol_types::private::Address;
4383            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,);
4384            type ReturnToken<'a> = <Self::ReturnTuple<
4385                'a,
4386            > as alloy_sol_types::SolType>::Token<'a>;
4387            const SIGNATURE: &'static str = "getRoleMember(bytes32,uint256)";
4388            const SELECTOR: [u8; 4] = [144u8, 16u8, 208u8, 124u8];
4389            #[inline]
4390            fn new<'a>(
4391                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4392            ) -> Self {
4393                tuple.into()
4394            }
4395            #[inline]
4396            fn tokenize(&self) -> Self::Token<'_> {
4397                (
4398                    <alloy::sol_types::sol_data::FixedBytes<
4399                        32,
4400                    > as alloy_sol_types::SolType>::tokenize(&self.role),
4401                    <alloy::sol_types::sol_data::Uint<
4402                        256,
4403                    > as alloy_sol_types::SolType>::tokenize(&self.index),
4404                )
4405            }
4406            #[inline]
4407            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
4408                (
4409                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
4410                        ret,
4411                    ),
4412                )
4413            }
4414            #[inline]
4415            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
4416                <Self::ReturnTuple<
4417                    '_,
4418                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
4419                    .map(|r| {
4420                        let r: getRoleMemberReturn = r.into();
4421                        r._0
4422                    })
4423            }
4424            #[inline]
4425            fn abi_decode_returns_validate(
4426                data: &[u8],
4427            ) -> alloy_sol_types::Result<Self::Return> {
4428                <Self::ReturnTuple<
4429                    '_,
4430                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4431                    .map(|r| {
4432                        let r: getRoleMemberReturn = r.into();
4433                        r._0
4434                    })
4435            }
4436        }
4437    };
4438    #[derive(serde::Serialize, serde::Deserialize)]
4439    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4440    /**Function with signature `getRoleMemberCount(bytes32)` and selector `0xca15c873`.
4441```solidity
4442function getRoleMemberCount(bytes32 role) external view returns (uint256);
4443```*/
4444    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4445    #[derive(Clone)]
4446    pub struct getRoleMemberCountCall {
4447        #[allow(missing_docs)]
4448        pub role: alloy::sol_types::private::FixedBytes<32>,
4449    }
4450    #[derive(serde::Serialize, serde::Deserialize)]
4451    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4452    ///Container type for the return parameters of the [`getRoleMemberCount(bytes32)`](getRoleMemberCountCall) function.
4453    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4454    #[derive(Clone)]
4455    pub struct getRoleMemberCountReturn {
4456        #[allow(missing_docs)]
4457        pub _0: alloy::sol_types::private::primitives::aliases::U256,
4458    }
4459    #[allow(
4460        non_camel_case_types,
4461        non_snake_case,
4462        clippy::pub_underscore_fields,
4463        clippy::style
4464    )]
4465    const _: () = {
4466        use alloy::sol_types as alloy_sol_types;
4467        {
4468            #[doc(hidden)]
4469            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
4470            #[doc(hidden)]
4471            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
4472            #[cfg(test)]
4473            #[allow(dead_code, unreachable_patterns)]
4474            fn _type_assertion(
4475                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4476            ) {
4477                match _t {
4478                    alloy_sol_types::private::AssertTypeEq::<
4479                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4480                    >(_) => {}
4481                }
4482            }
4483            #[automatically_derived]
4484            #[doc(hidden)]
4485            impl ::core::convert::From<getRoleMemberCountCall>
4486            for UnderlyingRustTuple<'_> {
4487                fn from(value: getRoleMemberCountCall) -> Self {
4488                    (value.role,)
4489                }
4490            }
4491            #[automatically_derived]
4492            #[doc(hidden)]
4493            impl ::core::convert::From<UnderlyingRustTuple<'_>>
4494            for getRoleMemberCountCall {
4495                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4496                    Self { role: tuple.0 }
4497                }
4498            }
4499        }
4500        {
4501            #[doc(hidden)]
4502            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
4503            #[doc(hidden)]
4504            type UnderlyingRustTuple<'a> = (
4505                alloy::sol_types::private::primitives::aliases::U256,
4506            );
4507            #[cfg(test)]
4508            #[allow(dead_code, unreachable_patterns)]
4509            fn _type_assertion(
4510                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4511            ) {
4512                match _t {
4513                    alloy_sol_types::private::AssertTypeEq::<
4514                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4515                    >(_) => {}
4516                }
4517            }
4518            #[automatically_derived]
4519            #[doc(hidden)]
4520            impl ::core::convert::From<getRoleMemberCountReturn>
4521            for UnderlyingRustTuple<'_> {
4522                fn from(value: getRoleMemberCountReturn) -> Self {
4523                    (value._0,)
4524                }
4525            }
4526            #[automatically_derived]
4527            #[doc(hidden)]
4528            impl ::core::convert::From<UnderlyingRustTuple<'_>>
4529            for getRoleMemberCountReturn {
4530                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4531                    Self { _0: tuple.0 }
4532                }
4533            }
4534        }
4535        #[automatically_derived]
4536        impl alloy_sol_types::SolCall for getRoleMemberCountCall {
4537            type Parameters<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
4538            type Token<'a> = <Self::Parameters<
4539                'a,
4540            > as alloy_sol_types::SolType>::Token<'a>;
4541            type Return = alloy::sol_types::private::primitives::aliases::U256;
4542            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
4543            type ReturnToken<'a> = <Self::ReturnTuple<
4544                'a,
4545            > as alloy_sol_types::SolType>::Token<'a>;
4546            const SIGNATURE: &'static str = "getRoleMemberCount(bytes32)";
4547            const SELECTOR: [u8; 4] = [202u8, 21u8, 200u8, 115u8];
4548            #[inline]
4549            fn new<'a>(
4550                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4551            ) -> Self {
4552                tuple.into()
4553            }
4554            #[inline]
4555            fn tokenize(&self) -> Self::Token<'_> {
4556                (
4557                    <alloy::sol_types::sol_data::FixedBytes<
4558                        32,
4559                    > as alloy_sol_types::SolType>::tokenize(&self.role),
4560                )
4561            }
4562            #[inline]
4563            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
4564                (
4565                    <alloy::sol_types::sol_data::Uint<
4566                        256,
4567                    > as alloy_sol_types::SolType>::tokenize(ret),
4568                )
4569            }
4570            #[inline]
4571            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
4572                <Self::ReturnTuple<
4573                    '_,
4574                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
4575                    .map(|r| {
4576                        let r: getRoleMemberCountReturn = r.into();
4577                        r._0
4578                    })
4579            }
4580            #[inline]
4581            fn abi_decode_returns_validate(
4582                data: &[u8],
4583            ) -> alloy_sol_types::Result<Self::Return> {
4584                <Self::ReturnTuple<
4585                    '_,
4586                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4587                    .map(|r| {
4588                        let r: getRoleMemberCountReturn = r.into();
4589                        r._0
4590                    })
4591            }
4592        }
4593    };
4594    #[derive(serde::Serialize, serde::Deserialize)]
4595    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4596    /**Function with signature `grantRole(bytes32,address)` and selector `0x2f2ff15d`.
4597```solidity
4598function grantRole(bytes32 role, address account) external;
4599```*/
4600    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4601    #[derive(Clone)]
4602    pub struct grantRoleCall {
4603        #[allow(missing_docs)]
4604        pub role: alloy::sol_types::private::FixedBytes<32>,
4605        #[allow(missing_docs)]
4606        pub account: alloy::sol_types::private::Address,
4607    }
4608    ///Container type for the return parameters of the [`grantRole(bytes32,address)`](grantRoleCall) function.
4609    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4610    #[derive(Clone)]
4611    pub struct grantRoleReturn {}
4612    #[allow(
4613        non_camel_case_types,
4614        non_snake_case,
4615        clippy::pub_underscore_fields,
4616        clippy::style
4617    )]
4618    const _: () = {
4619        use alloy::sol_types as alloy_sol_types;
4620        {
4621            #[doc(hidden)]
4622            type UnderlyingSolTuple<'a> = (
4623                alloy::sol_types::sol_data::FixedBytes<32>,
4624                alloy::sol_types::sol_data::Address,
4625            );
4626            #[doc(hidden)]
4627            type UnderlyingRustTuple<'a> = (
4628                alloy::sol_types::private::FixedBytes<32>,
4629                alloy::sol_types::private::Address,
4630            );
4631            #[cfg(test)]
4632            #[allow(dead_code, unreachable_patterns)]
4633            fn _type_assertion(
4634                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4635            ) {
4636                match _t {
4637                    alloy_sol_types::private::AssertTypeEq::<
4638                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4639                    >(_) => {}
4640                }
4641            }
4642            #[automatically_derived]
4643            #[doc(hidden)]
4644            impl ::core::convert::From<grantRoleCall> for UnderlyingRustTuple<'_> {
4645                fn from(value: grantRoleCall) -> Self {
4646                    (value.role, value.account)
4647                }
4648            }
4649            #[automatically_derived]
4650            #[doc(hidden)]
4651            impl ::core::convert::From<UnderlyingRustTuple<'_>> for grantRoleCall {
4652                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4653                    Self {
4654                        role: tuple.0,
4655                        account: tuple.1,
4656                    }
4657                }
4658            }
4659        }
4660        {
4661            #[doc(hidden)]
4662            type UnderlyingSolTuple<'a> = ();
4663            #[doc(hidden)]
4664            type UnderlyingRustTuple<'a> = ();
4665            #[cfg(test)]
4666            #[allow(dead_code, unreachable_patterns)]
4667            fn _type_assertion(
4668                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4669            ) {
4670                match _t {
4671                    alloy_sol_types::private::AssertTypeEq::<
4672                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4673                    >(_) => {}
4674                }
4675            }
4676            #[automatically_derived]
4677            #[doc(hidden)]
4678            impl ::core::convert::From<grantRoleReturn> for UnderlyingRustTuple<'_> {
4679                fn from(value: grantRoleReturn) -> Self {
4680                    ()
4681                }
4682            }
4683            #[automatically_derived]
4684            #[doc(hidden)]
4685            impl ::core::convert::From<UnderlyingRustTuple<'_>> for grantRoleReturn {
4686                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4687                    Self {}
4688                }
4689            }
4690        }
4691        impl grantRoleReturn {
4692            fn _tokenize(
4693                &self,
4694            ) -> <grantRoleCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
4695                ()
4696            }
4697        }
4698        #[automatically_derived]
4699        impl alloy_sol_types::SolCall for grantRoleCall {
4700            type Parameters<'a> = (
4701                alloy::sol_types::sol_data::FixedBytes<32>,
4702                alloy::sol_types::sol_data::Address,
4703            );
4704            type Token<'a> = <Self::Parameters<
4705                'a,
4706            > as alloy_sol_types::SolType>::Token<'a>;
4707            type Return = grantRoleReturn;
4708            type ReturnTuple<'a> = ();
4709            type ReturnToken<'a> = <Self::ReturnTuple<
4710                'a,
4711            > as alloy_sol_types::SolType>::Token<'a>;
4712            const SIGNATURE: &'static str = "grantRole(bytes32,address)";
4713            const SELECTOR: [u8; 4] = [47u8, 47u8, 241u8, 93u8];
4714            #[inline]
4715            fn new<'a>(
4716                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4717            ) -> Self {
4718                tuple.into()
4719            }
4720            #[inline]
4721            fn tokenize(&self) -> Self::Token<'_> {
4722                (
4723                    <alloy::sol_types::sol_data::FixedBytes<
4724                        32,
4725                    > as alloy_sol_types::SolType>::tokenize(&self.role),
4726                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
4727                        &self.account,
4728                    ),
4729                )
4730            }
4731            #[inline]
4732            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
4733                grantRoleReturn::_tokenize(ret)
4734            }
4735            #[inline]
4736            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
4737                <Self::ReturnTuple<
4738                    '_,
4739                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
4740                    .map(Into::into)
4741            }
4742            #[inline]
4743            fn abi_decode_returns_validate(
4744                data: &[u8],
4745            ) -> alloy_sol_types::Result<Self::Return> {
4746                <Self::ReturnTuple<
4747                    '_,
4748                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4749                    .map(Into::into)
4750            }
4751        }
4752    };
4753    #[derive(serde::Serialize, serde::Deserialize)]
4754    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4755    /**Function with signature `granularity()` and selector `0x556f0dc7`.
4756```solidity
4757function granularity() external view returns (uint256);
4758```*/
4759    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4760    #[derive(Clone)]
4761    pub struct granularityCall;
4762    #[derive(serde::Serialize, serde::Deserialize)]
4763    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4764    ///Container type for the return parameters of the [`granularity()`](granularityCall) function.
4765    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4766    #[derive(Clone)]
4767    pub struct granularityReturn {
4768        #[allow(missing_docs)]
4769        pub _0: alloy::sol_types::private::primitives::aliases::U256,
4770    }
4771    #[allow(
4772        non_camel_case_types,
4773        non_snake_case,
4774        clippy::pub_underscore_fields,
4775        clippy::style
4776    )]
4777    const _: () = {
4778        use alloy::sol_types as alloy_sol_types;
4779        {
4780            #[doc(hidden)]
4781            type UnderlyingSolTuple<'a> = ();
4782            #[doc(hidden)]
4783            type UnderlyingRustTuple<'a> = ();
4784            #[cfg(test)]
4785            #[allow(dead_code, unreachable_patterns)]
4786            fn _type_assertion(
4787                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4788            ) {
4789                match _t {
4790                    alloy_sol_types::private::AssertTypeEq::<
4791                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4792                    >(_) => {}
4793                }
4794            }
4795            #[automatically_derived]
4796            #[doc(hidden)]
4797            impl ::core::convert::From<granularityCall> for UnderlyingRustTuple<'_> {
4798                fn from(value: granularityCall) -> Self {
4799                    ()
4800                }
4801            }
4802            #[automatically_derived]
4803            #[doc(hidden)]
4804            impl ::core::convert::From<UnderlyingRustTuple<'_>> for granularityCall {
4805                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4806                    Self
4807                }
4808            }
4809        }
4810        {
4811            #[doc(hidden)]
4812            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
4813            #[doc(hidden)]
4814            type UnderlyingRustTuple<'a> = (
4815                alloy::sol_types::private::primitives::aliases::U256,
4816            );
4817            #[cfg(test)]
4818            #[allow(dead_code, unreachable_patterns)]
4819            fn _type_assertion(
4820                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4821            ) {
4822                match _t {
4823                    alloy_sol_types::private::AssertTypeEq::<
4824                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4825                    >(_) => {}
4826                }
4827            }
4828            #[automatically_derived]
4829            #[doc(hidden)]
4830            impl ::core::convert::From<granularityReturn> for UnderlyingRustTuple<'_> {
4831                fn from(value: granularityReturn) -> Self {
4832                    (value._0,)
4833                }
4834            }
4835            #[automatically_derived]
4836            #[doc(hidden)]
4837            impl ::core::convert::From<UnderlyingRustTuple<'_>> for granularityReturn {
4838                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4839                    Self { _0: tuple.0 }
4840                }
4841            }
4842        }
4843        #[automatically_derived]
4844        impl alloy_sol_types::SolCall for granularityCall {
4845            type Parameters<'a> = ();
4846            type Token<'a> = <Self::Parameters<
4847                'a,
4848            > as alloy_sol_types::SolType>::Token<'a>;
4849            type Return = alloy::sol_types::private::primitives::aliases::U256;
4850            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
4851            type ReturnToken<'a> = <Self::ReturnTuple<
4852                'a,
4853            > as alloy_sol_types::SolType>::Token<'a>;
4854            const SIGNATURE: &'static str = "granularity()";
4855            const SELECTOR: [u8; 4] = [85u8, 111u8, 13u8, 199u8];
4856            #[inline]
4857            fn new<'a>(
4858                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4859            ) -> Self {
4860                tuple.into()
4861            }
4862            #[inline]
4863            fn tokenize(&self) -> Self::Token<'_> {
4864                ()
4865            }
4866            #[inline]
4867            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
4868                (
4869                    <alloy::sol_types::sol_data::Uint<
4870                        256,
4871                    > as alloy_sol_types::SolType>::tokenize(ret),
4872                )
4873            }
4874            #[inline]
4875            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
4876                <Self::ReturnTuple<
4877                    '_,
4878                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
4879                    .map(|r| {
4880                        let r: granularityReturn = r.into();
4881                        r._0
4882                    })
4883            }
4884            #[inline]
4885            fn abi_decode_returns_validate(
4886                data: &[u8],
4887            ) -> alloy_sol_types::Result<Self::Return> {
4888                <Self::ReturnTuple<
4889                    '_,
4890                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4891                    .map(|r| {
4892                        let r: granularityReturn = r.into();
4893                        r._0
4894                    })
4895            }
4896        }
4897    };
4898    #[derive(serde::Serialize, serde::Deserialize)]
4899    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4900    /**Function with signature `hasRole(bytes32,address)` and selector `0x91d14854`.
4901```solidity
4902function hasRole(bytes32 role, address account) external view returns (bool);
4903```*/
4904    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4905    #[derive(Clone)]
4906    pub struct hasRoleCall {
4907        #[allow(missing_docs)]
4908        pub role: alloy::sol_types::private::FixedBytes<32>,
4909        #[allow(missing_docs)]
4910        pub account: alloy::sol_types::private::Address,
4911    }
4912    #[derive(serde::Serialize, serde::Deserialize)]
4913    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4914    ///Container type for the return parameters of the [`hasRole(bytes32,address)`](hasRoleCall) function.
4915    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4916    #[derive(Clone)]
4917    pub struct hasRoleReturn {
4918        #[allow(missing_docs)]
4919        pub _0: bool,
4920    }
4921    #[allow(
4922        non_camel_case_types,
4923        non_snake_case,
4924        clippy::pub_underscore_fields,
4925        clippy::style
4926    )]
4927    const _: () = {
4928        use alloy::sol_types as alloy_sol_types;
4929        {
4930            #[doc(hidden)]
4931            type UnderlyingSolTuple<'a> = (
4932                alloy::sol_types::sol_data::FixedBytes<32>,
4933                alloy::sol_types::sol_data::Address,
4934            );
4935            #[doc(hidden)]
4936            type UnderlyingRustTuple<'a> = (
4937                alloy::sol_types::private::FixedBytes<32>,
4938                alloy::sol_types::private::Address,
4939            );
4940            #[cfg(test)]
4941            #[allow(dead_code, unreachable_patterns)]
4942            fn _type_assertion(
4943                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4944            ) {
4945                match _t {
4946                    alloy_sol_types::private::AssertTypeEq::<
4947                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4948                    >(_) => {}
4949                }
4950            }
4951            #[automatically_derived]
4952            #[doc(hidden)]
4953            impl ::core::convert::From<hasRoleCall> for UnderlyingRustTuple<'_> {
4954                fn from(value: hasRoleCall) -> Self {
4955                    (value.role, value.account)
4956                }
4957            }
4958            #[automatically_derived]
4959            #[doc(hidden)]
4960            impl ::core::convert::From<UnderlyingRustTuple<'_>> for hasRoleCall {
4961                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4962                    Self {
4963                        role: tuple.0,
4964                        account: tuple.1,
4965                    }
4966                }
4967            }
4968        }
4969        {
4970            #[doc(hidden)]
4971            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,);
4972            #[doc(hidden)]
4973            type UnderlyingRustTuple<'a> = (bool,);
4974            #[cfg(test)]
4975            #[allow(dead_code, unreachable_patterns)]
4976            fn _type_assertion(
4977                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4978            ) {
4979                match _t {
4980                    alloy_sol_types::private::AssertTypeEq::<
4981                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4982                    >(_) => {}
4983                }
4984            }
4985            #[automatically_derived]
4986            #[doc(hidden)]
4987            impl ::core::convert::From<hasRoleReturn> for UnderlyingRustTuple<'_> {
4988                fn from(value: hasRoleReturn) -> Self {
4989                    (value._0,)
4990                }
4991            }
4992            #[automatically_derived]
4993            #[doc(hidden)]
4994            impl ::core::convert::From<UnderlyingRustTuple<'_>> for hasRoleReturn {
4995                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4996                    Self { _0: tuple.0 }
4997                }
4998            }
4999        }
5000        #[automatically_derived]
5001        impl alloy_sol_types::SolCall for hasRoleCall {
5002            type Parameters<'a> = (
5003                alloy::sol_types::sol_data::FixedBytes<32>,
5004                alloy::sol_types::sol_data::Address,
5005            );
5006            type Token<'a> = <Self::Parameters<
5007                'a,
5008            > as alloy_sol_types::SolType>::Token<'a>;
5009            type Return = bool;
5010            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,);
5011            type ReturnToken<'a> = <Self::ReturnTuple<
5012                'a,
5013            > as alloy_sol_types::SolType>::Token<'a>;
5014            const SIGNATURE: &'static str = "hasRole(bytes32,address)";
5015            const SELECTOR: [u8; 4] = [145u8, 209u8, 72u8, 84u8];
5016            #[inline]
5017            fn new<'a>(
5018                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5019            ) -> Self {
5020                tuple.into()
5021            }
5022            #[inline]
5023            fn tokenize(&self) -> Self::Token<'_> {
5024                (
5025                    <alloy::sol_types::sol_data::FixedBytes<
5026                        32,
5027                    > as alloy_sol_types::SolType>::tokenize(&self.role),
5028                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
5029                        &self.account,
5030                    ),
5031                )
5032            }
5033            #[inline]
5034            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
5035                (
5036                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
5037                        ret,
5038                    ),
5039                )
5040            }
5041            #[inline]
5042            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
5043                <Self::ReturnTuple<
5044                    '_,
5045                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
5046                    .map(|r| {
5047                        let r: hasRoleReturn = r.into();
5048                        r._0
5049                    })
5050            }
5051            #[inline]
5052            fn abi_decode_returns_validate(
5053                data: &[u8],
5054            ) -> alloy_sol_types::Result<Self::Return> {
5055                <Self::ReturnTuple<
5056                    '_,
5057                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5058                    .map(|r| {
5059                        let r: hasRoleReturn = r.into();
5060                        r._0
5061                    })
5062            }
5063        }
5064    };
5065    #[derive(serde::Serialize, serde::Deserialize)]
5066    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5067    /**Function with signature `isOperatorFor(address,address)` and selector `0xd95b6371`.
5068```solidity
5069function isOperatorFor(address operator, address tokenHolder) external view returns (bool);
5070```*/
5071    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5072    #[derive(Clone)]
5073    pub struct isOperatorForCall {
5074        #[allow(missing_docs)]
5075        pub operator: alloy::sol_types::private::Address,
5076        #[allow(missing_docs)]
5077        pub tokenHolder: alloy::sol_types::private::Address,
5078    }
5079    #[derive(serde::Serialize, serde::Deserialize)]
5080    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5081    ///Container type for the return parameters of the [`isOperatorFor(address,address)`](isOperatorForCall) function.
5082    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5083    #[derive(Clone)]
5084    pub struct isOperatorForReturn {
5085        #[allow(missing_docs)]
5086        pub _0: bool,
5087    }
5088    #[allow(
5089        non_camel_case_types,
5090        non_snake_case,
5091        clippy::pub_underscore_fields,
5092        clippy::style
5093    )]
5094    const _: () = {
5095        use alloy::sol_types as alloy_sol_types;
5096        {
5097            #[doc(hidden)]
5098            type UnderlyingSolTuple<'a> = (
5099                alloy::sol_types::sol_data::Address,
5100                alloy::sol_types::sol_data::Address,
5101            );
5102            #[doc(hidden)]
5103            type UnderlyingRustTuple<'a> = (
5104                alloy::sol_types::private::Address,
5105                alloy::sol_types::private::Address,
5106            );
5107            #[cfg(test)]
5108            #[allow(dead_code, unreachable_patterns)]
5109            fn _type_assertion(
5110                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5111            ) {
5112                match _t {
5113                    alloy_sol_types::private::AssertTypeEq::<
5114                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5115                    >(_) => {}
5116                }
5117            }
5118            #[automatically_derived]
5119            #[doc(hidden)]
5120            impl ::core::convert::From<isOperatorForCall> for UnderlyingRustTuple<'_> {
5121                fn from(value: isOperatorForCall) -> Self {
5122                    (value.operator, value.tokenHolder)
5123                }
5124            }
5125            #[automatically_derived]
5126            #[doc(hidden)]
5127            impl ::core::convert::From<UnderlyingRustTuple<'_>> for isOperatorForCall {
5128                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5129                    Self {
5130                        operator: tuple.0,
5131                        tokenHolder: tuple.1,
5132                    }
5133                }
5134            }
5135        }
5136        {
5137            #[doc(hidden)]
5138            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,);
5139            #[doc(hidden)]
5140            type UnderlyingRustTuple<'a> = (bool,);
5141            #[cfg(test)]
5142            #[allow(dead_code, unreachable_patterns)]
5143            fn _type_assertion(
5144                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5145            ) {
5146                match _t {
5147                    alloy_sol_types::private::AssertTypeEq::<
5148                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5149                    >(_) => {}
5150                }
5151            }
5152            #[automatically_derived]
5153            #[doc(hidden)]
5154            impl ::core::convert::From<isOperatorForReturn> for UnderlyingRustTuple<'_> {
5155                fn from(value: isOperatorForReturn) -> Self {
5156                    (value._0,)
5157                }
5158            }
5159            #[automatically_derived]
5160            #[doc(hidden)]
5161            impl ::core::convert::From<UnderlyingRustTuple<'_>> for isOperatorForReturn {
5162                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5163                    Self { _0: tuple.0 }
5164                }
5165            }
5166        }
5167        #[automatically_derived]
5168        impl alloy_sol_types::SolCall for isOperatorForCall {
5169            type Parameters<'a> = (
5170                alloy::sol_types::sol_data::Address,
5171                alloy::sol_types::sol_data::Address,
5172            );
5173            type Token<'a> = <Self::Parameters<
5174                'a,
5175            > as alloy_sol_types::SolType>::Token<'a>;
5176            type Return = bool;
5177            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,);
5178            type ReturnToken<'a> = <Self::ReturnTuple<
5179                'a,
5180            > as alloy_sol_types::SolType>::Token<'a>;
5181            const SIGNATURE: &'static str = "isOperatorFor(address,address)";
5182            const SELECTOR: [u8; 4] = [217u8, 91u8, 99u8, 113u8];
5183            #[inline]
5184            fn new<'a>(
5185                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5186            ) -> Self {
5187                tuple.into()
5188            }
5189            #[inline]
5190            fn tokenize(&self) -> Self::Token<'_> {
5191                (
5192                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
5193                        &self.operator,
5194                    ),
5195                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
5196                        &self.tokenHolder,
5197                    ),
5198                )
5199            }
5200            #[inline]
5201            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
5202                (
5203                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
5204                        ret,
5205                    ),
5206                )
5207            }
5208            #[inline]
5209            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
5210                <Self::ReturnTuple<
5211                    '_,
5212                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
5213                    .map(|r| {
5214                        let r: isOperatorForReturn = r.into();
5215                        r._0
5216                    })
5217            }
5218            #[inline]
5219            fn abi_decode_returns_validate(
5220                data: &[u8],
5221            ) -> alloy_sol_types::Result<Self::Return> {
5222                <Self::ReturnTuple<
5223                    '_,
5224                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5225                    .map(|r| {
5226                        let r: isOperatorForReturn = r.into();
5227                        r._0
5228                    })
5229            }
5230        }
5231    };
5232    #[derive(serde::Serialize, serde::Deserialize)]
5233    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5234    /**Function with signature `mint(address,uint256,bytes,bytes)` and selector `0xdcdc7dd0`.
5235```solidity
5236function mint(address account, uint256 amount, bytes memory userData, bytes memory operatorData) external;
5237```*/
5238    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5239    #[derive(Clone)]
5240    pub struct mintCall {
5241        #[allow(missing_docs)]
5242        pub account: alloy::sol_types::private::Address,
5243        #[allow(missing_docs)]
5244        pub amount: alloy::sol_types::private::primitives::aliases::U256,
5245        #[allow(missing_docs)]
5246        pub userData: alloy::sol_types::private::Bytes,
5247        #[allow(missing_docs)]
5248        pub operatorData: alloy::sol_types::private::Bytes,
5249    }
5250    ///Container type for the return parameters of the [`mint(address,uint256,bytes,bytes)`](mintCall) function.
5251    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5252    #[derive(Clone)]
5253    pub struct mintReturn {}
5254    #[allow(
5255        non_camel_case_types,
5256        non_snake_case,
5257        clippy::pub_underscore_fields,
5258        clippy::style
5259    )]
5260    const _: () = {
5261        use alloy::sol_types as alloy_sol_types;
5262        {
5263            #[doc(hidden)]
5264            type UnderlyingSolTuple<'a> = (
5265                alloy::sol_types::sol_data::Address,
5266                alloy::sol_types::sol_data::Uint<256>,
5267                alloy::sol_types::sol_data::Bytes,
5268                alloy::sol_types::sol_data::Bytes,
5269            );
5270            #[doc(hidden)]
5271            type UnderlyingRustTuple<'a> = (
5272                alloy::sol_types::private::Address,
5273                alloy::sol_types::private::primitives::aliases::U256,
5274                alloy::sol_types::private::Bytes,
5275                alloy::sol_types::private::Bytes,
5276            );
5277            #[cfg(test)]
5278            #[allow(dead_code, unreachable_patterns)]
5279            fn _type_assertion(
5280                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5281            ) {
5282                match _t {
5283                    alloy_sol_types::private::AssertTypeEq::<
5284                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5285                    >(_) => {}
5286                }
5287            }
5288            #[automatically_derived]
5289            #[doc(hidden)]
5290            impl ::core::convert::From<mintCall> for UnderlyingRustTuple<'_> {
5291                fn from(value: mintCall) -> Self {
5292                    (value.account, value.amount, value.userData, value.operatorData)
5293                }
5294            }
5295            #[automatically_derived]
5296            #[doc(hidden)]
5297            impl ::core::convert::From<UnderlyingRustTuple<'_>> for mintCall {
5298                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5299                    Self {
5300                        account: tuple.0,
5301                        amount: tuple.1,
5302                        userData: tuple.2,
5303                        operatorData: tuple.3,
5304                    }
5305                }
5306            }
5307        }
5308        {
5309            #[doc(hidden)]
5310            type UnderlyingSolTuple<'a> = ();
5311            #[doc(hidden)]
5312            type UnderlyingRustTuple<'a> = ();
5313            #[cfg(test)]
5314            #[allow(dead_code, unreachable_patterns)]
5315            fn _type_assertion(
5316                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5317            ) {
5318                match _t {
5319                    alloy_sol_types::private::AssertTypeEq::<
5320                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5321                    >(_) => {}
5322                }
5323            }
5324            #[automatically_derived]
5325            #[doc(hidden)]
5326            impl ::core::convert::From<mintReturn> for UnderlyingRustTuple<'_> {
5327                fn from(value: mintReturn) -> Self {
5328                    ()
5329                }
5330            }
5331            #[automatically_derived]
5332            #[doc(hidden)]
5333            impl ::core::convert::From<UnderlyingRustTuple<'_>> for mintReturn {
5334                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5335                    Self {}
5336                }
5337            }
5338        }
5339        impl mintReturn {
5340            fn _tokenize(
5341                &self,
5342            ) -> <mintCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
5343                ()
5344            }
5345        }
5346        #[automatically_derived]
5347        impl alloy_sol_types::SolCall for mintCall {
5348            type Parameters<'a> = (
5349                alloy::sol_types::sol_data::Address,
5350                alloy::sol_types::sol_data::Uint<256>,
5351                alloy::sol_types::sol_data::Bytes,
5352                alloy::sol_types::sol_data::Bytes,
5353            );
5354            type Token<'a> = <Self::Parameters<
5355                'a,
5356            > as alloy_sol_types::SolType>::Token<'a>;
5357            type Return = mintReturn;
5358            type ReturnTuple<'a> = ();
5359            type ReturnToken<'a> = <Self::ReturnTuple<
5360                'a,
5361            > as alloy_sol_types::SolType>::Token<'a>;
5362            const SIGNATURE: &'static str = "mint(address,uint256,bytes,bytes)";
5363            const SELECTOR: [u8; 4] = [220u8, 220u8, 125u8, 208u8];
5364            #[inline]
5365            fn new<'a>(
5366                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5367            ) -> Self {
5368                tuple.into()
5369            }
5370            #[inline]
5371            fn tokenize(&self) -> Self::Token<'_> {
5372                (
5373                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
5374                        &self.account,
5375                    ),
5376                    <alloy::sol_types::sol_data::Uint<
5377                        256,
5378                    > as alloy_sol_types::SolType>::tokenize(&self.amount),
5379                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
5380                        &self.userData,
5381                    ),
5382                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
5383                        &self.operatorData,
5384                    ),
5385                )
5386            }
5387            #[inline]
5388            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
5389                mintReturn::_tokenize(ret)
5390            }
5391            #[inline]
5392            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
5393                <Self::ReturnTuple<
5394                    '_,
5395                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
5396                    .map(Into::into)
5397            }
5398            #[inline]
5399            fn abi_decode_returns_validate(
5400                data: &[u8],
5401            ) -> alloy_sol_types::Result<Self::Return> {
5402                <Self::ReturnTuple<
5403                    '_,
5404                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5405                    .map(Into::into)
5406            }
5407        }
5408    };
5409    #[derive(serde::Serialize, serde::Deserialize)]
5410    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5411    /**Function with signature `name()` and selector `0x06fdde03`.
5412```solidity
5413function name() external view returns (string memory);
5414```*/
5415    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5416    #[derive(Clone)]
5417    pub struct nameCall;
5418    #[derive(serde::Serialize, serde::Deserialize)]
5419    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5420    ///Container type for the return parameters of the [`name()`](nameCall) function.
5421    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5422    #[derive(Clone)]
5423    pub struct nameReturn {
5424        #[allow(missing_docs)]
5425        pub _0: alloy::sol_types::private::String,
5426    }
5427    #[allow(
5428        non_camel_case_types,
5429        non_snake_case,
5430        clippy::pub_underscore_fields,
5431        clippy::style
5432    )]
5433    const _: () = {
5434        use alloy::sol_types as alloy_sol_types;
5435        {
5436            #[doc(hidden)]
5437            type UnderlyingSolTuple<'a> = ();
5438            #[doc(hidden)]
5439            type UnderlyingRustTuple<'a> = ();
5440            #[cfg(test)]
5441            #[allow(dead_code, unreachable_patterns)]
5442            fn _type_assertion(
5443                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5444            ) {
5445                match _t {
5446                    alloy_sol_types::private::AssertTypeEq::<
5447                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5448                    >(_) => {}
5449                }
5450            }
5451            #[automatically_derived]
5452            #[doc(hidden)]
5453            impl ::core::convert::From<nameCall> for UnderlyingRustTuple<'_> {
5454                fn from(value: nameCall) -> Self {
5455                    ()
5456                }
5457            }
5458            #[automatically_derived]
5459            #[doc(hidden)]
5460            impl ::core::convert::From<UnderlyingRustTuple<'_>> for nameCall {
5461                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5462                    Self
5463                }
5464            }
5465        }
5466        {
5467            #[doc(hidden)]
5468            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,);
5469            #[doc(hidden)]
5470            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,);
5471            #[cfg(test)]
5472            #[allow(dead_code, unreachable_patterns)]
5473            fn _type_assertion(
5474                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5475            ) {
5476                match _t {
5477                    alloy_sol_types::private::AssertTypeEq::<
5478                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5479                    >(_) => {}
5480                }
5481            }
5482            #[automatically_derived]
5483            #[doc(hidden)]
5484            impl ::core::convert::From<nameReturn> for UnderlyingRustTuple<'_> {
5485                fn from(value: nameReturn) -> Self {
5486                    (value._0,)
5487                }
5488            }
5489            #[automatically_derived]
5490            #[doc(hidden)]
5491            impl ::core::convert::From<UnderlyingRustTuple<'_>> for nameReturn {
5492                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5493                    Self { _0: tuple.0 }
5494                }
5495            }
5496        }
5497        #[automatically_derived]
5498        impl alloy_sol_types::SolCall for nameCall {
5499            type Parameters<'a> = ();
5500            type Token<'a> = <Self::Parameters<
5501                'a,
5502            > as alloy_sol_types::SolType>::Token<'a>;
5503            type Return = alloy::sol_types::private::String;
5504            type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,);
5505            type ReturnToken<'a> = <Self::ReturnTuple<
5506                'a,
5507            > as alloy_sol_types::SolType>::Token<'a>;
5508            const SIGNATURE: &'static str = "name()";
5509            const SELECTOR: [u8; 4] = [6u8, 253u8, 222u8, 3u8];
5510            #[inline]
5511            fn new<'a>(
5512                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5513            ) -> Self {
5514                tuple.into()
5515            }
5516            #[inline]
5517            fn tokenize(&self) -> Self::Token<'_> {
5518                ()
5519            }
5520            #[inline]
5521            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
5522                (
5523                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
5524                        ret,
5525                    ),
5526                )
5527            }
5528            #[inline]
5529            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
5530                <Self::ReturnTuple<
5531                    '_,
5532                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
5533                    .map(|r| {
5534                        let r: nameReturn = r.into();
5535                        r._0
5536                    })
5537            }
5538            #[inline]
5539            fn abi_decode_returns_validate(
5540                data: &[u8],
5541            ) -> alloy_sol_types::Result<Self::Return> {
5542                <Self::ReturnTuple<
5543                    '_,
5544                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5545                    .map(|r| {
5546                        let r: nameReturn = r.into();
5547                        r._0
5548                    })
5549            }
5550        }
5551    };
5552    #[derive(serde::Serialize, serde::Deserialize)]
5553    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5554    /**Function with signature `operatorBurn(address,uint256,bytes,bytes)` and selector `0xfc673c4f`.
5555```solidity
5556function operatorBurn(address account, uint256 amount, bytes memory data, bytes memory operatorData) external;
5557```*/
5558    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5559    #[derive(Clone)]
5560    pub struct operatorBurnCall {
5561        #[allow(missing_docs)]
5562        pub account: alloy::sol_types::private::Address,
5563        #[allow(missing_docs)]
5564        pub amount: alloy::sol_types::private::primitives::aliases::U256,
5565        #[allow(missing_docs)]
5566        pub data: alloy::sol_types::private::Bytes,
5567        #[allow(missing_docs)]
5568        pub operatorData: alloy::sol_types::private::Bytes,
5569    }
5570    ///Container type for the return parameters of the [`operatorBurn(address,uint256,bytes,bytes)`](operatorBurnCall) function.
5571    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5572    #[derive(Clone)]
5573    pub struct operatorBurnReturn {}
5574    #[allow(
5575        non_camel_case_types,
5576        non_snake_case,
5577        clippy::pub_underscore_fields,
5578        clippy::style
5579    )]
5580    const _: () = {
5581        use alloy::sol_types as alloy_sol_types;
5582        {
5583            #[doc(hidden)]
5584            type UnderlyingSolTuple<'a> = (
5585                alloy::sol_types::sol_data::Address,
5586                alloy::sol_types::sol_data::Uint<256>,
5587                alloy::sol_types::sol_data::Bytes,
5588                alloy::sol_types::sol_data::Bytes,
5589            );
5590            #[doc(hidden)]
5591            type UnderlyingRustTuple<'a> = (
5592                alloy::sol_types::private::Address,
5593                alloy::sol_types::private::primitives::aliases::U256,
5594                alloy::sol_types::private::Bytes,
5595                alloy::sol_types::private::Bytes,
5596            );
5597            #[cfg(test)]
5598            #[allow(dead_code, unreachable_patterns)]
5599            fn _type_assertion(
5600                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5601            ) {
5602                match _t {
5603                    alloy_sol_types::private::AssertTypeEq::<
5604                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5605                    >(_) => {}
5606                }
5607            }
5608            #[automatically_derived]
5609            #[doc(hidden)]
5610            impl ::core::convert::From<operatorBurnCall> for UnderlyingRustTuple<'_> {
5611                fn from(value: operatorBurnCall) -> Self {
5612                    (value.account, value.amount, value.data, value.operatorData)
5613                }
5614            }
5615            #[automatically_derived]
5616            #[doc(hidden)]
5617            impl ::core::convert::From<UnderlyingRustTuple<'_>> for operatorBurnCall {
5618                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5619                    Self {
5620                        account: tuple.0,
5621                        amount: tuple.1,
5622                        data: tuple.2,
5623                        operatorData: tuple.3,
5624                    }
5625                }
5626            }
5627        }
5628        {
5629            #[doc(hidden)]
5630            type UnderlyingSolTuple<'a> = ();
5631            #[doc(hidden)]
5632            type UnderlyingRustTuple<'a> = ();
5633            #[cfg(test)]
5634            #[allow(dead_code, unreachable_patterns)]
5635            fn _type_assertion(
5636                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5637            ) {
5638                match _t {
5639                    alloy_sol_types::private::AssertTypeEq::<
5640                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5641                    >(_) => {}
5642                }
5643            }
5644            #[automatically_derived]
5645            #[doc(hidden)]
5646            impl ::core::convert::From<operatorBurnReturn> for UnderlyingRustTuple<'_> {
5647                fn from(value: operatorBurnReturn) -> Self {
5648                    ()
5649                }
5650            }
5651            #[automatically_derived]
5652            #[doc(hidden)]
5653            impl ::core::convert::From<UnderlyingRustTuple<'_>> for operatorBurnReturn {
5654                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5655                    Self {}
5656                }
5657            }
5658        }
5659        impl operatorBurnReturn {
5660            fn _tokenize(
5661                &self,
5662            ) -> <operatorBurnCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
5663                ()
5664            }
5665        }
5666        #[automatically_derived]
5667        impl alloy_sol_types::SolCall for operatorBurnCall {
5668            type Parameters<'a> = (
5669                alloy::sol_types::sol_data::Address,
5670                alloy::sol_types::sol_data::Uint<256>,
5671                alloy::sol_types::sol_data::Bytes,
5672                alloy::sol_types::sol_data::Bytes,
5673            );
5674            type Token<'a> = <Self::Parameters<
5675                'a,
5676            > as alloy_sol_types::SolType>::Token<'a>;
5677            type Return = operatorBurnReturn;
5678            type ReturnTuple<'a> = ();
5679            type ReturnToken<'a> = <Self::ReturnTuple<
5680                'a,
5681            > as alloy_sol_types::SolType>::Token<'a>;
5682            const SIGNATURE: &'static str = "operatorBurn(address,uint256,bytes,bytes)";
5683            const SELECTOR: [u8; 4] = [252u8, 103u8, 60u8, 79u8];
5684            #[inline]
5685            fn new<'a>(
5686                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5687            ) -> Self {
5688                tuple.into()
5689            }
5690            #[inline]
5691            fn tokenize(&self) -> Self::Token<'_> {
5692                (
5693                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
5694                        &self.account,
5695                    ),
5696                    <alloy::sol_types::sol_data::Uint<
5697                        256,
5698                    > as alloy_sol_types::SolType>::tokenize(&self.amount),
5699                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
5700                        &self.data,
5701                    ),
5702                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
5703                        &self.operatorData,
5704                    ),
5705                )
5706            }
5707            #[inline]
5708            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
5709                operatorBurnReturn::_tokenize(ret)
5710            }
5711            #[inline]
5712            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
5713                <Self::ReturnTuple<
5714                    '_,
5715                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
5716                    .map(Into::into)
5717            }
5718            #[inline]
5719            fn abi_decode_returns_validate(
5720                data: &[u8],
5721            ) -> alloy_sol_types::Result<Self::Return> {
5722                <Self::ReturnTuple<
5723                    '_,
5724                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5725                    .map(Into::into)
5726            }
5727        }
5728    };
5729    #[derive(serde::Serialize, serde::Deserialize)]
5730    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5731    /**Function with signature `operatorSend(address,address,uint256,bytes,bytes)` and selector `0x62ad1b83`.
5732```solidity
5733function operatorSend(address sender, address recipient, uint256 amount, bytes memory data, bytes memory operatorData) external;
5734```*/
5735    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5736    #[derive(Clone)]
5737    pub struct operatorSendCall {
5738        #[allow(missing_docs)]
5739        pub sender: alloy::sol_types::private::Address,
5740        #[allow(missing_docs)]
5741        pub recipient: alloy::sol_types::private::Address,
5742        #[allow(missing_docs)]
5743        pub amount: alloy::sol_types::private::primitives::aliases::U256,
5744        #[allow(missing_docs)]
5745        pub data: alloy::sol_types::private::Bytes,
5746        #[allow(missing_docs)]
5747        pub operatorData: alloy::sol_types::private::Bytes,
5748    }
5749    ///Container type for the return parameters of the [`operatorSend(address,address,uint256,bytes,bytes)`](operatorSendCall) function.
5750    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5751    #[derive(Clone)]
5752    pub struct operatorSendReturn {}
5753    #[allow(
5754        non_camel_case_types,
5755        non_snake_case,
5756        clippy::pub_underscore_fields,
5757        clippy::style
5758    )]
5759    const _: () = {
5760        use alloy::sol_types as alloy_sol_types;
5761        {
5762            #[doc(hidden)]
5763            type UnderlyingSolTuple<'a> = (
5764                alloy::sol_types::sol_data::Address,
5765                alloy::sol_types::sol_data::Address,
5766                alloy::sol_types::sol_data::Uint<256>,
5767                alloy::sol_types::sol_data::Bytes,
5768                alloy::sol_types::sol_data::Bytes,
5769            );
5770            #[doc(hidden)]
5771            type UnderlyingRustTuple<'a> = (
5772                alloy::sol_types::private::Address,
5773                alloy::sol_types::private::Address,
5774                alloy::sol_types::private::primitives::aliases::U256,
5775                alloy::sol_types::private::Bytes,
5776                alloy::sol_types::private::Bytes,
5777            );
5778            #[cfg(test)]
5779            #[allow(dead_code, unreachable_patterns)]
5780            fn _type_assertion(
5781                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5782            ) {
5783                match _t {
5784                    alloy_sol_types::private::AssertTypeEq::<
5785                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5786                    >(_) => {}
5787                }
5788            }
5789            #[automatically_derived]
5790            #[doc(hidden)]
5791            impl ::core::convert::From<operatorSendCall> for UnderlyingRustTuple<'_> {
5792                fn from(value: operatorSendCall) -> Self {
5793                    (
5794                        value.sender,
5795                        value.recipient,
5796                        value.amount,
5797                        value.data,
5798                        value.operatorData,
5799                    )
5800                }
5801            }
5802            #[automatically_derived]
5803            #[doc(hidden)]
5804            impl ::core::convert::From<UnderlyingRustTuple<'_>> for operatorSendCall {
5805                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5806                    Self {
5807                        sender: tuple.0,
5808                        recipient: tuple.1,
5809                        amount: tuple.2,
5810                        data: tuple.3,
5811                        operatorData: tuple.4,
5812                    }
5813                }
5814            }
5815        }
5816        {
5817            #[doc(hidden)]
5818            type UnderlyingSolTuple<'a> = ();
5819            #[doc(hidden)]
5820            type UnderlyingRustTuple<'a> = ();
5821            #[cfg(test)]
5822            #[allow(dead_code, unreachable_patterns)]
5823            fn _type_assertion(
5824                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5825            ) {
5826                match _t {
5827                    alloy_sol_types::private::AssertTypeEq::<
5828                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5829                    >(_) => {}
5830                }
5831            }
5832            #[automatically_derived]
5833            #[doc(hidden)]
5834            impl ::core::convert::From<operatorSendReturn> for UnderlyingRustTuple<'_> {
5835                fn from(value: operatorSendReturn) -> Self {
5836                    ()
5837                }
5838            }
5839            #[automatically_derived]
5840            #[doc(hidden)]
5841            impl ::core::convert::From<UnderlyingRustTuple<'_>> for operatorSendReturn {
5842                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5843                    Self {}
5844                }
5845            }
5846        }
5847        impl operatorSendReturn {
5848            fn _tokenize(
5849                &self,
5850            ) -> <operatorSendCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
5851                ()
5852            }
5853        }
5854        #[automatically_derived]
5855        impl alloy_sol_types::SolCall for operatorSendCall {
5856            type Parameters<'a> = (
5857                alloy::sol_types::sol_data::Address,
5858                alloy::sol_types::sol_data::Address,
5859                alloy::sol_types::sol_data::Uint<256>,
5860                alloy::sol_types::sol_data::Bytes,
5861                alloy::sol_types::sol_data::Bytes,
5862            );
5863            type Token<'a> = <Self::Parameters<
5864                'a,
5865            > as alloy_sol_types::SolType>::Token<'a>;
5866            type Return = operatorSendReturn;
5867            type ReturnTuple<'a> = ();
5868            type ReturnToken<'a> = <Self::ReturnTuple<
5869                'a,
5870            > as alloy_sol_types::SolType>::Token<'a>;
5871            const SIGNATURE: &'static str = "operatorSend(address,address,uint256,bytes,bytes)";
5872            const SELECTOR: [u8; 4] = [98u8, 173u8, 27u8, 131u8];
5873            #[inline]
5874            fn new<'a>(
5875                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5876            ) -> Self {
5877                tuple.into()
5878            }
5879            #[inline]
5880            fn tokenize(&self) -> Self::Token<'_> {
5881                (
5882                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
5883                        &self.sender,
5884                    ),
5885                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
5886                        &self.recipient,
5887                    ),
5888                    <alloy::sol_types::sol_data::Uint<
5889                        256,
5890                    > as alloy_sol_types::SolType>::tokenize(&self.amount),
5891                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
5892                        &self.data,
5893                    ),
5894                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
5895                        &self.operatorData,
5896                    ),
5897                )
5898            }
5899            #[inline]
5900            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
5901                operatorSendReturn::_tokenize(ret)
5902            }
5903            #[inline]
5904            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
5905                <Self::ReturnTuple<
5906                    '_,
5907                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
5908                    .map(Into::into)
5909            }
5910            #[inline]
5911            fn abi_decode_returns_validate(
5912                data: &[u8],
5913            ) -> alloy_sol_types::Result<Self::Return> {
5914                <Self::ReturnTuple<
5915                    '_,
5916                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5917                    .map(Into::into)
5918            }
5919        }
5920    };
5921    #[derive(serde::Serialize, serde::Deserialize)]
5922    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5923    /**Function with signature `renounceRole(bytes32,address)` and selector `0x36568abe`.
5924```solidity
5925function renounceRole(bytes32 role, address account) external;
5926```*/
5927    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5928    #[derive(Clone)]
5929    pub struct renounceRoleCall {
5930        #[allow(missing_docs)]
5931        pub role: alloy::sol_types::private::FixedBytes<32>,
5932        #[allow(missing_docs)]
5933        pub account: alloy::sol_types::private::Address,
5934    }
5935    ///Container type for the return parameters of the [`renounceRole(bytes32,address)`](renounceRoleCall) function.
5936    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5937    #[derive(Clone)]
5938    pub struct renounceRoleReturn {}
5939    #[allow(
5940        non_camel_case_types,
5941        non_snake_case,
5942        clippy::pub_underscore_fields,
5943        clippy::style
5944    )]
5945    const _: () = {
5946        use alloy::sol_types as alloy_sol_types;
5947        {
5948            #[doc(hidden)]
5949            type UnderlyingSolTuple<'a> = (
5950                alloy::sol_types::sol_data::FixedBytes<32>,
5951                alloy::sol_types::sol_data::Address,
5952            );
5953            #[doc(hidden)]
5954            type UnderlyingRustTuple<'a> = (
5955                alloy::sol_types::private::FixedBytes<32>,
5956                alloy::sol_types::private::Address,
5957            );
5958            #[cfg(test)]
5959            #[allow(dead_code, unreachable_patterns)]
5960            fn _type_assertion(
5961                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5962            ) {
5963                match _t {
5964                    alloy_sol_types::private::AssertTypeEq::<
5965                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5966                    >(_) => {}
5967                }
5968            }
5969            #[automatically_derived]
5970            #[doc(hidden)]
5971            impl ::core::convert::From<renounceRoleCall> for UnderlyingRustTuple<'_> {
5972                fn from(value: renounceRoleCall) -> Self {
5973                    (value.role, value.account)
5974                }
5975            }
5976            #[automatically_derived]
5977            #[doc(hidden)]
5978            impl ::core::convert::From<UnderlyingRustTuple<'_>> for renounceRoleCall {
5979                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5980                    Self {
5981                        role: tuple.0,
5982                        account: tuple.1,
5983                    }
5984                }
5985            }
5986        }
5987        {
5988            #[doc(hidden)]
5989            type UnderlyingSolTuple<'a> = ();
5990            #[doc(hidden)]
5991            type UnderlyingRustTuple<'a> = ();
5992            #[cfg(test)]
5993            #[allow(dead_code, unreachable_patterns)]
5994            fn _type_assertion(
5995                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5996            ) {
5997                match _t {
5998                    alloy_sol_types::private::AssertTypeEq::<
5999                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6000                    >(_) => {}
6001                }
6002            }
6003            #[automatically_derived]
6004            #[doc(hidden)]
6005            impl ::core::convert::From<renounceRoleReturn> for UnderlyingRustTuple<'_> {
6006                fn from(value: renounceRoleReturn) -> Self {
6007                    ()
6008                }
6009            }
6010            #[automatically_derived]
6011            #[doc(hidden)]
6012            impl ::core::convert::From<UnderlyingRustTuple<'_>> for renounceRoleReturn {
6013                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6014                    Self {}
6015                }
6016            }
6017        }
6018        impl renounceRoleReturn {
6019            fn _tokenize(
6020                &self,
6021            ) -> <renounceRoleCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
6022                ()
6023            }
6024        }
6025        #[automatically_derived]
6026        impl alloy_sol_types::SolCall for renounceRoleCall {
6027            type Parameters<'a> = (
6028                alloy::sol_types::sol_data::FixedBytes<32>,
6029                alloy::sol_types::sol_data::Address,
6030            );
6031            type Token<'a> = <Self::Parameters<
6032                'a,
6033            > as alloy_sol_types::SolType>::Token<'a>;
6034            type Return = renounceRoleReturn;
6035            type ReturnTuple<'a> = ();
6036            type ReturnToken<'a> = <Self::ReturnTuple<
6037                'a,
6038            > as alloy_sol_types::SolType>::Token<'a>;
6039            const SIGNATURE: &'static str = "renounceRole(bytes32,address)";
6040            const SELECTOR: [u8; 4] = [54u8, 86u8, 138u8, 190u8];
6041            #[inline]
6042            fn new<'a>(
6043                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6044            ) -> Self {
6045                tuple.into()
6046            }
6047            #[inline]
6048            fn tokenize(&self) -> Self::Token<'_> {
6049                (
6050                    <alloy::sol_types::sol_data::FixedBytes<
6051                        32,
6052                    > as alloy_sol_types::SolType>::tokenize(&self.role),
6053                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
6054                        &self.account,
6055                    ),
6056                )
6057            }
6058            #[inline]
6059            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6060                renounceRoleReturn::_tokenize(ret)
6061            }
6062            #[inline]
6063            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6064                <Self::ReturnTuple<
6065                    '_,
6066                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6067                    .map(Into::into)
6068            }
6069            #[inline]
6070            fn abi_decode_returns_validate(
6071                data: &[u8],
6072            ) -> alloy_sol_types::Result<Self::Return> {
6073                <Self::ReturnTuple<
6074                    '_,
6075                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6076                    .map(Into::into)
6077            }
6078        }
6079    };
6080    #[derive(serde::Serialize, serde::Deserialize)]
6081    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6082    /**Function with signature `revokeOperator(address)` and selector `0xfad8b32a`.
6083```solidity
6084function revokeOperator(address operator) external;
6085```*/
6086    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6087    #[derive(Clone)]
6088    pub struct revokeOperatorCall {
6089        #[allow(missing_docs)]
6090        pub operator: alloy::sol_types::private::Address,
6091    }
6092    ///Container type for the return parameters of the [`revokeOperator(address)`](revokeOperatorCall) function.
6093    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6094    #[derive(Clone)]
6095    pub struct revokeOperatorReturn {}
6096    #[allow(
6097        non_camel_case_types,
6098        non_snake_case,
6099        clippy::pub_underscore_fields,
6100        clippy::style
6101    )]
6102    const _: () = {
6103        use alloy::sol_types as alloy_sol_types;
6104        {
6105            #[doc(hidden)]
6106            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
6107            #[doc(hidden)]
6108            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
6109            #[cfg(test)]
6110            #[allow(dead_code, unreachable_patterns)]
6111            fn _type_assertion(
6112                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6113            ) {
6114                match _t {
6115                    alloy_sol_types::private::AssertTypeEq::<
6116                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6117                    >(_) => {}
6118                }
6119            }
6120            #[automatically_derived]
6121            #[doc(hidden)]
6122            impl ::core::convert::From<revokeOperatorCall> for UnderlyingRustTuple<'_> {
6123                fn from(value: revokeOperatorCall) -> Self {
6124                    (value.operator,)
6125                }
6126            }
6127            #[automatically_derived]
6128            #[doc(hidden)]
6129            impl ::core::convert::From<UnderlyingRustTuple<'_>> for revokeOperatorCall {
6130                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6131                    Self { operator: tuple.0 }
6132                }
6133            }
6134        }
6135        {
6136            #[doc(hidden)]
6137            type UnderlyingSolTuple<'a> = ();
6138            #[doc(hidden)]
6139            type UnderlyingRustTuple<'a> = ();
6140            #[cfg(test)]
6141            #[allow(dead_code, unreachable_patterns)]
6142            fn _type_assertion(
6143                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6144            ) {
6145                match _t {
6146                    alloy_sol_types::private::AssertTypeEq::<
6147                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6148                    >(_) => {}
6149                }
6150            }
6151            #[automatically_derived]
6152            #[doc(hidden)]
6153            impl ::core::convert::From<revokeOperatorReturn>
6154            for UnderlyingRustTuple<'_> {
6155                fn from(value: revokeOperatorReturn) -> Self {
6156                    ()
6157                }
6158            }
6159            #[automatically_derived]
6160            #[doc(hidden)]
6161            impl ::core::convert::From<UnderlyingRustTuple<'_>>
6162            for revokeOperatorReturn {
6163                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6164                    Self {}
6165                }
6166            }
6167        }
6168        impl revokeOperatorReturn {
6169            fn _tokenize(
6170                &self,
6171            ) -> <revokeOperatorCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
6172                ()
6173            }
6174        }
6175        #[automatically_derived]
6176        impl alloy_sol_types::SolCall for revokeOperatorCall {
6177            type Parameters<'a> = (alloy::sol_types::sol_data::Address,);
6178            type Token<'a> = <Self::Parameters<
6179                'a,
6180            > as alloy_sol_types::SolType>::Token<'a>;
6181            type Return = revokeOperatorReturn;
6182            type ReturnTuple<'a> = ();
6183            type ReturnToken<'a> = <Self::ReturnTuple<
6184                'a,
6185            > as alloy_sol_types::SolType>::Token<'a>;
6186            const SIGNATURE: &'static str = "revokeOperator(address)";
6187            const SELECTOR: [u8; 4] = [250u8, 216u8, 179u8, 42u8];
6188            #[inline]
6189            fn new<'a>(
6190                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6191            ) -> Self {
6192                tuple.into()
6193            }
6194            #[inline]
6195            fn tokenize(&self) -> Self::Token<'_> {
6196                (
6197                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
6198                        &self.operator,
6199                    ),
6200                )
6201            }
6202            #[inline]
6203            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6204                revokeOperatorReturn::_tokenize(ret)
6205            }
6206            #[inline]
6207            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6208                <Self::ReturnTuple<
6209                    '_,
6210                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6211                    .map(Into::into)
6212            }
6213            #[inline]
6214            fn abi_decode_returns_validate(
6215                data: &[u8],
6216            ) -> alloy_sol_types::Result<Self::Return> {
6217                <Self::ReturnTuple<
6218                    '_,
6219                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6220                    .map(Into::into)
6221            }
6222        }
6223    };
6224    #[derive(serde::Serialize, serde::Deserialize)]
6225    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6226    /**Function with signature `revokeRole(bytes32,address)` and selector `0xd547741f`.
6227```solidity
6228function revokeRole(bytes32 role, address account) external;
6229```*/
6230    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6231    #[derive(Clone)]
6232    pub struct revokeRoleCall {
6233        #[allow(missing_docs)]
6234        pub role: alloy::sol_types::private::FixedBytes<32>,
6235        #[allow(missing_docs)]
6236        pub account: alloy::sol_types::private::Address,
6237    }
6238    ///Container type for the return parameters of the [`revokeRole(bytes32,address)`](revokeRoleCall) function.
6239    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6240    #[derive(Clone)]
6241    pub struct revokeRoleReturn {}
6242    #[allow(
6243        non_camel_case_types,
6244        non_snake_case,
6245        clippy::pub_underscore_fields,
6246        clippy::style
6247    )]
6248    const _: () = {
6249        use alloy::sol_types as alloy_sol_types;
6250        {
6251            #[doc(hidden)]
6252            type UnderlyingSolTuple<'a> = (
6253                alloy::sol_types::sol_data::FixedBytes<32>,
6254                alloy::sol_types::sol_data::Address,
6255            );
6256            #[doc(hidden)]
6257            type UnderlyingRustTuple<'a> = (
6258                alloy::sol_types::private::FixedBytes<32>,
6259                alloy::sol_types::private::Address,
6260            );
6261            #[cfg(test)]
6262            #[allow(dead_code, unreachable_patterns)]
6263            fn _type_assertion(
6264                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6265            ) {
6266                match _t {
6267                    alloy_sol_types::private::AssertTypeEq::<
6268                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6269                    >(_) => {}
6270                }
6271            }
6272            #[automatically_derived]
6273            #[doc(hidden)]
6274            impl ::core::convert::From<revokeRoleCall> for UnderlyingRustTuple<'_> {
6275                fn from(value: revokeRoleCall) -> Self {
6276                    (value.role, value.account)
6277                }
6278            }
6279            #[automatically_derived]
6280            #[doc(hidden)]
6281            impl ::core::convert::From<UnderlyingRustTuple<'_>> for revokeRoleCall {
6282                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6283                    Self {
6284                        role: tuple.0,
6285                        account: tuple.1,
6286                    }
6287                }
6288            }
6289        }
6290        {
6291            #[doc(hidden)]
6292            type UnderlyingSolTuple<'a> = ();
6293            #[doc(hidden)]
6294            type UnderlyingRustTuple<'a> = ();
6295            #[cfg(test)]
6296            #[allow(dead_code, unreachable_patterns)]
6297            fn _type_assertion(
6298                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6299            ) {
6300                match _t {
6301                    alloy_sol_types::private::AssertTypeEq::<
6302                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6303                    >(_) => {}
6304                }
6305            }
6306            #[automatically_derived]
6307            #[doc(hidden)]
6308            impl ::core::convert::From<revokeRoleReturn> for UnderlyingRustTuple<'_> {
6309                fn from(value: revokeRoleReturn) -> Self {
6310                    ()
6311                }
6312            }
6313            #[automatically_derived]
6314            #[doc(hidden)]
6315            impl ::core::convert::From<UnderlyingRustTuple<'_>> for revokeRoleReturn {
6316                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6317                    Self {}
6318                }
6319            }
6320        }
6321        impl revokeRoleReturn {
6322            fn _tokenize(
6323                &self,
6324            ) -> <revokeRoleCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
6325                ()
6326            }
6327        }
6328        #[automatically_derived]
6329        impl alloy_sol_types::SolCall for revokeRoleCall {
6330            type Parameters<'a> = (
6331                alloy::sol_types::sol_data::FixedBytes<32>,
6332                alloy::sol_types::sol_data::Address,
6333            );
6334            type Token<'a> = <Self::Parameters<
6335                'a,
6336            > as alloy_sol_types::SolType>::Token<'a>;
6337            type Return = revokeRoleReturn;
6338            type ReturnTuple<'a> = ();
6339            type ReturnToken<'a> = <Self::ReturnTuple<
6340                'a,
6341            > as alloy_sol_types::SolType>::Token<'a>;
6342            const SIGNATURE: &'static str = "revokeRole(bytes32,address)";
6343            const SELECTOR: [u8; 4] = [213u8, 71u8, 116u8, 31u8];
6344            #[inline]
6345            fn new<'a>(
6346                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6347            ) -> Self {
6348                tuple.into()
6349            }
6350            #[inline]
6351            fn tokenize(&self) -> Self::Token<'_> {
6352                (
6353                    <alloy::sol_types::sol_data::FixedBytes<
6354                        32,
6355                    > as alloy_sol_types::SolType>::tokenize(&self.role),
6356                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
6357                        &self.account,
6358                    ),
6359                )
6360            }
6361            #[inline]
6362            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6363                revokeRoleReturn::_tokenize(ret)
6364            }
6365            #[inline]
6366            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6367                <Self::ReturnTuple<
6368                    '_,
6369                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6370                    .map(Into::into)
6371            }
6372            #[inline]
6373            fn abi_decode_returns_validate(
6374                data: &[u8],
6375            ) -> alloy_sol_types::Result<Self::Return> {
6376                <Self::ReturnTuple<
6377                    '_,
6378                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6379                    .map(Into::into)
6380            }
6381        }
6382    };
6383    #[derive(serde::Serialize, serde::Deserialize)]
6384    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6385    /**Function with signature `send(address,uint256,bytes)` and selector `0x9bd9bbc6`.
6386```solidity
6387function send(address recipient, uint256 amount, bytes memory data) external;
6388```*/
6389    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6390    #[derive(Clone)]
6391    pub struct sendCall {
6392        #[allow(missing_docs)]
6393        pub recipient: alloy::sol_types::private::Address,
6394        #[allow(missing_docs)]
6395        pub amount: alloy::sol_types::private::primitives::aliases::U256,
6396        #[allow(missing_docs)]
6397        pub data: alloy::sol_types::private::Bytes,
6398    }
6399    ///Container type for the return parameters of the [`send(address,uint256,bytes)`](sendCall) function.
6400    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6401    #[derive(Clone)]
6402    pub struct sendReturn {}
6403    #[allow(
6404        non_camel_case_types,
6405        non_snake_case,
6406        clippy::pub_underscore_fields,
6407        clippy::style
6408    )]
6409    const _: () = {
6410        use alloy::sol_types as alloy_sol_types;
6411        {
6412            #[doc(hidden)]
6413            type UnderlyingSolTuple<'a> = (
6414                alloy::sol_types::sol_data::Address,
6415                alloy::sol_types::sol_data::Uint<256>,
6416                alloy::sol_types::sol_data::Bytes,
6417            );
6418            #[doc(hidden)]
6419            type UnderlyingRustTuple<'a> = (
6420                alloy::sol_types::private::Address,
6421                alloy::sol_types::private::primitives::aliases::U256,
6422                alloy::sol_types::private::Bytes,
6423            );
6424            #[cfg(test)]
6425            #[allow(dead_code, unreachable_patterns)]
6426            fn _type_assertion(
6427                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6428            ) {
6429                match _t {
6430                    alloy_sol_types::private::AssertTypeEq::<
6431                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6432                    >(_) => {}
6433                }
6434            }
6435            #[automatically_derived]
6436            #[doc(hidden)]
6437            impl ::core::convert::From<sendCall> for UnderlyingRustTuple<'_> {
6438                fn from(value: sendCall) -> Self {
6439                    (value.recipient, value.amount, value.data)
6440                }
6441            }
6442            #[automatically_derived]
6443            #[doc(hidden)]
6444            impl ::core::convert::From<UnderlyingRustTuple<'_>> for sendCall {
6445                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6446                    Self {
6447                        recipient: tuple.0,
6448                        amount: tuple.1,
6449                        data: tuple.2,
6450                    }
6451                }
6452            }
6453        }
6454        {
6455            #[doc(hidden)]
6456            type UnderlyingSolTuple<'a> = ();
6457            #[doc(hidden)]
6458            type UnderlyingRustTuple<'a> = ();
6459            #[cfg(test)]
6460            #[allow(dead_code, unreachable_patterns)]
6461            fn _type_assertion(
6462                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6463            ) {
6464                match _t {
6465                    alloy_sol_types::private::AssertTypeEq::<
6466                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6467                    >(_) => {}
6468                }
6469            }
6470            #[automatically_derived]
6471            #[doc(hidden)]
6472            impl ::core::convert::From<sendReturn> for UnderlyingRustTuple<'_> {
6473                fn from(value: sendReturn) -> Self {
6474                    ()
6475                }
6476            }
6477            #[automatically_derived]
6478            #[doc(hidden)]
6479            impl ::core::convert::From<UnderlyingRustTuple<'_>> for sendReturn {
6480                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6481                    Self {}
6482                }
6483            }
6484        }
6485        impl sendReturn {
6486            fn _tokenize(
6487                &self,
6488            ) -> <sendCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
6489                ()
6490            }
6491        }
6492        #[automatically_derived]
6493        impl alloy_sol_types::SolCall for sendCall {
6494            type Parameters<'a> = (
6495                alloy::sol_types::sol_data::Address,
6496                alloy::sol_types::sol_data::Uint<256>,
6497                alloy::sol_types::sol_data::Bytes,
6498            );
6499            type Token<'a> = <Self::Parameters<
6500                'a,
6501            > as alloy_sol_types::SolType>::Token<'a>;
6502            type Return = sendReturn;
6503            type ReturnTuple<'a> = ();
6504            type ReturnToken<'a> = <Self::ReturnTuple<
6505                'a,
6506            > as alloy_sol_types::SolType>::Token<'a>;
6507            const SIGNATURE: &'static str = "send(address,uint256,bytes)";
6508            const SELECTOR: [u8; 4] = [155u8, 217u8, 187u8, 198u8];
6509            #[inline]
6510            fn new<'a>(
6511                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6512            ) -> Self {
6513                tuple.into()
6514            }
6515            #[inline]
6516            fn tokenize(&self) -> Self::Token<'_> {
6517                (
6518                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
6519                        &self.recipient,
6520                    ),
6521                    <alloy::sol_types::sol_data::Uint<
6522                        256,
6523                    > as alloy_sol_types::SolType>::tokenize(&self.amount),
6524                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
6525                        &self.data,
6526                    ),
6527                )
6528            }
6529            #[inline]
6530            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6531                sendReturn::_tokenize(ret)
6532            }
6533            #[inline]
6534            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6535                <Self::ReturnTuple<
6536                    '_,
6537                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6538                    .map(Into::into)
6539            }
6540            #[inline]
6541            fn abi_decode_returns_validate(
6542                data: &[u8],
6543            ) -> alloy_sol_types::Result<Self::Return> {
6544                <Self::ReturnTuple<
6545                    '_,
6546                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6547                    .map(Into::into)
6548            }
6549        }
6550    };
6551    #[derive(serde::Serialize, serde::Deserialize)]
6552    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6553    /**Function with signature `supportsInterface(bytes4)` and selector `0x01ffc9a7`.
6554```solidity
6555function supportsInterface(bytes4 interfaceId) external view returns (bool);
6556```*/
6557    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6558    #[derive(Clone)]
6559    pub struct supportsInterfaceCall {
6560        #[allow(missing_docs)]
6561        pub interfaceId: alloy::sol_types::private::FixedBytes<4>,
6562    }
6563    #[derive(serde::Serialize, serde::Deserialize)]
6564    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6565    ///Container type for the return parameters of the [`supportsInterface(bytes4)`](supportsInterfaceCall) function.
6566    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6567    #[derive(Clone)]
6568    pub struct supportsInterfaceReturn {
6569        #[allow(missing_docs)]
6570        pub _0: bool,
6571    }
6572    #[allow(
6573        non_camel_case_types,
6574        non_snake_case,
6575        clippy::pub_underscore_fields,
6576        clippy::style
6577    )]
6578    const _: () = {
6579        use alloy::sol_types as alloy_sol_types;
6580        {
6581            #[doc(hidden)]
6582            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<4>,);
6583            #[doc(hidden)]
6584            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<4>,);
6585            #[cfg(test)]
6586            #[allow(dead_code, unreachable_patterns)]
6587            fn _type_assertion(
6588                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6589            ) {
6590                match _t {
6591                    alloy_sol_types::private::AssertTypeEq::<
6592                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6593                    >(_) => {}
6594                }
6595            }
6596            #[automatically_derived]
6597            #[doc(hidden)]
6598            impl ::core::convert::From<supportsInterfaceCall>
6599            for UnderlyingRustTuple<'_> {
6600                fn from(value: supportsInterfaceCall) -> Self {
6601                    (value.interfaceId,)
6602                }
6603            }
6604            #[automatically_derived]
6605            #[doc(hidden)]
6606            impl ::core::convert::From<UnderlyingRustTuple<'_>>
6607            for supportsInterfaceCall {
6608                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6609                    Self { interfaceId: tuple.0 }
6610                }
6611            }
6612        }
6613        {
6614            #[doc(hidden)]
6615            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,);
6616            #[doc(hidden)]
6617            type UnderlyingRustTuple<'a> = (bool,);
6618            #[cfg(test)]
6619            #[allow(dead_code, unreachable_patterns)]
6620            fn _type_assertion(
6621                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6622            ) {
6623                match _t {
6624                    alloy_sol_types::private::AssertTypeEq::<
6625                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6626                    >(_) => {}
6627                }
6628            }
6629            #[automatically_derived]
6630            #[doc(hidden)]
6631            impl ::core::convert::From<supportsInterfaceReturn>
6632            for UnderlyingRustTuple<'_> {
6633                fn from(value: supportsInterfaceReturn) -> Self {
6634                    (value._0,)
6635                }
6636            }
6637            #[automatically_derived]
6638            #[doc(hidden)]
6639            impl ::core::convert::From<UnderlyingRustTuple<'_>>
6640            for supportsInterfaceReturn {
6641                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6642                    Self { _0: tuple.0 }
6643                }
6644            }
6645        }
6646        #[automatically_derived]
6647        impl alloy_sol_types::SolCall for supportsInterfaceCall {
6648            type Parameters<'a> = (alloy::sol_types::sol_data::FixedBytes<4>,);
6649            type Token<'a> = <Self::Parameters<
6650                'a,
6651            > as alloy_sol_types::SolType>::Token<'a>;
6652            type Return = bool;
6653            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,);
6654            type ReturnToken<'a> = <Self::ReturnTuple<
6655                'a,
6656            > as alloy_sol_types::SolType>::Token<'a>;
6657            const SIGNATURE: &'static str = "supportsInterface(bytes4)";
6658            const SELECTOR: [u8; 4] = [1u8, 255u8, 201u8, 167u8];
6659            #[inline]
6660            fn new<'a>(
6661                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6662            ) -> Self {
6663                tuple.into()
6664            }
6665            #[inline]
6666            fn tokenize(&self) -> Self::Token<'_> {
6667                (
6668                    <alloy::sol_types::sol_data::FixedBytes<
6669                        4,
6670                    > as alloy_sol_types::SolType>::tokenize(&self.interfaceId),
6671                )
6672            }
6673            #[inline]
6674            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6675                (
6676                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
6677                        ret,
6678                    ),
6679                )
6680            }
6681            #[inline]
6682            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6683                <Self::ReturnTuple<
6684                    '_,
6685                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6686                    .map(|r| {
6687                        let r: supportsInterfaceReturn = r.into();
6688                        r._0
6689                    })
6690            }
6691            #[inline]
6692            fn abi_decode_returns_validate(
6693                data: &[u8],
6694            ) -> alloy_sol_types::Result<Self::Return> {
6695                <Self::ReturnTuple<
6696                    '_,
6697                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6698                    .map(|r| {
6699                        let r: supportsInterfaceReturn = r.into();
6700                        r._0
6701                    })
6702            }
6703        }
6704    };
6705    #[derive(serde::Serialize, serde::Deserialize)]
6706    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6707    /**Function with signature `symbol()` and selector `0x95d89b41`.
6708```solidity
6709function symbol() external view returns (string memory);
6710```*/
6711    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6712    #[derive(Clone)]
6713    pub struct symbolCall;
6714    #[derive(serde::Serialize, serde::Deserialize)]
6715    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6716    ///Container type for the return parameters of the [`symbol()`](symbolCall) function.
6717    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6718    #[derive(Clone)]
6719    pub struct symbolReturn {
6720        #[allow(missing_docs)]
6721        pub _0: alloy::sol_types::private::String,
6722    }
6723    #[allow(
6724        non_camel_case_types,
6725        non_snake_case,
6726        clippy::pub_underscore_fields,
6727        clippy::style
6728    )]
6729    const _: () = {
6730        use alloy::sol_types as alloy_sol_types;
6731        {
6732            #[doc(hidden)]
6733            type UnderlyingSolTuple<'a> = ();
6734            #[doc(hidden)]
6735            type UnderlyingRustTuple<'a> = ();
6736            #[cfg(test)]
6737            #[allow(dead_code, unreachable_patterns)]
6738            fn _type_assertion(
6739                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6740            ) {
6741                match _t {
6742                    alloy_sol_types::private::AssertTypeEq::<
6743                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6744                    >(_) => {}
6745                }
6746            }
6747            #[automatically_derived]
6748            #[doc(hidden)]
6749            impl ::core::convert::From<symbolCall> for UnderlyingRustTuple<'_> {
6750                fn from(value: symbolCall) -> Self {
6751                    ()
6752                }
6753            }
6754            #[automatically_derived]
6755            #[doc(hidden)]
6756            impl ::core::convert::From<UnderlyingRustTuple<'_>> for symbolCall {
6757                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6758                    Self
6759                }
6760            }
6761        }
6762        {
6763            #[doc(hidden)]
6764            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,);
6765            #[doc(hidden)]
6766            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,);
6767            #[cfg(test)]
6768            #[allow(dead_code, unreachable_patterns)]
6769            fn _type_assertion(
6770                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6771            ) {
6772                match _t {
6773                    alloy_sol_types::private::AssertTypeEq::<
6774                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6775                    >(_) => {}
6776                }
6777            }
6778            #[automatically_derived]
6779            #[doc(hidden)]
6780            impl ::core::convert::From<symbolReturn> for UnderlyingRustTuple<'_> {
6781                fn from(value: symbolReturn) -> Self {
6782                    (value._0,)
6783                }
6784            }
6785            #[automatically_derived]
6786            #[doc(hidden)]
6787            impl ::core::convert::From<UnderlyingRustTuple<'_>> for symbolReturn {
6788                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6789                    Self { _0: tuple.0 }
6790                }
6791            }
6792        }
6793        #[automatically_derived]
6794        impl alloy_sol_types::SolCall for symbolCall {
6795            type Parameters<'a> = ();
6796            type Token<'a> = <Self::Parameters<
6797                'a,
6798            > as alloy_sol_types::SolType>::Token<'a>;
6799            type Return = alloy::sol_types::private::String;
6800            type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,);
6801            type ReturnToken<'a> = <Self::ReturnTuple<
6802                'a,
6803            > as alloy_sol_types::SolType>::Token<'a>;
6804            const SIGNATURE: &'static str = "symbol()";
6805            const SELECTOR: [u8; 4] = [149u8, 216u8, 155u8, 65u8];
6806            #[inline]
6807            fn new<'a>(
6808                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6809            ) -> Self {
6810                tuple.into()
6811            }
6812            #[inline]
6813            fn tokenize(&self) -> Self::Token<'_> {
6814                ()
6815            }
6816            #[inline]
6817            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6818                (
6819                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
6820                        ret,
6821                    ),
6822                )
6823            }
6824            #[inline]
6825            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6826                <Self::ReturnTuple<
6827                    '_,
6828                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6829                    .map(|r| {
6830                        let r: symbolReturn = r.into();
6831                        r._0
6832                    })
6833            }
6834            #[inline]
6835            fn abi_decode_returns_validate(
6836                data: &[u8],
6837            ) -> alloy_sol_types::Result<Self::Return> {
6838                <Self::ReturnTuple<
6839                    '_,
6840                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6841                    .map(|r| {
6842                        let r: symbolReturn = r.into();
6843                        r._0
6844                    })
6845            }
6846        }
6847    };
6848    #[derive(serde::Serialize, serde::Deserialize)]
6849    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6850    /**Function with signature `totalSupply()` and selector `0x18160ddd`.
6851```solidity
6852function totalSupply() external view returns (uint256);
6853```*/
6854    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6855    #[derive(Clone)]
6856    pub struct totalSupplyCall;
6857    #[derive(serde::Serialize, serde::Deserialize)]
6858    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6859    ///Container type for the return parameters of the [`totalSupply()`](totalSupplyCall) function.
6860    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6861    #[derive(Clone)]
6862    pub struct totalSupplyReturn {
6863        #[allow(missing_docs)]
6864        pub _0: alloy::sol_types::private::primitives::aliases::U256,
6865    }
6866    #[allow(
6867        non_camel_case_types,
6868        non_snake_case,
6869        clippy::pub_underscore_fields,
6870        clippy::style
6871    )]
6872    const _: () = {
6873        use alloy::sol_types as alloy_sol_types;
6874        {
6875            #[doc(hidden)]
6876            type UnderlyingSolTuple<'a> = ();
6877            #[doc(hidden)]
6878            type UnderlyingRustTuple<'a> = ();
6879            #[cfg(test)]
6880            #[allow(dead_code, unreachable_patterns)]
6881            fn _type_assertion(
6882                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6883            ) {
6884                match _t {
6885                    alloy_sol_types::private::AssertTypeEq::<
6886                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6887                    >(_) => {}
6888                }
6889            }
6890            #[automatically_derived]
6891            #[doc(hidden)]
6892            impl ::core::convert::From<totalSupplyCall> for UnderlyingRustTuple<'_> {
6893                fn from(value: totalSupplyCall) -> Self {
6894                    ()
6895                }
6896            }
6897            #[automatically_derived]
6898            #[doc(hidden)]
6899            impl ::core::convert::From<UnderlyingRustTuple<'_>> for totalSupplyCall {
6900                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6901                    Self
6902                }
6903            }
6904        }
6905        {
6906            #[doc(hidden)]
6907            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
6908            #[doc(hidden)]
6909            type UnderlyingRustTuple<'a> = (
6910                alloy::sol_types::private::primitives::aliases::U256,
6911            );
6912            #[cfg(test)]
6913            #[allow(dead_code, unreachable_patterns)]
6914            fn _type_assertion(
6915                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6916            ) {
6917                match _t {
6918                    alloy_sol_types::private::AssertTypeEq::<
6919                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6920                    >(_) => {}
6921                }
6922            }
6923            #[automatically_derived]
6924            #[doc(hidden)]
6925            impl ::core::convert::From<totalSupplyReturn> for UnderlyingRustTuple<'_> {
6926                fn from(value: totalSupplyReturn) -> Self {
6927                    (value._0,)
6928                }
6929            }
6930            #[automatically_derived]
6931            #[doc(hidden)]
6932            impl ::core::convert::From<UnderlyingRustTuple<'_>> for totalSupplyReturn {
6933                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6934                    Self { _0: tuple.0 }
6935                }
6936            }
6937        }
6938        #[automatically_derived]
6939        impl alloy_sol_types::SolCall for totalSupplyCall {
6940            type Parameters<'a> = ();
6941            type Token<'a> = <Self::Parameters<
6942                'a,
6943            > as alloy_sol_types::SolType>::Token<'a>;
6944            type Return = alloy::sol_types::private::primitives::aliases::U256;
6945            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
6946            type ReturnToken<'a> = <Self::ReturnTuple<
6947                'a,
6948            > as alloy_sol_types::SolType>::Token<'a>;
6949            const SIGNATURE: &'static str = "totalSupply()";
6950            const SELECTOR: [u8; 4] = [24u8, 22u8, 13u8, 221u8];
6951            #[inline]
6952            fn new<'a>(
6953                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6954            ) -> Self {
6955                tuple.into()
6956            }
6957            #[inline]
6958            fn tokenize(&self) -> Self::Token<'_> {
6959                ()
6960            }
6961            #[inline]
6962            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6963                (
6964                    <alloy::sol_types::sol_data::Uint<
6965                        256,
6966                    > as alloy_sol_types::SolType>::tokenize(ret),
6967                )
6968            }
6969            #[inline]
6970            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6971                <Self::ReturnTuple<
6972                    '_,
6973                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6974                    .map(|r| {
6975                        let r: totalSupplyReturn = r.into();
6976                        r._0
6977                    })
6978            }
6979            #[inline]
6980            fn abi_decode_returns_validate(
6981                data: &[u8],
6982            ) -> alloy_sol_types::Result<Self::Return> {
6983                <Self::ReturnTuple<
6984                    '_,
6985                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6986                    .map(|r| {
6987                        let r: totalSupplyReturn = r.into();
6988                        r._0
6989                    })
6990            }
6991        }
6992    };
6993    #[derive(serde::Serialize, serde::Deserialize)]
6994    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6995    /**Function with signature `totalSupplyAt(uint128)` and selector `0x947975d9`.
6996```solidity
6997function totalSupplyAt(uint128 _blockNumber) external view returns (uint256);
6998```*/
6999    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7000    #[derive(Clone)]
7001    pub struct totalSupplyAtCall {
7002        #[allow(missing_docs)]
7003        pub _blockNumber: u128,
7004    }
7005    #[derive(serde::Serialize, serde::Deserialize)]
7006    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7007    ///Container type for the return parameters of the [`totalSupplyAt(uint128)`](totalSupplyAtCall) function.
7008    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7009    #[derive(Clone)]
7010    pub struct totalSupplyAtReturn {
7011        #[allow(missing_docs)]
7012        pub _0: alloy::sol_types::private::primitives::aliases::U256,
7013    }
7014    #[allow(
7015        non_camel_case_types,
7016        non_snake_case,
7017        clippy::pub_underscore_fields,
7018        clippy::style
7019    )]
7020    const _: () = {
7021        use alloy::sol_types as alloy_sol_types;
7022        {
7023            #[doc(hidden)]
7024            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<128>,);
7025            #[doc(hidden)]
7026            type UnderlyingRustTuple<'a> = (u128,);
7027            #[cfg(test)]
7028            #[allow(dead_code, unreachable_patterns)]
7029            fn _type_assertion(
7030                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7031            ) {
7032                match _t {
7033                    alloy_sol_types::private::AssertTypeEq::<
7034                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7035                    >(_) => {}
7036                }
7037            }
7038            #[automatically_derived]
7039            #[doc(hidden)]
7040            impl ::core::convert::From<totalSupplyAtCall> for UnderlyingRustTuple<'_> {
7041                fn from(value: totalSupplyAtCall) -> Self {
7042                    (value._blockNumber,)
7043                }
7044            }
7045            #[automatically_derived]
7046            #[doc(hidden)]
7047            impl ::core::convert::From<UnderlyingRustTuple<'_>> for totalSupplyAtCall {
7048                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7049                    Self { _blockNumber: tuple.0 }
7050                }
7051            }
7052        }
7053        {
7054            #[doc(hidden)]
7055            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
7056            #[doc(hidden)]
7057            type UnderlyingRustTuple<'a> = (
7058                alloy::sol_types::private::primitives::aliases::U256,
7059            );
7060            #[cfg(test)]
7061            #[allow(dead_code, unreachable_patterns)]
7062            fn _type_assertion(
7063                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7064            ) {
7065                match _t {
7066                    alloy_sol_types::private::AssertTypeEq::<
7067                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7068                    >(_) => {}
7069                }
7070            }
7071            #[automatically_derived]
7072            #[doc(hidden)]
7073            impl ::core::convert::From<totalSupplyAtReturn> for UnderlyingRustTuple<'_> {
7074                fn from(value: totalSupplyAtReturn) -> Self {
7075                    (value._0,)
7076                }
7077            }
7078            #[automatically_derived]
7079            #[doc(hidden)]
7080            impl ::core::convert::From<UnderlyingRustTuple<'_>> for totalSupplyAtReturn {
7081                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7082                    Self { _0: tuple.0 }
7083                }
7084            }
7085        }
7086        #[automatically_derived]
7087        impl alloy_sol_types::SolCall for totalSupplyAtCall {
7088            type Parameters<'a> = (alloy::sol_types::sol_data::Uint<128>,);
7089            type Token<'a> = <Self::Parameters<
7090                'a,
7091            > as alloy_sol_types::SolType>::Token<'a>;
7092            type Return = alloy::sol_types::private::primitives::aliases::U256;
7093            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
7094            type ReturnToken<'a> = <Self::ReturnTuple<
7095                'a,
7096            > as alloy_sol_types::SolType>::Token<'a>;
7097            const SIGNATURE: &'static str = "totalSupplyAt(uint128)";
7098            const SELECTOR: [u8; 4] = [148u8, 121u8, 117u8, 217u8];
7099            #[inline]
7100            fn new<'a>(
7101                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
7102            ) -> Self {
7103                tuple.into()
7104            }
7105            #[inline]
7106            fn tokenize(&self) -> Self::Token<'_> {
7107                (
7108                    <alloy::sol_types::sol_data::Uint<
7109                        128,
7110                    > as alloy_sol_types::SolType>::tokenize(&self._blockNumber),
7111                )
7112            }
7113            #[inline]
7114            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
7115                (
7116                    <alloy::sol_types::sol_data::Uint<
7117                        256,
7118                    > as alloy_sol_types::SolType>::tokenize(ret),
7119                )
7120            }
7121            #[inline]
7122            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
7123                <Self::ReturnTuple<
7124                    '_,
7125                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
7126                    .map(|r| {
7127                        let r: totalSupplyAtReturn = r.into();
7128                        r._0
7129                    })
7130            }
7131            #[inline]
7132            fn abi_decode_returns_validate(
7133                data: &[u8],
7134            ) -> alloy_sol_types::Result<Self::Return> {
7135                <Self::ReturnTuple<
7136                    '_,
7137                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
7138                    .map(|r| {
7139                        let r: totalSupplyAtReturn = r.into();
7140                        r._0
7141                    })
7142            }
7143        }
7144    };
7145    #[derive(serde::Serialize, serde::Deserialize)]
7146    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7147    /**Function with signature `totalSupplySnapshots(uint256)` and selector `0xb7d78b1a`.
7148```solidity
7149function totalSupplySnapshots(uint256) external view returns (uint128 fromBlock, uint128 value);
7150```*/
7151    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7152    #[derive(Clone)]
7153    pub struct totalSupplySnapshotsCall(
7154        pub alloy::sol_types::private::primitives::aliases::U256,
7155    );
7156    #[derive(serde::Serialize, serde::Deserialize)]
7157    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7158    ///Container type for the return parameters of the [`totalSupplySnapshots(uint256)`](totalSupplySnapshotsCall) function.
7159    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7160    #[derive(Clone)]
7161    pub struct totalSupplySnapshotsReturn {
7162        #[allow(missing_docs)]
7163        pub fromBlock: u128,
7164        #[allow(missing_docs)]
7165        pub value: u128,
7166    }
7167    #[allow(
7168        non_camel_case_types,
7169        non_snake_case,
7170        clippy::pub_underscore_fields,
7171        clippy::style
7172    )]
7173    const _: () = {
7174        use alloy::sol_types as alloy_sol_types;
7175        {
7176            #[doc(hidden)]
7177            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
7178            #[doc(hidden)]
7179            type UnderlyingRustTuple<'a> = (
7180                alloy::sol_types::private::primitives::aliases::U256,
7181            );
7182            #[cfg(test)]
7183            #[allow(dead_code, unreachable_patterns)]
7184            fn _type_assertion(
7185                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7186            ) {
7187                match _t {
7188                    alloy_sol_types::private::AssertTypeEq::<
7189                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7190                    >(_) => {}
7191                }
7192            }
7193            #[automatically_derived]
7194            #[doc(hidden)]
7195            impl ::core::convert::From<totalSupplySnapshotsCall>
7196            for UnderlyingRustTuple<'_> {
7197                fn from(value: totalSupplySnapshotsCall) -> Self {
7198                    (value.0,)
7199                }
7200            }
7201            #[automatically_derived]
7202            #[doc(hidden)]
7203            impl ::core::convert::From<UnderlyingRustTuple<'_>>
7204            for totalSupplySnapshotsCall {
7205                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7206                    Self(tuple.0)
7207                }
7208            }
7209        }
7210        {
7211            #[doc(hidden)]
7212            type UnderlyingSolTuple<'a> = (
7213                alloy::sol_types::sol_data::Uint<128>,
7214                alloy::sol_types::sol_data::Uint<128>,
7215            );
7216            #[doc(hidden)]
7217            type UnderlyingRustTuple<'a> = (u128, u128);
7218            #[cfg(test)]
7219            #[allow(dead_code, unreachable_patterns)]
7220            fn _type_assertion(
7221                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7222            ) {
7223                match _t {
7224                    alloy_sol_types::private::AssertTypeEq::<
7225                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7226                    >(_) => {}
7227                }
7228            }
7229            #[automatically_derived]
7230            #[doc(hidden)]
7231            impl ::core::convert::From<totalSupplySnapshotsReturn>
7232            for UnderlyingRustTuple<'_> {
7233                fn from(value: totalSupplySnapshotsReturn) -> Self {
7234                    (value.fromBlock, value.value)
7235                }
7236            }
7237            #[automatically_derived]
7238            #[doc(hidden)]
7239            impl ::core::convert::From<UnderlyingRustTuple<'_>>
7240            for totalSupplySnapshotsReturn {
7241                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7242                    Self {
7243                        fromBlock: tuple.0,
7244                        value: tuple.1,
7245                    }
7246                }
7247            }
7248        }
7249        impl totalSupplySnapshotsReturn {
7250            fn _tokenize(
7251                &self,
7252            ) -> <totalSupplySnapshotsCall as alloy_sol_types::SolCall>::ReturnToken<
7253                '_,
7254            > {
7255                (
7256                    <alloy::sol_types::sol_data::Uint<
7257                        128,
7258                    > as alloy_sol_types::SolType>::tokenize(&self.fromBlock),
7259                    <alloy::sol_types::sol_data::Uint<
7260                        128,
7261                    > as alloy_sol_types::SolType>::tokenize(&self.value),
7262                )
7263            }
7264        }
7265        #[automatically_derived]
7266        impl alloy_sol_types::SolCall for totalSupplySnapshotsCall {
7267            type Parameters<'a> = (alloy::sol_types::sol_data::Uint<256>,);
7268            type Token<'a> = <Self::Parameters<
7269                'a,
7270            > as alloy_sol_types::SolType>::Token<'a>;
7271            type Return = totalSupplySnapshotsReturn;
7272            type ReturnTuple<'a> = (
7273                alloy::sol_types::sol_data::Uint<128>,
7274                alloy::sol_types::sol_data::Uint<128>,
7275            );
7276            type ReturnToken<'a> = <Self::ReturnTuple<
7277                'a,
7278            > as alloy_sol_types::SolType>::Token<'a>;
7279            const SIGNATURE: &'static str = "totalSupplySnapshots(uint256)";
7280            const SELECTOR: [u8; 4] = [183u8, 215u8, 139u8, 26u8];
7281            #[inline]
7282            fn new<'a>(
7283                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
7284            ) -> Self {
7285                tuple.into()
7286            }
7287            #[inline]
7288            fn tokenize(&self) -> Self::Token<'_> {
7289                (
7290                    <alloy::sol_types::sol_data::Uint<
7291                        256,
7292                    > as alloy_sol_types::SolType>::tokenize(&self.0),
7293                )
7294            }
7295            #[inline]
7296            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
7297                totalSupplySnapshotsReturn::_tokenize(ret)
7298            }
7299            #[inline]
7300            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
7301                <Self::ReturnTuple<
7302                    '_,
7303                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
7304                    .map(Into::into)
7305            }
7306            #[inline]
7307            fn abi_decode_returns_validate(
7308                data: &[u8],
7309            ) -> alloy_sol_types::Result<Self::Return> {
7310                <Self::ReturnTuple<
7311                    '_,
7312                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
7313                    .map(Into::into)
7314            }
7315        }
7316    };
7317    #[derive(serde::Serialize, serde::Deserialize)]
7318    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7319    /**Function with signature `transfer(address,uint256)` and selector `0xa9059cbb`.
7320```solidity
7321function transfer(address recipient, uint256 amount) external returns (bool);
7322```*/
7323    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7324    #[derive(Clone)]
7325    pub struct transferCall {
7326        #[allow(missing_docs)]
7327        pub recipient: alloy::sol_types::private::Address,
7328        #[allow(missing_docs)]
7329        pub amount: alloy::sol_types::private::primitives::aliases::U256,
7330    }
7331    #[derive(serde::Serialize, serde::Deserialize)]
7332    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7333    ///Container type for the return parameters of the [`transfer(address,uint256)`](transferCall) function.
7334    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7335    #[derive(Clone)]
7336    pub struct transferReturn {
7337        #[allow(missing_docs)]
7338        pub _0: bool,
7339    }
7340    #[allow(
7341        non_camel_case_types,
7342        non_snake_case,
7343        clippy::pub_underscore_fields,
7344        clippy::style
7345    )]
7346    const _: () = {
7347        use alloy::sol_types as alloy_sol_types;
7348        {
7349            #[doc(hidden)]
7350            type UnderlyingSolTuple<'a> = (
7351                alloy::sol_types::sol_data::Address,
7352                alloy::sol_types::sol_data::Uint<256>,
7353            );
7354            #[doc(hidden)]
7355            type UnderlyingRustTuple<'a> = (
7356                alloy::sol_types::private::Address,
7357                alloy::sol_types::private::primitives::aliases::U256,
7358            );
7359            #[cfg(test)]
7360            #[allow(dead_code, unreachable_patterns)]
7361            fn _type_assertion(
7362                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7363            ) {
7364                match _t {
7365                    alloy_sol_types::private::AssertTypeEq::<
7366                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7367                    >(_) => {}
7368                }
7369            }
7370            #[automatically_derived]
7371            #[doc(hidden)]
7372            impl ::core::convert::From<transferCall> for UnderlyingRustTuple<'_> {
7373                fn from(value: transferCall) -> Self {
7374                    (value.recipient, value.amount)
7375                }
7376            }
7377            #[automatically_derived]
7378            #[doc(hidden)]
7379            impl ::core::convert::From<UnderlyingRustTuple<'_>> for transferCall {
7380                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7381                    Self {
7382                        recipient: tuple.0,
7383                        amount: tuple.1,
7384                    }
7385                }
7386            }
7387        }
7388        {
7389            #[doc(hidden)]
7390            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,);
7391            #[doc(hidden)]
7392            type UnderlyingRustTuple<'a> = (bool,);
7393            #[cfg(test)]
7394            #[allow(dead_code, unreachable_patterns)]
7395            fn _type_assertion(
7396                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7397            ) {
7398                match _t {
7399                    alloy_sol_types::private::AssertTypeEq::<
7400                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7401                    >(_) => {}
7402                }
7403            }
7404            #[automatically_derived]
7405            #[doc(hidden)]
7406            impl ::core::convert::From<transferReturn> for UnderlyingRustTuple<'_> {
7407                fn from(value: transferReturn) -> Self {
7408                    (value._0,)
7409                }
7410            }
7411            #[automatically_derived]
7412            #[doc(hidden)]
7413            impl ::core::convert::From<UnderlyingRustTuple<'_>> for transferReturn {
7414                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7415                    Self { _0: tuple.0 }
7416                }
7417            }
7418        }
7419        #[automatically_derived]
7420        impl alloy_sol_types::SolCall for transferCall {
7421            type Parameters<'a> = (
7422                alloy::sol_types::sol_data::Address,
7423                alloy::sol_types::sol_data::Uint<256>,
7424            );
7425            type Token<'a> = <Self::Parameters<
7426                'a,
7427            > as alloy_sol_types::SolType>::Token<'a>;
7428            type Return = bool;
7429            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,);
7430            type ReturnToken<'a> = <Self::ReturnTuple<
7431                'a,
7432            > as alloy_sol_types::SolType>::Token<'a>;
7433            const SIGNATURE: &'static str = "transfer(address,uint256)";
7434            const SELECTOR: [u8; 4] = [169u8, 5u8, 156u8, 187u8];
7435            #[inline]
7436            fn new<'a>(
7437                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
7438            ) -> Self {
7439                tuple.into()
7440            }
7441            #[inline]
7442            fn tokenize(&self) -> Self::Token<'_> {
7443                (
7444                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
7445                        &self.recipient,
7446                    ),
7447                    <alloy::sol_types::sol_data::Uint<
7448                        256,
7449                    > as alloy_sol_types::SolType>::tokenize(&self.amount),
7450                )
7451            }
7452            #[inline]
7453            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
7454                (
7455                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
7456                        ret,
7457                    ),
7458                )
7459            }
7460            #[inline]
7461            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
7462                <Self::ReturnTuple<
7463                    '_,
7464                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
7465                    .map(|r| {
7466                        let r: transferReturn = r.into();
7467                        r._0
7468                    })
7469            }
7470            #[inline]
7471            fn abi_decode_returns_validate(
7472                data: &[u8],
7473            ) -> alloy_sol_types::Result<Self::Return> {
7474                <Self::ReturnTuple<
7475                    '_,
7476                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
7477                    .map(|r| {
7478                        let r: transferReturn = r.into();
7479                        r._0
7480                    })
7481            }
7482        }
7483    };
7484    #[derive(serde::Serialize, serde::Deserialize)]
7485    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7486    /**Function with signature `transferFrom(address,address,uint256)` and selector `0x23b872dd`.
7487```solidity
7488function transferFrom(address holder, address recipient, uint256 amount) external returns (bool);
7489```*/
7490    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7491    #[derive(Clone)]
7492    pub struct transferFromCall {
7493        #[allow(missing_docs)]
7494        pub holder: alloy::sol_types::private::Address,
7495        #[allow(missing_docs)]
7496        pub recipient: alloy::sol_types::private::Address,
7497        #[allow(missing_docs)]
7498        pub amount: alloy::sol_types::private::primitives::aliases::U256,
7499    }
7500    #[derive(serde::Serialize, serde::Deserialize)]
7501    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7502    ///Container type for the return parameters of the [`transferFrom(address,address,uint256)`](transferFromCall) function.
7503    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7504    #[derive(Clone)]
7505    pub struct transferFromReturn {
7506        #[allow(missing_docs)]
7507        pub _0: bool,
7508    }
7509    #[allow(
7510        non_camel_case_types,
7511        non_snake_case,
7512        clippy::pub_underscore_fields,
7513        clippy::style
7514    )]
7515    const _: () = {
7516        use alloy::sol_types as alloy_sol_types;
7517        {
7518            #[doc(hidden)]
7519            type UnderlyingSolTuple<'a> = (
7520                alloy::sol_types::sol_data::Address,
7521                alloy::sol_types::sol_data::Address,
7522                alloy::sol_types::sol_data::Uint<256>,
7523            );
7524            #[doc(hidden)]
7525            type UnderlyingRustTuple<'a> = (
7526                alloy::sol_types::private::Address,
7527                alloy::sol_types::private::Address,
7528                alloy::sol_types::private::primitives::aliases::U256,
7529            );
7530            #[cfg(test)]
7531            #[allow(dead_code, unreachable_patterns)]
7532            fn _type_assertion(
7533                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7534            ) {
7535                match _t {
7536                    alloy_sol_types::private::AssertTypeEq::<
7537                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7538                    >(_) => {}
7539                }
7540            }
7541            #[automatically_derived]
7542            #[doc(hidden)]
7543            impl ::core::convert::From<transferFromCall> for UnderlyingRustTuple<'_> {
7544                fn from(value: transferFromCall) -> Self {
7545                    (value.holder, value.recipient, value.amount)
7546                }
7547            }
7548            #[automatically_derived]
7549            #[doc(hidden)]
7550            impl ::core::convert::From<UnderlyingRustTuple<'_>> for transferFromCall {
7551                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7552                    Self {
7553                        holder: tuple.0,
7554                        recipient: tuple.1,
7555                        amount: tuple.2,
7556                    }
7557                }
7558            }
7559        }
7560        {
7561            #[doc(hidden)]
7562            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,);
7563            #[doc(hidden)]
7564            type UnderlyingRustTuple<'a> = (bool,);
7565            #[cfg(test)]
7566            #[allow(dead_code, unreachable_patterns)]
7567            fn _type_assertion(
7568                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7569            ) {
7570                match _t {
7571                    alloy_sol_types::private::AssertTypeEq::<
7572                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7573                    >(_) => {}
7574                }
7575            }
7576            #[automatically_derived]
7577            #[doc(hidden)]
7578            impl ::core::convert::From<transferFromReturn> for UnderlyingRustTuple<'_> {
7579                fn from(value: transferFromReturn) -> Self {
7580                    (value._0,)
7581                }
7582            }
7583            #[automatically_derived]
7584            #[doc(hidden)]
7585            impl ::core::convert::From<UnderlyingRustTuple<'_>> for transferFromReturn {
7586                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7587                    Self { _0: tuple.0 }
7588                }
7589            }
7590        }
7591        #[automatically_derived]
7592        impl alloy_sol_types::SolCall for transferFromCall {
7593            type Parameters<'a> = (
7594                alloy::sol_types::sol_data::Address,
7595                alloy::sol_types::sol_data::Address,
7596                alloy::sol_types::sol_data::Uint<256>,
7597            );
7598            type Token<'a> = <Self::Parameters<
7599                'a,
7600            > as alloy_sol_types::SolType>::Token<'a>;
7601            type Return = bool;
7602            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,);
7603            type ReturnToken<'a> = <Self::ReturnTuple<
7604                'a,
7605            > as alloy_sol_types::SolType>::Token<'a>;
7606            const SIGNATURE: &'static str = "transferFrom(address,address,uint256)";
7607            const SELECTOR: [u8; 4] = [35u8, 184u8, 114u8, 221u8];
7608            #[inline]
7609            fn new<'a>(
7610                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
7611            ) -> Self {
7612                tuple.into()
7613            }
7614            #[inline]
7615            fn tokenize(&self) -> Self::Token<'_> {
7616                (
7617                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
7618                        &self.holder,
7619                    ),
7620                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
7621                        &self.recipient,
7622                    ),
7623                    <alloy::sol_types::sol_data::Uint<
7624                        256,
7625                    > as alloy_sol_types::SolType>::tokenize(&self.amount),
7626                )
7627            }
7628            #[inline]
7629            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
7630                (
7631                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
7632                        ret,
7633                    ),
7634                )
7635            }
7636            #[inline]
7637            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
7638                <Self::ReturnTuple<
7639                    '_,
7640                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
7641                    .map(|r| {
7642                        let r: transferFromReturn = r.into();
7643                        r._0
7644                    })
7645            }
7646            #[inline]
7647            fn abi_decode_returns_validate(
7648                data: &[u8],
7649            ) -> alloy_sol_types::Result<Self::Return> {
7650                <Self::ReturnTuple<
7651                    '_,
7652                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
7653                    .map(|r| {
7654                        let r: transferFromReturn = r.into();
7655                        r._0
7656                    })
7657            }
7658        }
7659    };
7660    ///Container for all the [`HoprToken`](self) function calls.
7661    #[derive(serde::Serialize, serde::Deserialize)]
7662    #[derive()]
7663    pub enum HoprTokenCalls {
7664        #[allow(missing_docs)]
7665        DEFAULT_ADMIN_ROLE(DEFAULT_ADMIN_ROLECall),
7666        #[allow(missing_docs)]
7667        MINTER_ROLE(MINTER_ROLECall),
7668        #[allow(missing_docs)]
7669        accountSnapshots(accountSnapshotsCall),
7670        #[allow(missing_docs)]
7671        allowance(allowanceCall),
7672        #[allow(missing_docs)]
7673        approve(approveCall),
7674        #[allow(missing_docs)]
7675        authorizeOperator(authorizeOperatorCall),
7676        #[allow(missing_docs)]
7677        balanceOf(balanceOfCall),
7678        #[allow(missing_docs)]
7679        balanceOfAt(balanceOfAtCall),
7680        #[allow(missing_docs)]
7681        burn(burnCall),
7682        #[allow(missing_docs)]
7683        decimals(decimalsCall),
7684        #[allow(missing_docs)]
7685        defaultOperators(defaultOperatorsCall),
7686        #[allow(missing_docs)]
7687        getRoleAdmin(getRoleAdminCall),
7688        #[allow(missing_docs)]
7689        getRoleMember(getRoleMemberCall),
7690        #[allow(missing_docs)]
7691        getRoleMemberCount(getRoleMemberCountCall),
7692        #[allow(missing_docs)]
7693        grantRole(grantRoleCall),
7694        #[allow(missing_docs)]
7695        granularity(granularityCall),
7696        #[allow(missing_docs)]
7697        hasRole(hasRoleCall),
7698        #[allow(missing_docs)]
7699        isOperatorFor(isOperatorForCall),
7700        #[allow(missing_docs)]
7701        mint(mintCall),
7702        #[allow(missing_docs)]
7703        name(nameCall),
7704        #[allow(missing_docs)]
7705        operatorBurn(operatorBurnCall),
7706        #[allow(missing_docs)]
7707        operatorSend(operatorSendCall),
7708        #[allow(missing_docs)]
7709        renounceRole(renounceRoleCall),
7710        #[allow(missing_docs)]
7711        revokeOperator(revokeOperatorCall),
7712        #[allow(missing_docs)]
7713        revokeRole(revokeRoleCall),
7714        #[allow(missing_docs)]
7715        send(sendCall),
7716        #[allow(missing_docs)]
7717        supportsInterface(supportsInterfaceCall),
7718        #[allow(missing_docs)]
7719        symbol(symbolCall),
7720        #[allow(missing_docs)]
7721        totalSupply(totalSupplyCall),
7722        #[allow(missing_docs)]
7723        totalSupplyAt(totalSupplyAtCall),
7724        #[allow(missing_docs)]
7725        totalSupplySnapshots(totalSupplySnapshotsCall),
7726        #[allow(missing_docs)]
7727        transfer(transferCall),
7728        #[allow(missing_docs)]
7729        transferFrom(transferFromCall),
7730    }
7731    #[automatically_derived]
7732    impl HoprTokenCalls {
7733        /// All the selectors of this enum.
7734        ///
7735        /// Note that the selectors might not be in the same order as the variants.
7736        /// No guarantees are made about the order of the selectors.
7737        ///
7738        /// Prefer using `SolInterface` methods instead.
7739        pub const SELECTORS: &'static [[u8; 4usize]] = &[
7740            [1u8, 255u8, 201u8, 167u8],
7741            [6u8, 228u8, 133u8, 56u8],
7742            [6u8, 253u8, 222u8, 3u8],
7743            [9u8, 94u8, 167u8, 179u8],
7744            [24u8, 22u8, 13u8, 221u8],
7745            [35u8, 184u8, 114u8, 221u8],
7746            [36u8, 138u8, 156u8, 163u8],
7747            [36u8, 151u8, 174u8, 230u8],
7748            [47u8, 47u8, 241u8, 93u8],
7749            [49u8, 60u8, 229u8, 103u8],
7750            [54u8, 86u8, 138u8, 190u8],
7751            [85u8, 111u8, 13u8, 199u8],
7752            [98u8, 173u8, 27u8, 131u8],
7753            [112u8, 160u8, 130u8, 49u8],
7754            [144u8, 16u8, 208u8, 124u8],
7755            [145u8, 209u8, 72u8, 84u8],
7756            [148u8, 121u8, 117u8, 217u8],
7757            [149u8, 155u8, 140u8, 63u8],
7758            [149u8, 216u8, 155u8, 65u8],
7759            [155u8, 217u8, 187u8, 198u8],
7760            [162u8, 23u8, 253u8, 223u8],
7761            [169u8, 5u8, 156u8, 187u8],
7762            [183u8, 215u8, 139u8, 26u8],
7763            [202u8, 21u8, 200u8, 115u8],
7764            [213u8, 57u8, 19u8, 147u8],
7765            [213u8, 71u8, 116u8, 31u8],
7766            [217u8, 91u8, 99u8, 113u8],
7767            [220u8, 220u8, 125u8, 208u8],
7768            [221u8, 98u8, 237u8, 62u8],
7769            [247u8, 114u8, 160u8, 146u8],
7770            [250u8, 216u8, 179u8, 42u8],
7771            [252u8, 103u8, 60u8, 79u8],
7772            [254u8, 157u8, 147u8, 3u8],
7773        ];
7774    }
7775    #[automatically_derived]
7776    impl alloy_sol_types::SolInterface for HoprTokenCalls {
7777        const NAME: &'static str = "HoprTokenCalls";
7778        const MIN_DATA_LENGTH: usize = 0usize;
7779        const COUNT: usize = 33usize;
7780        #[inline]
7781        fn selector(&self) -> [u8; 4] {
7782            match self {
7783                Self::DEFAULT_ADMIN_ROLE(_) => {
7784                    <DEFAULT_ADMIN_ROLECall as alloy_sol_types::SolCall>::SELECTOR
7785                }
7786                Self::MINTER_ROLE(_) => {
7787                    <MINTER_ROLECall as alloy_sol_types::SolCall>::SELECTOR
7788                }
7789                Self::accountSnapshots(_) => {
7790                    <accountSnapshotsCall as alloy_sol_types::SolCall>::SELECTOR
7791                }
7792                Self::allowance(_) => {
7793                    <allowanceCall as alloy_sol_types::SolCall>::SELECTOR
7794                }
7795                Self::approve(_) => <approveCall as alloy_sol_types::SolCall>::SELECTOR,
7796                Self::authorizeOperator(_) => {
7797                    <authorizeOperatorCall as alloy_sol_types::SolCall>::SELECTOR
7798                }
7799                Self::balanceOf(_) => {
7800                    <balanceOfCall as alloy_sol_types::SolCall>::SELECTOR
7801                }
7802                Self::balanceOfAt(_) => {
7803                    <balanceOfAtCall as alloy_sol_types::SolCall>::SELECTOR
7804                }
7805                Self::burn(_) => <burnCall as alloy_sol_types::SolCall>::SELECTOR,
7806                Self::decimals(_) => <decimalsCall as alloy_sol_types::SolCall>::SELECTOR,
7807                Self::defaultOperators(_) => {
7808                    <defaultOperatorsCall as alloy_sol_types::SolCall>::SELECTOR
7809                }
7810                Self::getRoleAdmin(_) => {
7811                    <getRoleAdminCall as alloy_sol_types::SolCall>::SELECTOR
7812                }
7813                Self::getRoleMember(_) => {
7814                    <getRoleMemberCall as alloy_sol_types::SolCall>::SELECTOR
7815                }
7816                Self::getRoleMemberCount(_) => {
7817                    <getRoleMemberCountCall as alloy_sol_types::SolCall>::SELECTOR
7818                }
7819                Self::grantRole(_) => {
7820                    <grantRoleCall as alloy_sol_types::SolCall>::SELECTOR
7821                }
7822                Self::granularity(_) => {
7823                    <granularityCall as alloy_sol_types::SolCall>::SELECTOR
7824                }
7825                Self::hasRole(_) => <hasRoleCall as alloy_sol_types::SolCall>::SELECTOR,
7826                Self::isOperatorFor(_) => {
7827                    <isOperatorForCall as alloy_sol_types::SolCall>::SELECTOR
7828                }
7829                Self::mint(_) => <mintCall as alloy_sol_types::SolCall>::SELECTOR,
7830                Self::name(_) => <nameCall as alloy_sol_types::SolCall>::SELECTOR,
7831                Self::operatorBurn(_) => {
7832                    <operatorBurnCall as alloy_sol_types::SolCall>::SELECTOR
7833                }
7834                Self::operatorSend(_) => {
7835                    <operatorSendCall as alloy_sol_types::SolCall>::SELECTOR
7836                }
7837                Self::renounceRole(_) => {
7838                    <renounceRoleCall as alloy_sol_types::SolCall>::SELECTOR
7839                }
7840                Self::revokeOperator(_) => {
7841                    <revokeOperatorCall as alloy_sol_types::SolCall>::SELECTOR
7842                }
7843                Self::revokeRole(_) => {
7844                    <revokeRoleCall as alloy_sol_types::SolCall>::SELECTOR
7845                }
7846                Self::send(_) => <sendCall as alloy_sol_types::SolCall>::SELECTOR,
7847                Self::supportsInterface(_) => {
7848                    <supportsInterfaceCall as alloy_sol_types::SolCall>::SELECTOR
7849                }
7850                Self::symbol(_) => <symbolCall as alloy_sol_types::SolCall>::SELECTOR,
7851                Self::totalSupply(_) => {
7852                    <totalSupplyCall as alloy_sol_types::SolCall>::SELECTOR
7853                }
7854                Self::totalSupplyAt(_) => {
7855                    <totalSupplyAtCall as alloy_sol_types::SolCall>::SELECTOR
7856                }
7857                Self::totalSupplySnapshots(_) => {
7858                    <totalSupplySnapshotsCall as alloy_sol_types::SolCall>::SELECTOR
7859                }
7860                Self::transfer(_) => <transferCall as alloy_sol_types::SolCall>::SELECTOR,
7861                Self::transferFrom(_) => {
7862                    <transferFromCall as alloy_sol_types::SolCall>::SELECTOR
7863                }
7864            }
7865        }
7866        #[inline]
7867        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
7868            Self::SELECTORS.get(i).copied()
7869        }
7870        #[inline]
7871        fn valid_selector(selector: [u8; 4]) -> bool {
7872            Self::SELECTORS.binary_search(&selector).is_ok()
7873        }
7874        #[inline]
7875        #[allow(non_snake_case)]
7876        fn abi_decode_raw(
7877            selector: [u8; 4],
7878            data: &[u8],
7879        ) -> alloy_sol_types::Result<Self> {
7880            static DECODE_SHIMS: &[fn(
7881                &[u8],
7882            ) -> alloy_sol_types::Result<HoprTokenCalls>] = &[
7883                {
7884                    fn supportsInterface(
7885                        data: &[u8],
7886                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
7887                        <supportsInterfaceCall as alloy_sol_types::SolCall>::abi_decode_raw(
7888                                data,
7889                            )
7890                            .map(HoprTokenCalls::supportsInterface)
7891                    }
7892                    supportsInterface
7893                },
7894                {
7895                    fn defaultOperators(
7896                        data: &[u8],
7897                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
7898                        <defaultOperatorsCall as alloy_sol_types::SolCall>::abi_decode_raw(
7899                                data,
7900                            )
7901                            .map(HoprTokenCalls::defaultOperators)
7902                    }
7903                    defaultOperators
7904                },
7905                {
7906                    fn name(data: &[u8]) -> alloy_sol_types::Result<HoprTokenCalls> {
7907                        <nameCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
7908                            .map(HoprTokenCalls::name)
7909                    }
7910                    name
7911                },
7912                {
7913                    fn approve(data: &[u8]) -> alloy_sol_types::Result<HoprTokenCalls> {
7914                        <approveCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
7915                            .map(HoprTokenCalls::approve)
7916                    }
7917                    approve
7918                },
7919                {
7920                    fn totalSupply(
7921                        data: &[u8],
7922                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
7923                        <totalSupplyCall as alloy_sol_types::SolCall>::abi_decode_raw(
7924                                data,
7925                            )
7926                            .map(HoprTokenCalls::totalSupply)
7927                    }
7928                    totalSupply
7929                },
7930                {
7931                    fn transferFrom(
7932                        data: &[u8],
7933                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
7934                        <transferFromCall as alloy_sol_types::SolCall>::abi_decode_raw(
7935                                data,
7936                            )
7937                            .map(HoprTokenCalls::transferFrom)
7938                    }
7939                    transferFrom
7940                },
7941                {
7942                    fn getRoleAdmin(
7943                        data: &[u8],
7944                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
7945                        <getRoleAdminCall as alloy_sol_types::SolCall>::abi_decode_raw(
7946                                data,
7947                            )
7948                            .map(HoprTokenCalls::getRoleAdmin)
7949                    }
7950                    getRoleAdmin
7951                },
7952                {
7953                    fn accountSnapshots(
7954                        data: &[u8],
7955                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
7956                        <accountSnapshotsCall as alloy_sol_types::SolCall>::abi_decode_raw(
7957                                data,
7958                            )
7959                            .map(HoprTokenCalls::accountSnapshots)
7960                    }
7961                    accountSnapshots
7962                },
7963                {
7964                    fn grantRole(
7965                        data: &[u8],
7966                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
7967                        <grantRoleCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
7968                            .map(HoprTokenCalls::grantRole)
7969                    }
7970                    grantRole
7971                },
7972                {
7973                    fn decimals(data: &[u8]) -> alloy_sol_types::Result<HoprTokenCalls> {
7974                        <decimalsCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
7975                            .map(HoprTokenCalls::decimals)
7976                    }
7977                    decimals
7978                },
7979                {
7980                    fn renounceRole(
7981                        data: &[u8],
7982                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
7983                        <renounceRoleCall as alloy_sol_types::SolCall>::abi_decode_raw(
7984                                data,
7985                            )
7986                            .map(HoprTokenCalls::renounceRole)
7987                    }
7988                    renounceRole
7989                },
7990                {
7991                    fn granularity(
7992                        data: &[u8],
7993                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
7994                        <granularityCall as alloy_sol_types::SolCall>::abi_decode_raw(
7995                                data,
7996                            )
7997                            .map(HoprTokenCalls::granularity)
7998                    }
7999                    granularity
8000                },
8001                {
8002                    fn operatorSend(
8003                        data: &[u8],
8004                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8005                        <operatorSendCall as alloy_sol_types::SolCall>::abi_decode_raw(
8006                                data,
8007                            )
8008                            .map(HoprTokenCalls::operatorSend)
8009                    }
8010                    operatorSend
8011                },
8012                {
8013                    fn balanceOf(
8014                        data: &[u8],
8015                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8016                        <balanceOfCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
8017                            .map(HoprTokenCalls::balanceOf)
8018                    }
8019                    balanceOf
8020                },
8021                {
8022                    fn getRoleMember(
8023                        data: &[u8],
8024                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8025                        <getRoleMemberCall as alloy_sol_types::SolCall>::abi_decode_raw(
8026                                data,
8027                            )
8028                            .map(HoprTokenCalls::getRoleMember)
8029                    }
8030                    getRoleMember
8031                },
8032                {
8033                    fn hasRole(data: &[u8]) -> alloy_sol_types::Result<HoprTokenCalls> {
8034                        <hasRoleCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
8035                            .map(HoprTokenCalls::hasRole)
8036                    }
8037                    hasRole
8038                },
8039                {
8040                    fn totalSupplyAt(
8041                        data: &[u8],
8042                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8043                        <totalSupplyAtCall as alloy_sol_types::SolCall>::abi_decode_raw(
8044                                data,
8045                            )
8046                            .map(HoprTokenCalls::totalSupplyAt)
8047                    }
8048                    totalSupplyAt
8049                },
8050                {
8051                    fn authorizeOperator(
8052                        data: &[u8],
8053                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8054                        <authorizeOperatorCall as alloy_sol_types::SolCall>::abi_decode_raw(
8055                                data,
8056                            )
8057                            .map(HoprTokenCalls::authorizeOperator)
8058                    }
8059                    authorizeOperator
8060                },
8061                {
8062                    fn symbol(data: &[u8]) -> alloy_sol_types::Result<HoprTokenCalls> {
8063                        <symbolCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
8064                            .map(HoprTokenCalls::symbol)
8065                    }
8066                    symbol
8067                },
8068                {
8069                    fn send(data: &[u8]) -> alloy_sol_types::Result<HoprTokenCalls> {
8070                        <sendCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
8071                            .map(HoprTokenCalls::send)
8072                    }
8073                    send
8074                },
8075                {
8076                    fn DEFAULT_ADMIN_ROLE(
8077                        data: &[u8],
8078                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8079                        <DEFAULT_ADMIN_ROLECall as alloy_sol_types::SolCall>::abi_decode_raw(
8080                                data,
8081                            )
8082                            .map(HoprTokenCalls::DEFAULT_ADMIN_ROLE)
8083                    }
8084                    DEFAULT_ADMIN_ROLE
8085                },
8086                {
8087                    fn transfer(data: &[u8]) -> alloy_sol_types::Result<HoprTokenCalls> {
8088                        <transferCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
8089                            .map(HoprTokenCalls::transfer)
8090                    }
8091                    transfer
8092                },
8093                {
8094                    fn totalSupplySnapshots(
8095                        data: &[u8],
8096                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8097                        <totalSupplySnapshotsCall as alloy_sol_types::SolCall>::abi_decode_raw(
8098                                data,
8099                            )
8100                            .map(HoprTokenCalls::totalSupplySnapshots)
8101                    }
8102                    totalSupplySnapshots
8103                },
8104                {
8105                    fn getRoleMemberCount(
8106                        data: &[u8],
8107                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8108                        <getRoleMemberCountCall as alloy_sol_types::SolCall>::abi_decode_raw(
8109                                data,
8110                            )
8111                            .map(HoprTokenCalls::getRoleMemberCount)
8112                    }
8113                    getRoleMemberCount
8114                },
8115                {
8116                    fn MINTER_ROLE(
8117                        data: &[u8],
8118                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8119                        <MINTER_ROLECall as alloy_sol_types::SolCall>::abi_decode_raw(
8120                                data,
8121                            )
8122                            .map(HoprTokenCalls::MINTER_ROLE)
8123                    }
8124                    MINTER_ROLE
8125                },
8126                {
8127                    fn revokeRole(
8128                        data: &[u8],
8129                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8130                        <revokeRoleCall as alloy_sol_types::SolCall>::abi_decode_raw(
8131                                data,
8132                            )
8133                            .map(HoprTokenCalls::revokeRole)
8134                    }
8135                    revokeRole
8136                },
8137                {
8138                    fn isOperatorFor(
8139                        data: &[u8],
8140                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8141                        <isOperatorForCall as alloy_sol_types::SolCall>::abi_decode_raw(
8142                                data,
8143                            )
8144                            .map(HoprTokenCalls::isOperatorFor)
8145                    }
8146                    isOperatorFor
8147                },
8148                {
8149                    fn mint(data: &[u8]) -> alloy_sol_types::Result<HoprTokenCalls> {
8150                        <mintCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
8151                            .map(HoprTokenCalls::mint)
8152                    }
8153                    mint
8154                },
8155                {
8156                    fn allowance(
8157                        data: &[u8],
8158                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8159                        <allowanceCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
8160                            .map(HoprTokenCalls::allowance)
8161                    }
8162                    allowance
8163                },
8164                {
8165                    fn balanceOfAt(
8166                        data: &[u8],
8167                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8168                        <balanceOfAtCall as alloy_sol_types::SolCall>::abi_decode_raw(
8169                                data,
8170                            )
8171                            .map(HoprTokenCalls::balanceOfAt)
8172                    }
8173                    balanceOfAt
8174                },
8175                {
8176                    fn revokeOperator(
8177                        data: &[u8],
8178                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8179                        <revokeOperatorCall as alloy_sol_types::SolCall>::abi_decode_raw(
8180                                data,
8181                            )
8182                            .map(HoprTokenCalls::revokeOperator)
8183                    }
8184                    revokeOperator
8185                },
8186                {
8187                    fn operatorBurn(
8188                        data: &[u8],
8189                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8190                        <operatorBurnCall as alloy_sol_types::SolCall>::abi_decode_raw(
8191                                data,
8192                            )
8193                            .map(HoprTokenCalls::operatorBurn)
8194                    }
8195                    operatorBurn
8196                },
8197                {
8198                    fn burn(data: &[u8]) -> alloy_sol_types::Result<HoprTokenCalls> {
8199                        <burnCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
8200                            .map(HoprTokenCalls::burn)
8201                    }
8202                    burn
8203                },
8204            ];
8205            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
8206                return Err(
8207                    alloy_sol_types::Error::unknown_selector(
8208                        <Self as alloy_sol_types::SolInterface>::NAME,
8209                        selector,
8210                    ),
8211                );
8212            };
8213            DECODE_SHIMS[idx](data)
8214        }
8215        #[inline]
8216        #[allow(non_snake_case)]
8217        fn abi_decode_raw_validate(
8218            selector: [u8; 4],
8219            data: &[u8],
8220        ) -> alloy_sol_types::Result<Self> {
8221            static DECODE_VALIDATE_SHIMS: &[fn(
8222                &[u8],
8223            ) -> alloy_sol_types::Result<HoprTokenCalls>] = &[
8224                {
8225                    fn supportsInterface(
8226                        data: &[u8],
8227                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8228                        <supportsInterfaceCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8229                                data,
8230                            )
8231                            .map(HoprTokenCalls::supportsInterface)
8232                    }
8233                    supportsInterface
8234                },
8235                {
8236                    fn defaultOperators(
8237                        data: &[u8],
8238                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8239                        <defaultOperatorsCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8240                                data,
8241                            )
8242                            .map(HoprTokenCalls::defaultOperators)
8243                    }
8244                    defaultOperators
8245                },
8246                {
8247                    fn name(data: &[u8]) -> alloy_sol_types::Result<HoprTokenCalls> {
8248                        <nameCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8249                                data,
8250                            )
8251                            .map(HoprTokenCalls::name)
8252                    }
8253                    name
8254                },
8255                {
8256                    fn approve(data: &[u8]) -> alloy_sol_types::Result<HoprTokenCalls> {
8257                        <approveCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8258                                data,
8259                            )
8260                            .map(HoprTokenCalls::approve)
8261                    }
8262                    approve
8263                },
8264                {
8265                    fn totalSupply(
8266                        data: &[u8],
8267                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8268                        <totalSupplyCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8269                                data,
8270                            )
8271                            .map(HoprTokenCalls::totalSupply)
8272                    }
8273                    totalSupply
8274                },
8275                {
8276                    fn transferFrom(
8277                        data: &[u8],
8278                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8279                        <transferFromCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8280                                data,
8281                            )
8282                            .map(HoprTokenCalls::transferFrom)
8283                    }
8284                    transferFrom
8285                },
8286                {
8287                    fn getRoleAdmin(
8288                        data: &[u8],
8289                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8290                        <getRoleAdminCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8291                                data,
8292                            )
8293                            .map(HoprTokenCalls::getRoleAdmin)
8294                    }
8295                    getRoleAdmin
8296                },
8297                {
8298                    fn accountSnapshots(
8299                        data: &[u8],
8300                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8301                        <accountSnapshotsCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8302                                data,
8303                            )
8304                            .map(HoprTokenCalls::accountSnapshots)
8305                    }
8306                    accountSnapshots
8307                },
8308                {
8309                    fn grantRole(
8310                        data: &[u8],
8311                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8312                        <grantRoleCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8313                                data,
8314                            )
8315                            .map(HoprTokenCalls::grantRole)
8316                    }
8317                    grantRole
8318                },
8319                {
8320                    fn decimals(data: &[u8]) -> alloy_sol_types::Result<HoprTokenCalls> {
8321                        <decimalsCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8322                                data,
8323                            )
8324                            .map(HoprTokenCalls::decimals)
8325                    }
8326                    decimals
8327                },
8328                {
8329                    fn renounceRole(
8330                        data: &[u8],
8331                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8332                        <renounceRoleCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8333                                data,
8334                            )
8335                            .map(HoprTokenCalls::renounceRole)
8336                    }
8337                    renounceRole
8338                },
8339                {
8340                    fn granularity(
8341                        data: &[u8],
8342                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8343                        <granularityCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8344                                data,
8345                            )
8346                            .map(HoprTokenCalls::granularity)
8347                    }
8348                    granularity
8349                },
8350                {
8351                    fn operatorSend(
8352                        data: &[u8],
8353                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8354                        <operatorSendCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8355                                data,
8356                            )
8357                            .map(HoprTokenCalls::operatorSend)
8358                    }
8359                    operatorSend
8360                },
8361                {
8362                    fn balanceOf(
8363                        data: &[u8],
8364                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8365                        <balanceOfCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8366                                data,
8367                            )
8368                            .map(HoprTokenCalls::balanceOf)
8369                    }
8370                    balanceOf
8371                },
8372                {
8373                    fn getRoleMember(
8374                        data: &[u8],
8375                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8376                        <getRoleMemberCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8377                                data,
8378                            )
8379                            .map(HoprTokenCalls::getRoleMember)
8380                    }
8381                    getRoleMember
8382                },
8383                {
8384                    fn hasRole(data: &[u8]) -> alloy_sol_types::Result<HoprTokenCalls> {
8385                        <hasRoleCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8386                                data,
8387                            )
8388                            .map(HoprTokenCalls::hasRole)
8389                    }
8390                    hasRole
8391                },
8392                {
8393                    fn totalSupplyAt(
8394                        data: &[u8],
8395                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8396                        <totalSupplyAtCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8397                                data,
8398                            )
8399                            .map(HoprTokenCalls::totalSupplyAt)
8400                    }
8401                    totalSupplyAt
8402                },
8403                {
8404                    fn authorizeOperator(
8405                        data: &[u8],
8406                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8407                        <authorizeOperatorCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8408                                data,
8409                            )
8410                            .map(HoprTokenCalls::authorizeOperator)
8411                    }
8412                    authorizeOperator
8413                },
8414                {
8415                    fn symbol(data: &[u8]) -> alloy_sol_types::Result<HoprTokenCalls> {
8416                        <symbolCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8417                                data,
8418                            )
8419                            .map(HoprTokenCalls::symbol)
8420                    }
8421                    symbol
8422                },
8423                {
8424                    fn send(data: &[u8]) -> alloy_sol_types::Result<HoprTokenCalls> {
8425                        <sendCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8426                                data,
8427                            )
8428                            .map(HoprTokenCalls::send)
8429                    }
8430                    send
8431                },
8432                {
8433                    fn DEFAULT_ADMIN_ROLE(
8434                        data: &[u8],
8435                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8436                        <DEFAULT_ADMIN_ROLECall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8437                                data,
8438                            )
8439                            .map(HoprTokenCalls::DEFAULT_ADMIN_ROLE)
8440                    }
8441                    DEFAULT_ADMIN_ROLE
8442                },
8443                {
8444                    fn transfer(data: &[u8]) -> alloy_sol_types::Result<HoprTokenCalls> {
8445                        <transferCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8446                                data,
8447                            )
8448                            .map(HoprTokenCalls::transfer)
8449                    }
8450                    transfer
8451                },
8452                {
8453                    fn totalSupplySnapshots(
8454                        data: &[u8],
8455                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8456                        <totalSupplySnapshotsCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8457                                data,
8458                            )
8459                            .map(HoprTokenCalls::totalSupplySnapshots)
8460                    }
8461                    totalSupplySnapshots
8462                },
8463                {
8464                    fn getRoleMemberCount(
8465                        data: &[u8],
8466                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8467                        <getRoleMemberCountCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8468                                data,
8469                            )
8470                            .map(HoprTokenCalls::getRoleMemberCount)
8471                    }
8472                    getRoleMemberCount
8473                },
8474                {
8475                    fn MINTER_ROLE(
8476                        data: &[u8],
8477                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8478                        <MINTER_ROLECall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8479                                data,
8480                            )
8481                            .map(HoprTokenCalls::MINTER_ROLE)
8482                    }
8483                    MINTER_ROLE
8484                },
8485                {
8486                    fn revokeRole(
8487                        data: &[u8],
8488                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8489                        <revokeRoleCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8490                                data,
8491                            )
8492                            .map(HoprTokenCalls::revokeRole)
8493                    }
8494                    revokeRole
8495                },
8496                {
8497                    fn isOperatorFor(
8498                        data: &[u8],
8499                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8500                        <isOperatorForCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8501                                data,
8502                            )
8503                            .map(HoprTokenCalls::isOperatorFor)
8504                    }
8505                    isOperatorFor
8506                },
8507                {
8508                    fn mint(data: &[u8]) -> alloy_sol_types::Result<HoprTokenCalls> {
8509                        <mintCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8510                                data,
8511                            )
8512                            .map(HoprTokenCalls::mint)
8513                    }
8514                    mint
8515                },
8516                {
8517                    fn allowance(
8518                        data: &[u8],
8519                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8520                        <allowanceCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8521                                data,
8522                            )
8523                            .map(HoprTokenCalls::allowance)
8524                    }
8525                    allowance
8526                },
8527                {
8528                    fn balanceOfAt(
8529                        data: &[u8],
8530                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8531                        <balanceOfAtCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8532                                data,
8533                            )
8534                            .map(HoprTokenCalls::balanceOfAt)
8535                    }
8536                    balanceOfAt
8537                },
8538                {
8539                    fn revokeOperator(
8540                        data: &[u8],
8541                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8542                        <revokeOperatorCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8543                                data,
8544                            )
8545                            .map(HoprTokenCalls::revokeOperator)
8546                    }
8547                    revokeOperator
8548                },
8549                {
8550                    fn operatorBurn(
8551                        data: &[u8],
8552                    ) -> alloy_sol_types::Result<HoprTokenCalls> {
8553                        <operatorBurnCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8554                                data,
8555                            )
8556                            .map(HoprTokenCalls::operatorBurn)
8557                    }
8558                    operatorBurn
8559                },
8560                {
8561                    fn burn(data: &[u8]) -> alloy_sol_types::Result<HoprTokenCalls> {
8562                        <burnCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
8563                                data,
8564                            )
8565                            .map(HoprTokenCalls::burn)
8566                    }
8567                    burn
8568                },
8569            ];
8570            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
8571                return Err(
8572                    alloy_sol_types::Error::unknown_selector(
8573                        <Self as alloy_sol_types::SolInterface>::NAME,
8574                        selector,
8575                    ),
8576                );
8577            };
8578            DECODE_VALIDATE_SHIMS[idx](data)
8579        }
8580        #[inline]
8581        fn abi_encoded_size(&self) -> usize {
8582            match self {
8583                Self::DEFAULT_ADMIN_ROLE(inner) => {
8584                    <DEFAULT_ADMIN_ROLECall as alloy_sol_types::SolCall>::abi_encoded_size(
8585                        inner,
8586                    )
8587                }
8588                Self::MINTER_ROLE(inner) => {
8589                    <MINTER_ROLECall as alloy_sol_types::SolCall>::abi_encoded_size(
8590                        inner,
8591                    )
8592                }
8593                Self::accountSnapshots(inner) => {
8594                    <accountSnapshotsCall as alloy_sol_types::SolCall>::abi_encoded_size(
8595                        inner,
8596                    )
8597                }
8598                Self::allowance(inner) => {
8599                    <allowanceCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8600                }
8601                Self::approve(inner) => {
8602                    <approveCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8603                }
8604                Self::authorizeOperator(inner) => {
8605                    <authorizeOperatorCall as alloy_sol_types::SolCall>::abi_encoded_size(
8606                        inner,
8607                    )
8608                }
8609                Self::balanceOf(inner) => {
8610                    <balanceOfCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8611                }
8612                Self::balanceOfAt(inner) => {
8613                    <balanceOfAtCall as alloy_sol_types::SolCall>::abi_encoded_size(
8614                        inner,
8615                    )
8616                }
8617                Self::burn(inner) => {
8618                    <burnCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8619                }
8620                Self::decimals(inner) => {
8621                    <decimalsCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8622                }
8623                Self::defaultOperators(inner) => {
8624                    <defaultOperatorsCall as alloy_sol_types::SolCall>::abi_encoded_size(
8625                        inner,
8626                    )
8627                }
8628                Self::getRoleAdmin(inner) => {
8629                    <getRoleAdminCall as alloy_sol_types::SolCall>::abi_encoded_size(
8630                        inner,
8631                    )
8632                }
8633                Self::getRoleMember(inner) => {
8634                    <getRoleMemberCall as alloy_sol_types::SolCall>::abi_encoded_size(
8635                        inner,
8636                    )
8637                }
8638                Self::getRoleMemberCount(inner) => {
8639                    <getRoleMemberCountCall as alloy_sol_types::SolCall>::abi_encoded_size(
8640                        inner,
8641                    )
8642                }
8643                Self::grantRole(inner) => {
8644                    <grantRoleCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8645                }
8646                Self::granularity(inner) => {
8647                    <granularityCall as alloy_sol_types::SolCall>::abi_encoded_size(
8648                        inner,
8649                    )
8650                }
8651                Self::hasRole(inner) => {
8652                    <hasRoleCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8653                }
8654                Self::isOperatorFor(inner) => {
8655                    <isOperatorForCall as alloy_sol_types::SolCall>::abi_encoded_size(
8656                        inner,
8657                    )
8658                }
8659                Self::mint(inner) => {
8660                    <mintCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8661                }
8662                Self::name(inner) => {
8663                    <nameCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8664                }
8665                Self::operatorBurn(inner) => {
8666                    <operatorBurnCall as alloy_sol_types::SolCall>::abi_encoded_size(
8667                        inner,
8668                    )
8669                }
8670                Self::operatorSend(inner) => {
8671                    <operatorSendCall as alloy_sol_types::SolCall>::abi_encoded_size(
8672                        inner,
8673                    )
8674                }
8675                Self::renounceRole(inner) => {
8676                    <renounceRoleCall as alloy_sol_types::SolCall>::abi_encoded_size(
8677                        inner,
8678                    )
8679                }
8680                Self::revokeOperator(inner) => {
8681                    <revokeOperatorCall as alloy_sol_types::SolCall>::abi_encoded_size(
8682                        inner,
8683                    )
8684                }
8685                Self::revokeRole(inner) => {
8686                    <revokeRoleCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8687                }
8688                Self::send(inner) => {
8689                    <sendCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8690                }
8691                Self::supportsInterface(inner) => {
8692                    <supportsInterfaceCall as alloy_sol_types::SolCall>::abi_encoded_size(
8693                        inner,
8694                    )
8695                }
8696                Self::symbol(inner) => {
8697                    <symbolCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8698                }
8699                Self::totalSupply(inner) => {
8700                    <totalSupplyCall as alloy_sol_types::SolCall>::abi_encoded_size(
8701                        inner,
8702                    )
8703                }
8704                Self::totalSupplyAt(inner) => {
8705                    <totalSupplyAtCall as alloy_sol_types::SolCall>::abi_encoded_size(
8706                        inner,
8707                    )
8708                }
8709                Self::totalSupplySnapshots(inner) => {
8710                    <totalSupplySnapshotsCall as alloy_sol_types::SolCall>::abi_encoded_size(
8711                        inner,
8712                    )
8713                }
8714                Self::transfer(inner) => {
8715                    <transferCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
8716                }
8717                Self::transferFrom(inner) => {
8718                    <transferFromCall as alloy_sol_types::SolCall>::abi_encoded_size(
8719                        inner,
8720                    )
8721                }
8722            }
8723        }
8724        #[inline]
8725        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
8726            match self {
8727                Self::DEFAULT_ADMIN_ROLE(inner) => {
8728                    <DEFAULT_ADMIN_ROLECall as alloy_sol_types::SolCall>::abi_encode_raw(
8729                        inner,
8730                        out,
8731                    )
8732                }
8733                Self::MINTER_ROLE(inner) => {
8734                    <MINTER_ROLECall as alloy_sol_types::SolCall>::abi_encode_raw(
8735                        inner,
8736                        out,
8737                    )
8738                }
8739                Self::accountSnapshots(inner) => {
8740                    <accountSnapshotsCall as alloy_sol_types::SolCall>::abi_encode_raw(
8741                        inner,
8742                        out,
8743                    )
8744                }
8745                Self::allowance(inner) => {
8746                    <allowanceCall as alloy_sol_types::SolCall>::abi_encode_raw(
8747                        inner,
8748                        out,
8749                    )
8750                }
8751                Self::approve(inner) => {
8752                    <approveCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
8753                }
8754                Self::authorizeOperator(inner) => {
8755                    <authorizeOperatorCall as alloy_sol_types::SolCall>::abi_encode_raw(
8756                        inner,
8757                        out,
8758                    )
8759                }
8760                Self::balanceOf(inner) => {
8761                    <balanceOfCall as alloy_sol_types::SolCall>::abi_encode_raw(
8762                        inner,
8763                        out,
8764                    )
8765                }
8766                Self::balanceOfAt(inner) => {
8767                    <balanceOfAtCall as alloy_sol_types::SolCall>::abi_encode_raw(
8768                        inner,
8769                        out,
8770                    )
8771                }
8772                Self::burn(inner) => {
8773                    <burnCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
8774                }
8775                Self::decimals(inner) => {
8776                    <decimalsCall as alloy_sol_types::SolCall>::abi_encode_raw(
8777                        inner,
8778                        out,
8779                    )
8780                }
8781                Self::defaultOperators(inner) => {
8782                    <defaultOperatorsCall as alloy_sol_types::SolCall>::abi_encode_raw(
8783                        inner,
8784                        out,
8785                    )
8786                }
8787                Self::getRoleAdmin(inner) => {
8788                    <getRoleAdminCall as alloy_sol_types::SolCall>::abi_encode_raw(
8789                        inner,
8790                        out,
8791                    )
8792                }
8793                Self::getRoleMember(inner) => {
8794                    <getRoleMemberCall as alloy_sol_types::SolCall>::abi_encode_raw(
8795                        inner,
8796                        out,
8797                    )
8798                }
8799                Self::getRoleMemberCount(inner) => {
8800                    <getRoleMemberCountCall as alloy_sol_types::SolCall>::abi_encode_raw(
8801                        inner,
8802                        out,
8803                    )
8804                }
8805                Self::grantRole(inner) => {
8806                    <grantRoleCall as alloy_sol_types::SolCall>::abi_encode_raw(
8807                        inner,
8808                        out,
8809                    )
8810                }
8811                Self::granularity(inner) => {
8812                    <granularityCall as alloy_sol_types::SolCall>::abi_encode_raw(
8813                        inner,
8814                        out,
8815                    )
8816                }
8817                Self::hasRole(inner) => {
8818                    <hasRoleCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
8819                }
8820                Self::isOperatorFor(inner) => {
8821                    <isOperatorForCall as alloy_sol_types::SolCall>::abi_encode_raw(
8822                        inner,
8823                        out,
8824                    )
8825                }
8826                Self::mint(inner) => {
8827                    <mintCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
8828                }
8829                Self::name(inner) => {
8830                    <nameCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
8831                }
8832                Self::operatorBurn(inner) => {
8833                    <operatorBurnCall as alloy_sol_types::SolCall>::abi_encode_raw(
8834                        inner,
8835                        out,
8836                    )
8837                }
8838                Self::operatorSend(inner) => {
8839                    <operatorSendCall as alloy_sol_types::SolCall>::abi_encode_raw(
8840                        inner,
8841                        out,
8842                    )
8843                }
8844                Self::renounceRole(inner) => {
8845                    <renounceRoleCall as alloy_sol_types::SolCall>::abi_encode_raw(
8846                        inner,
8847                        out,
8848                    )
8849                }
8850                Self::revokeOperator(inner) => {
8851                    <revokeOperatorCall as alloy_sol_types::SolCall>::abi_encode_raw(
8852                        inner,
8853                        out,
8854                    )
8855                }
8856                Self::revokeRole(inner) => {
8857                    <revokeRoleCall as alloy_sol_types::SolCall>::abi_encode_raw(
8858                        inner,
8859                        out,
8860                    )
8861                }
8862                Self::send(inner) => {
8863                    <sendCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
8864                }
8865                Self::supportsInterface(inner) => {
8866                    <supportsInterfaceCall as alloy_sol_types::SolCall>::abi_encode_raw(
8867                        inner,
8868                        out,
8869                    )
8870                }
8871                Self::symbol(inner) => {
8872                    <symbolCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
8873                }
8874                Self::totalSupply(inner) => {
8875                    <totalSupplyCall as alloy_sol_types::SolCall>::abi_encode_raw(
8876                        inner,
8877                        out,
8878                    )
8879                }
8880                Self::totalSupplyAt(inner) => {
8881                    <totalSupplyAtCall as alloy_sol_types::SolCall>::abi_encode_raw(
8882                        inner,
8883                        out,
8884                    )
8885                }
8886                Self::totalSupplySnapshots(inner) => {
8887                    <totalSupplySnapshotsCall as alloy_sol_types::SolCall>::abi_encode_raw(
8888                        inner,
8889                        out,
8890                    )
8891                }
8892                Self::transfer(inner) => {
8893                    <transferCall as alloy_sol_types::SolCall>::abi_encode_raw(
8894                        inner,
8895                        out,
8896                    )
8897                }
8898                Self::transferFrom(inner) => {
8899                    <transferFromCall as alloy_sol_types::SolCall>::abi_encode_raw(
8900                        inner,
8901                        out,
8902                    )
8903                }
8904            }
8905        }
8906    }
8907    ///Container for all the [`HoprToken`](self) events.
8908    #[derive(serde::Serialize, serde::Deserialize)]
8909    #[derive(Debug, PartialEq, Eq, Hash)]
8910    pub enum HoprTokenEvents {
8911        #[allow(missing_docs)]
8912        Approval(Approval),
8913        #[allow(missing_docs)]
8914        AuthorizedOperator(AuthorizedOperator),
8915        #[allow(missing_docs)]
8916        Burned(Burned),
8917        #[allow(missing_docs)]
8918        Minted(Minted),
8919        #[allow(missing_docs)]
8920        RevokedOperator(RevokedOperator),
8921        #[allow(missing_docs)]
8922        RoleAdminChanged(RoleAdminChanged),
8923        #[allow(missing_docs)]
8924        RoleGranted(RoleGranted),
8925        #[allow(missing_docs)]
8926        RoleRevoked(RoleRevoked),
8927        #[allow(missing_docs)]
8928        Sent(Sent),
8929        #[allow(missing_docs)]
8930        Transfer(Transfer),
8931    }
8932    #[automatically_derived]
8933    impl HoprTokenEvents {
8934        /// All the selectors of this enum.
8935        ///
8936        /// Note that the selectors might not be in the same order as the variants.
8937        /// No guarantees are made about the order of the selectors.
8938        ///
8939        /// Prefer using `SolInterface` methods instead.
8940        pub const SELECTORS: &'static [[u8; 32usize]] = &[
8941            [
8942                6u8, 181u8, 65u8, 221u8, 170u8, 114u8, 13u8, 178u8, 177u8, 10u8, 77u8,
8943                12u8, 218u8, 195u8, 155u8, 141u8, 54u8, 4u8, 37u8, 252u8, 7u8, 48u8,
8944                133u8, 250u8, 193u8, 155u8, 200u8, 38u8, 20u8, 103u8, 121u8, 135u8,
8945            ],
8946            [
8947                47u8, 135u8, 136u8, 17u8, 126u8, 126u8, 255u8, 29u8, 130u8, 233u8, 38u8,
8948                236u8, 121u8, 73u8, 1u8, 209u8, 124u8, 120u8, 2u8, 74u8, 80u8, 39u8, 9u8,
8949                64u8, 48u8, 69u8, 64u8, 167u8, 51u8, 101u8, 111u8, 13u8,
8950            ],
8951            [
8952                47u8, 229u8, 190u8, 1u8, 70u8, 247u8, 76u8, 91u8, 206u8, 54u8, 192u8,
8953                184u8, 9u8, 17u8, 175u8, 108u8, 125u8, 134u8, 255u8, 39u8, 232u8, 157u8,
8954                92u8, 250u8, 97u8, 252u8, 104u8, 19u8, 39u8, 149u8, 78u8, 93u8,
8955            ],
8956            [
8957                80u8, 84u8, 110u8, 102u8, 229u8, 244u8, 77u8, 114u8, 131u8, 101u8, 220u8,
8958                57u8, 8u8, 198u8, 59u8, 197u8, 207u8, 238u8, 171u8, 71u8, 7u8, 34u8,
8959                193u8, 103u8, 126u8, 48u8, 115u8, 166u8, 172u8, 41u8, 74u8, 161u8,
8960            ],
8961            [
8962                140u8, 91u8, 225u8, 229u8, 235u8, 236u8, 125u8, 91u8, 209u8, 79u8, 113u8,
8963                66u8, 125u8, 30u8, 132u8, 243u8, 221u8, 3u8, 20u8, 192u8, 247u8, 178u8,
8964                41u8, 30u8, 91u8, 32u8, 10u8, 200u8, 199u8, 195u8, 185u8, 37u8,
8965            ],
8966            [
8967                167u8, 138u8, 155u8, 227u8, 167u8, 184u8, 98u8, 210u8, 105u8, 51u8,
8968                173u8, 133u8, 251u8, 17u8, 216u8, 14u8, 246u8, 107u8, 143u8, 151u8, 45u8,
8969                124u8, 187u8, 160u8, 102u8, 33u8, 213u8, 131u8, 148u8, 58u8, 64u8, 152u8,
8970            ],
8971            [
8972                189u8, 121u8, 184u8, 111u8, 254u8, 10u8, 184u8, 232u8, 119u8, 97u8, 81u8,
8973                81u8, 66u8, 23u8, 205u8, 124u8, 172u8, 213u8, 44u8, 144u8, 159u8, 102u8,
8974                71u8, 92u8, 58u8, 244u8, 78u8, 18u8, 159u8, 11u8, 0u8, 255u8,
8975            ],
8976            [
8977                221u8, 242u8, 82u8, 173u8, 27u8, 226u8, 200u8, 155u8, 105u8, 194u8,
8978                176u8, 104u8, 252u8, 55u8, 141u8, 170u8, 149u8, 43u8, 167u8, 241u8, 99u8,
8979                196u8, 161u8, 22u8, 40u8, 245u8, 90u8, 77u8, 245u8, 35u8, 179u8, 239u8,
8980            ],
8981            [
8982                244u8, 202u8, 235u8, 45u8, 108u8, 168u8, 147u8, 42u8, 33u8, 90u8, 53u8,
8983                61u8, 7u8, 3u8, 195u8, 38u8, 236u8, 45u8, 129u8, 252u8, 104u8, 23u8,
8984                15u8, 50u8, 14u8, 178u8, 171u8, 73u8, 233u8, 223u8, 97u8, 249u8,
8985            ],
8986            [
8987                246u8, 57u8, 31u8, 92u8, 50u8, 217u8, 198u8, 157u8, 42u8, 71u8, 234u8,
8988                103u8, 11u8, 68u8, 41u8, 116u8, 181u8, 57u8, 53u8, 209u8, 237u8, 199u8,
8989                253u8, 100u8, 235u8, 33u8, 224u8, 71u8, 168u8, 57u8, 23u8, 27u8,
8990            ],
8991        ];
8992    }
8993    #[automatically_derived]
8994    impl alloy_sol_types::SolEventInterface for HoprTokenEvents {
8995        const NAME: &'static str = "HoprTokenEvents";
8996        const COUNT: usize = 10usize;
8997        fn decode_raw_log(
8998            topics: &[alloy_sol_types::Word],
8999            data: &[u8],
9000        ) -> alloy_sol_types::Result<Self> {
9001            match topics.first().copied() {
9002                Some(<Approval as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
9003                    <Approval as alloy_sol_types::SolEvent>::decode_raw_log(topics, data)
9004                        .map(Self::Approval)
9005                }
9006                Some(
9007                    <AuthorizedOperator as alloy_sol_types::SolEvent>::SIGNATURE_HASH,
9008                ) => {
9009                    <AuthorizedOperator as alloy_sol_types::SolEvent>::decode_raw_log(
9010                            topics,
9011                            data,
9012                        )
9013                        .map(Self::AuthorizedOperator)
9014                }
9015                Some(<Burned as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
9016                    <Burned as alloy_sol_types::SolEvent>::decode_raw_log(topics, data)
9017                        .map(Self::Burned)
9018                }
9019                Some(<Minted as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
9020                    <Minted as alloy_sol_types::SolEvent>::decode_raw_log(topics, data)
9021                        .map(Self::Minted)
9022                }
9023                Some(<RevokedOperator as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
9024                    <RevokedOperator as alloy_sol_types::SolEvent>::decode_raw_log(
9025                            topics,
9026                            data,
9027                        )
9028                        .map(Self::RevokedOperator)
9029                }
9030                Some(<RoleAdminChanged as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
9031                    <RoleAdminChanged as alloy_sol_types::SolEvent>::decode_raw_log(
9032                            topics,
9033                            data,
9034                        )
9035                        .map(Self::RoleAdminChanged)
9036                }
9037                Some(<RoleGranted as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
9038                    <RoleGranted as alloy_sol_types::SolEvent>::decode_raw_log(
9039                            topics,
9040                            data,
9041                        )
9042                        .map(Self::RoleGranted)
9043                }
9044                Some(<RoleRevoked as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
9045                    <RoleRevoked as alloy_sol_types::SolEvent>::decode_raw_log(
9046                            topics,
9047                            data,
9048                        )
9049                        .map(Self::RoleRevoked)
9050                }
9051                Some(<Sent as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
9052                    <Sent as alloy_sol_types::SolEvent>::decode_raw_log(topics, data)
9053                        .map(Self::Sent)
9054                }
9055                Some(<Transfer as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
9056                    <Transfer as alloy_sol_types::SolEvent>::decode_raw_log(topics, data)
9057                        .map(Self::Transfer)
9058                }
9059                _ => {
9060                    alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog {
9061                        name: <Self as alloy_sol_types::SolEventInterface>::NAME,
9062                        log: alloy_sol_types::private::Box::new(
9063                            alloy_sol_types::private::LogData::new_unchecked(
9064                                topics.to_vec(),
9065                                data.to_vec().into(),
9066                            ),
9067                        ),
9068                    })
9069                }
9070            }
9071        }
9072    }
9073    #[automatically_derived]
9074    impl alloy_sol_types::private::IntoLogData for HoprTokenEvents {
9075        fn to_log_data(&self) -> alloy_sol_types::private::LogData {
9076            match self {
9077                Self::Approval(inner) => {
9078                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
9079                }
9080                Self::AuthorizedOperator(inner) => {
9081                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
9082                }
9083                Self::Burned(inner) => {
9084                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
9085                }
9086                Self::Minted(inner) => {
9087                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
9088                }
9089                Self::RevokedOperator(inner) => {
9090                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
9091                }
9092                Self::RoleAdminChanged(inner) => {
9093                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
9094                }
9095                Self::RoleGranted(inner) => {
9096                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
9097                }
9098                Self::RoleRevoked(inner) => {
9099                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
9100                }
9101                Self::Sent(inner) => {
9102                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
9103                }
9104                Self::Transfer(inner) => {
9105                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
9106                }
9107            }
9108        }
9109        fn into_log_data(self) -> alloy_sol_types::private::LogData {
9110            match self {
9111                Self::Approval(inner) => {
9112                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
9113                }
9114                Self::AuthorizedOperator(inner) => {
9115                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
9116                }
9117                Self::Burned(inner) => {
9118                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
9119                }
9120                Self::Minted(inner) => {
9121                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
9122                }
9123                Self::RevokedOperator(inner) => {
9124                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
9125                }
9126                Self::RoleAdminChanged(inner) => {
9127                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
9128                }
9129                Self::RoleGranted(inner) => {
9130                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
9131                }
9132                Self::RoleRevoked(inner) => {
9133                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
9134                }
9135                Self::Sent(inner) => {
9136                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
9137                }
9138                Self::Transfer(inner) => {
9139                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
9140                }
9141            }
9142        }
9143    }
9144    use alloy::contract as alloy_contract;
9145    /**Creates a new wrapper around an on-chain [`HoprToken`](self) contract instance.
9146
9147See the [wrapper's documentation](`HoprTokenInstance`) for more details.*/
9148    #[inline]
9149    pub const fn new<
9150        P: alloy_contract::private::Provider<N>,
9151        N: alloy_contract::private::Network,
9152    >(
9153        address: alloy_sol_types::private::Address,
9154        provider: P,
9155    ) -> HoprTokenInstance<P, N> {
9156        HoprTokenInstance::<P, N>::new(address, provider)
9157    }
9158    /**Deploys this contract using the given `provider` and constructor arguments, if any.
9159
9160Returns a new instance of the contract, if the deployment was successful.
9161
9162For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
9163    #[inline]
9164    pub fn deploy<
9165        P: alloy_contract::private::Provider<N>,
9166        N: alloy_contract::private::Network,
9167    >(
9168        provider: P,
9169    ) -> impl ::core::future::Future<
9170        Output = alloy_contract::Result<HoprTokenInstance<P, N>>,
9171    > {
9172        HoprTokenInstance::<P, N>::deploy(provider)
9173    }
9174    /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
9175and constructor arguments, if any.
9176
9177This is a simple wrapper around creating a `RawCallBuilder` with the data set to
9178the bytecode concatenated with the constructor's ABI-encoded arguments.*/
9179    #[inline]
9180    pub fn deploy_builder<
9181        P: alloy_contract::private::Provider<N>,
9182        N: alloy_contract::private::Network,
9183    >(provider: P) -> alloy_contract::RawCallBuilder<P, N> {
9184        HoprTokenInstance::<P, N>::deploy_builder(provider)
9185    }
9186    /**A [`HoprToken`](self) instance.
9187
9188Contains type-safe methods for interacting with an on-chain instance of the
9189[`HoprToken`](self) contract located at a given `address`, using a given
9190provider `P`.
9191
9192If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
9193documentation on how to provide it), the `deploy` and `deploy_builder` methods can
9194be used to deploy a new instance of the contract.
9195
9196See the [module-level documentation](self) for all the available methods.*/
9197    #[derive(Clone)]
9198    pub struct HoprTokenInstance<P, N = alloy_contract::private::Ethereum> {
9199        address: alloy_sol_types::private::Address,
9200        provider: P,
9201        _network: ::core::marker::PhantomData<N>,
9202    }
9203    #[automatically_derived]
9204    impl<P, N> ::core::fmt::Debug for HoprTokenInstance<P, N> {
9205        #[inline]
9206        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
9207            f.debug_tuple("HoprTokenInstance").field(&self.address).finish()
9208        }
9209    }
9210    /// Instantiation and getters/setters.
9211    #[automatically_derived]
9212    impl<
9213        P: alloy_contract::private::Provider<N>,
9214        N: alloy_contract::private::Network,
9215    > HoprTokenInstance<P, N> {
9216        /**Creates a new wrapper around an on-chain [`HoprToken`](self) contract instance.
9217
9218See the [wrapper's documentation](`HoprTokenInstance`) for more details.*/
9219        #[inline]
9220        pub const fn new(
9221            address: alloy_sol_types::private::Address,
9222            provider: P,
9223        ) -> Self {
9224            Self {
9225                address,
9226                provider,
9227                _network: ::core::marker::PhantomData,
9228            }
9229        }
9230        /**Deploys this contract using the given `provider` and constructor arguments, if any.
9231
9232Returns a new instance of the contract, if the deployment was successful.
9233
9234For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
9235        #[inline]
9236        pub async fn deploy(
9237            provider: P,
9238        ) -> alloy_contract::Result<HoprTokenInstance<P, N>> {
9239            let call_builder = Self::deploy_builder(provider);
9240            let contract_address = call_builder.deploy().await?;
9241            Ok(Self::new(contract_address, call_builder.provider))
9242        }
9243        /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
9244and constructor arguments, if any.
9245
9246This is a simple wrapper around creating a `RawCallBuilder` with the data set to
9247the bytecode concatenated with the constructor's ABI-encoded arguments.*/
9248        #[inline]
9249        pub fn deploy_builder(provider: P) -> alloy_contract::RawCallBuilder<P, N> {
9250            alloy_contract::RawCallBuilder::new_raw_deploy(
9251                provider,
9252                ::core::clone::Clone::clone(&BYTECODE),
9253            )
9254        }
9255        /// Returns a reference to the address.
9256        #[inline]
9257        pub const fn address(&self) -> &alloy_sol_types::private::Address {
9258            &self.address
9259        }
9260        /// Sets the address.
9261        #[inline]
9262        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
9263            self.address = address;
9264        }
9265        /// Sets the address and returns `self`.
9266        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
9267            self.set_address(address);
9268            self
9269        }
9270        /// Returns a reference to the provider.
9271        #[inline]
9272        pub const fn provider(&self) -> &P {
9273            &self.provider
9274        }
9275    }
9276    impl<P: ::core::clone::Clone, N> HoprTokenInstance<&P, N> {
9277        /// Clones the provider and returns a new instance with the cloned provider.
9278        #[inline]
9279        pub fn with_cloned_provider(self) -> HoprTokenInstance<P, N> {
9280            HoprTokenInstance {
9281                address: self.address,
9282                provider: ::core::clone::Clone::clone(&self.provider),
9283                _network: ::core::marker::PhantomData,
9284            }
9285        }
9286    }
9287    /// Function calls.
9288    #[automatically_derived]
9289    impl<
9290        P: alloy_contract::private::Provider<N>,
9291        N: alloy_contract::private::Network,
9292    > HoprTokenInstance<P, N> {
9293        /// Creates a new call builder using this contract instance's provider and address.
9294        ///
9295        /// Note that the call can be any function call, not just those defined in this
9296        /// contract. Prefer using the other methods for building type-safe contract calls.
9297        pub fn call_builder<C: alloy_sol_types::SolCall>(
9298            &self,
9299            call: &C,
9300        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
9301            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
9302        }
9303        ///Creates a new call builder for the [`DEFAULT_ADMIN_ROLE`] function.
9304        pub fn DEFAULT_ADMIN_ROLE(
9305            &self,
9306        ) -> alloy_contract::SolCallBuilder<&P, DEFAULT_ADMIN_ROLECall, N> {
9307            self.call_builder(&DEFAULT_ADMIN_ROLECall)
9308        }
9309        ///Creates a new call builder for the [`MINTER_ROLE`] function.
9310        pub fn MINTER_ROLE(
9311            &self,
9312        ) -> alloy_contract::SolCallBuilder<&P, MINTER_ROLECall, N> {
9313            self.call_builder(&MINTER_ROLECall)
9314        }
9315        ///Creates a new call builder for the [`accountSnapshots`] function.
9316        pub fn accountSnapshots(
9317            &self,
9318            _0: alloy::sol_types::private::Address,
9319            _1: alloy::sol_types::private::primitives::aliases::U256,
9320        ) -> alloy_contract::SolCallBuilder<&P, accountSnapshotsCall, N> {
9321            self.call_builder(&accountSnapshotsCall { _0, _1 })
9322        }
9323        ///Creates a new call builder for the [`allowance`] function.
9324        pub fn allowance(
9325            &self,
9326            holder: alloy::sol_types::private::Address,
9327            spender: alloy::sol_types::private::Address,
9328        ) -> alloy_contract::SolCallBuilder<&P, allowanceCall, N> {
9329            self.call_builder(&allowanceCall { holder, spender })
9330        }
9331        ///Creates a new call builder for the [`approve`] function.
9332        pub fn approve(
9333            &self,
9334            spender: alloy::sol_types::private::Address,
9335            value: alloy::sol_types::private::primitives::aliases::U256,
9336        ) -> alloy_contract::SolCallBuilder<&P, approveCall, N> {
9337            self.call_builder(&approveCall { spender, value })
9338        }
9339        ///Creates a new call builder for the [`authorizeOperator`] function.
9340        pub fn authorizeOperator(
9341            &self,
9342            operator: alloy::sol_types::private::Address,
9343        ) -> alloy_contract::SolCallBuilder<&P, authorizeOperatorCall, N> {
9344            self.call_builder(&authorizeOperatorCall { operator })
9345        }
9346        ///Creates a new call builder for the [`balanceOf`] function.
9347        pub fn balanceOf(
9348            &self,
9349            tokenHolder: alloy::sol_types::private::Address,
9350        ) -> alloy_contract::SolCallBuilder<&P, balanceOfCall, N> {
9351            self.call_builder(&balanceOfCall { tokenHolder })
9352        }
9353        ///Creates a new call builder for the [`balanceOfAt`] function.
9354        pub fn balanceOfAt(
9355            &self,
9356            _owner: alloy::sol_types::private::Address,
9357            _blockNumber: u128,
9358        ) -> alloy_contract::SolCallBuilder<&P, balanceOfAtCall, N> {
9359            self.call_builder(
9360                &balanceOfAtCall {
9361                    _owner,
9362                    _blockNumber,
9363                },
9364            )
9365        }
9366        ///Creates a new call builder for the [`burn`] function.
9367        pub fn burn(
9368            &self,
9369            amount: alloy::sol_types::private::primitives::aliases::U256,
9370            data: alloy::sol_types::private::Bytes,
9371        ) -> alloy_contract::SolCallBuilder<&P, burnCall, N> {
9372            self.call_builder(&burnCall { amount, data })
9373        }
9374        ///Creates a new call builder for the [`decimals`] function.
9375        pub fn decimals(&self) -> alloy_contract::SolCallBuilder<&P, decimalsCall, N> {
9376            self.call_builder(&decimalsCall)
9377        }
9378        ///Creates a new call builder for the [`defaultOperators`] function.
9379        pub fn defaultOperators(
9380            &self,
9381        ) -> alloy_contract::SolCallBuilder<&P, defaultOperatorsCall, N> {
9382            self.call_builder(&defaultOperatorsCall)
9383        }
9384        ///Creates a new call builder for the [`getRoleAdmin`] function.
9385        pub fn getRoleAdmin(
9386            &self,
9387            role: alloy::sol_types::private::FixedBytes<32>,
9388        ) -> alloy_contract::SolCallBuilder<&P, getRoleAdminCall, N> {
9389            self.call_builder(&getRoleAdminCall { role })
9390        }
9391        ///Creates a new call builder for the [`getRoleMember`] function.
9392        pub fn getRoleMember(
9393            &self,
9394            role: alloy::sol_types::private::FixedBytes<32>,
9395            index: alloy::sol_types::private::primitives::aliases::U256,
9396        ) -> alloy_contract::SolCallBuilder<&P, getRoleMemberCall, N> {
9397            self.call_builder(&getRoleMemberCall { role, index })
9398        }
9399        ///Creates a new call builder for the [`getRoleMemberCount`] function.
9400        pub fn getRoleMemberCount(
9401            &self,
9402            role: alloy::sol_types::private::FixedBytes<32>,
9403        ) -> alloy_contract::SolCallBuilder<&P, getRoleMemberCountCall, N> {
9404            self.call_builder(&getRoleMemberCountCall { role })
9405        }
9406        ///Creates a new call builder for the [`grantRole`] function.
9407        pub fn grantRole(
9408            &self,
9409            role: alloy::sol_types::private::FixedBytes<32>,
9410            account: alloy::sol_types::private::Address,
9411        ) -> alloy_contract::SolCallBuilder<&P, grantRoleCall, N> {
9412            self.call_builder(&grantRoleCall { role, account })
9413        }
9414        ///Creates a new call builder for the [`granularity`] function.
9415        pub fn granularity(
9416            &self,
9417        ) -> alloy_contract::SolCallBuilder<&P, granularityCall, N> {
9418            self.call_builder(&granularityCall)
9419        }
9420        ///Creates a new call builder for the [`hasRole`] function.
9421        pub fn hasRole(
9422            &self,
9423            role: alloy::sol_types::private::FixedBytes<32>,
9424            account: alloy::sol_types::private::Address,
9425        ) -> alloy_contract::SolCallBuilder<&P, hasRoleCall, N> {
9426            self.call_builder(&hasRoleCall { role, account })
9427        }
9428        ///Creates a new call builder for the [`isOperatorFor`] function.
9429        pub fn isOperatorFor(
9430            &self,
9431            operator: alloy::sol_types::private::Address,
9432            tokenHolder: alloy::sol_types::private::Address,
9433        ) -> alloy_contract::SolCallBuilder<&P, isOperatorForCall, N> {
9434            self.call_builder(
9435                &isOperatorForCall {
9436                    operator,
9437                    tokenHolder,
9438                },
9439            )
9440        }
9441        ///Creates a new call builder for the [`mint`] function.
9442        pub fn mint(
9443            &self,
9444            account: alloy::sol_types::private::Address,
9445            amount: alloy::sol_types::private::primitives::aliases::U256,
9446            userData: alloy::sol_types::private::Bytes,
9447            operatorData: alloy::sol_types::private::Bytes,
9448        ) -> alloy_contract::SolCallBuilder<&P, mintCall, N> {
9449            self.call_builder(
9450                &mintCall {
9451                    account,
9452                    amount,
9453                    userData,
9454                    operatorData,
9455                },
9456            )
9457        }
9458        ///Creates a new call builder for the [`name`] function.
9459        pub fn name(&self) -> alloy_contract::SolCallBuilder<&P, nameCall, N> {
9460            self.call_builder(&nameCall)
9461        }
9462        ///Creates a new call builder for the [`operatorBurn`] function.
9463        pub fn operatorBurn(
9464            &self,
9465            account: alloy::sol_types::private::Address,
9466            amount: alloy::sol_types::private::primitives::aliases::U256,
9467            data: alloy::sol_types::private::Bytes,
9468            operatorData: alloy::sol_types::private::Bytes,
9469        ) -> alloy_contract::SolCallBuilder<&P, operatorBurnCall, N> {
9470            self.call_builder(
9471                &operatorBurnCall {
9472                    account,
9473                    amount,
9474                    data,
9475                    operatorData,
9476                },
9477            )
9478        }
9479        ///Creates a new call builder for the [`operatorSend`] function.
9480        pub fn operatorSend(
9481            &self,
9482            sender: alloy::sol_types::private::Address,
9483            recipient: alloy::sol_types::private::Address,
9484            amount: alloy::sol_types::private::primitives::aliases::U256,
9485            data: alloy::sol_types::private::Bytes,
9486            operatorData: alloy::sol_types::private::Bytes,
9487        ) -> alloy_contract::SolCallBuilder<&P, operatorSendCall, N> {
9488            self.call_builder(
9489                &operatorSendCall {
9490                    sender,
9491                    recipient,
9492                    amount,
9493                    data,
9494                    operatorData,
9495                },
9496            )
9497        }
9498        ///Creates a new call builder for the [`renounceRole`] function.
9499        pub fn renounceRole(
9500            &self,
9501            role: alloy::sol_types::private::FixedBytes<32>,
9502            account: alloy::sol_types::private::Address,
9503        ) -> alloy_contract::SolCallBuilder<&P, renounceRoleCall, N> {
9504            self.call_builder(&renounceRoleCall { role, account })
9505        }
9506        ///Creates a new call builder for the [`revokeOperator`] function.
9507        pub fn revokeOperator(
9508            &self,
9509            operator: alloy::sol_types::private::Address,
9510        ) -> alloy_contract::SolCallBuilder<&P, revokeOperatorCall, N> {
9511            self.call_builder(&revokeOperatorCall { operator })
9512        }
9513        ///Creates a new call builder for the [`revokeRole`] function.
9514        pub fn revokeRole(
9515            &self,
9516            role: alloy::sol_types::private::FixedBytes<32>,
9517            account: alloy::sol_types::private::Address,
9518        ) -> alloy_contract::SolCallBuilder<&P, revokeRoleCall, N> {
9519            self.call_builder(&revokeRoleCall { role, account })
9520        }
9521        ///Creates a new call builder for the [`send`] function.
9522        pub fn send(
9523            &self,
9524            recipient: alloy::sol_types::private::Address,
9525            amount: alloy::sol_types::private::primitives::aliases::U256,
9526            data: alloy::sol_types::private::Bytes,
9527        ) -> alloy_contract::SolCallBuilder<&P, sendCall, N> {
9528            self.call_builder(
9529                &sendCall {
9530                    recipient,
9531                    amount,
9532                    data,
9533                },
9534            )
9535        }
9536        ///Creates a new call builder for the [`supportsInterface`] function.
9537        pub fn supportsInterface(
9538            &self,
9539            interfaceId: alloy::sol_types::private::FixedBytes<4>,
9540        ) -> alloy_contract::SolCallBuilder<&P, supportsInterfaceCall, N> {
9541            self.call_builder(
9542                &supportsInterfaceCall {
9543                    interfaceId,
9544                },
9545            )
9546        }
9547        ///Creates a new call builder for the [`symbol`] function.
9548        pub fn symbol(&self) -> alloy_contract::SolCallBuilder<&P, symbolCall, N> {
9549            self.call_builder(&symbolCall)
9550        }
9551        ///Creates a new call builder for the [`totalSupply`] function.
9552        pub fn totalSupply(
9553            &self,
9554        ) -> alloy_contract::SolCallBuilder<&P, totalSupplyCall, N> {
9555            self.call_builder(&totalSupplyCall)
9556        }
9557        ///Creates a new call builder for the [`totalSupplyAt`] function.
9558        pub fn totalSupplyAt(
9559            &self,
9560            _blockNumber: u128,
9561        ) -> alloy_contract::SolCallBuilder<&P, totalSupplyAtCall, N> {
9562            self.call_builder(&totalSupplyAtCall { _blockNumber })
9563        }
9564        ///Creates a new call builder for the [`totalSupplySnapshots`] function.
9565        pub fn totalSupplySnapshots(
9566            &self,
9567            _0: alloy::sol_types::private::primitives::aliases::U256,
9568        ) -> alloy_contract::SolCallBuilder<&P, totalSupplySnapshotsCall, N> {
9569            self.call_builder(&totalSupplySnapshotsCall(_0))
9570        }
9571        ///Creates a new call builder for the [`transfer`] function.
9572        pub fn transfer(
9573            &self,
9574            recipient: alloy::sol_types::private::Address,
9575            amount: alloy::sol_types::private::primitives::aliases::U256,
9576        ) -> alloy_contract::SolCallBuilder<&P, transferCall, N> {
9577            self.call_builder(&transferCall { recipient, amount })
9578        }
9579        ///Creates a new call builder for the [`transferFrom`] function.
9580        pub fn transferFrom(
9581            &self,
9582            holder: alloy::sol_types::private::Address,
9583            recipient: alloy::sol_types::private::Address,
9584            amount: alloy::sol_types::private::primitives::aliases::U256,
9585        ) -> alloy_contract::SolCallBuilder<&P, transferFromCall, N> {
9586            self.call_builder(
9587                &transferFromCall {
9588                    holder,
9589                    recipient,
9590                    amount,
9591                },
9592            )
9593        }
9594    }
9595    /// Event filters.
9596    #[automatically_derived]
9597    impl<
9598        P: alloy_contract::private::Provider<N>,
9599        N: alloy_contract::private::Network,
9600    > HoprTokenInstance<P, N> {
9601        /// Creates a new event filter using this contract instance's provider and address.
9602        ///
9603        /// Note that the type can be any event, not just those defined in this contract.
9604        /// Prefer using the other methods for building type-safe event filters.
9605        pub fn event_filter<E: alloy_sol_types::SolEvent>(
9606            &self,
9607        ) -> alloy_contract::Event<&P, E, N> {
9608            alloy_contract::Event::new_sol(&self.provider, &self.address)
9609        }
9610        ///Creates a new event filter for the [`Approval`] event.
9611        pub fn Approval_filter(&self) -> alloy_contract::Event<&P, Approval, N> {
9612            self.event_filter::<Approval>()
9613        }
9614        ///Creates a new event filter for the [`AuthorizedOperator`] event.
9615        pub fn AuthorizedOperator_filter(
9616            &self,
9617        ) -> alloy_contract::Event<&P, AuthorizedOperator, N> {
9618            self.event_filter::<AuthorizedOperator>()
9619        }
9620        ///Creates a new event filter for the [`Burned`] event.
9621        pub fn Burned_filter(&self) -> alloy_contract::Event<&P, Burned, N> {
9622            self.event_filter::<Burned>()
9623        }
9624        ///Creates a new event filter for the [`Minted`] event.
9625        pub fn Minted_filter(&self) -> alloy_contract::Event<&P, Minted, N> {
9626            self.event_filter::<Minted>()
9627        }
9628        ///Creates a new event filter for the [`RevokedOperator`] event.
9629        pub fn RevokedOperator_filter(
9630            &self,
9631        ) -> alloy_contract::Event<&P, RevokedOperator, N> {
9632            self.event_filter::<RevokedOperator>()
9633        }
9634        ///Creates a new event filter for the [`RoleAdminChanged`] event.
9635        pub fn RoleAdminChanged_filter(
9636            &self,
9637        ) -> alloy_contract::Event<&P, RoleAdminChanged, N> {
9638            self.event_filter::<RoleAdminChanged>()
9639        }
9640        ///Creates a new event filter for the [`RoleGranted`] event.
9641        pub fn RoleGranted_filter(&self) -> alloy_contract::Event<&P, RoleGranted, N> {
9642            self.event_filter::<RoleGranted>()
9643        }
9644        ///Creates a new event filter for the [`RoleRevoked`] event.
9645        pub fn RoleRevoked_filter(&self) -> alloy_contract::Event<&P, RoleRevoked, N> {
9646            self.event_filter::<RoleRevoked>()
9647        }
9648        ///Creates a new event filter for the [`Sent`] event.
9649        pub fn Sent_filter(&self) -> alloy_contract::Event<&P, Sent, N> {
9650            self.event_filter::<Sent>()
9651        }
9652        ///Creates a new event filter for the [`Transfer`] event.
9653        pub fn Transfer_filter(&self) -> alloy_contract::Event<&P, Transfer, N> {
9654            self.event_filter::<Transfer>()
9655        }
9656    }
9657}