hopr_bindings/codegen/
hoprchannels.rs

1///Module containing a contract's types and functions.
2/**
3
4```solidity
5library HoprCrypto {
6    struct CompactSignature { bytes32 r; bytes32 vs; }
7    struct VRFParameters { uint256 vx; uint256 vy; uint256 s; uint256 h; uint256 sBx; uint256 sBy; uint256 hVx; uint256 hVy; }
8}
9```*/
10#[allow(
11    non_camel_case_types,
12    non_snake_case,
13    clippy::pub_underscore_fields,
14    clippy::style,
15    clippy::empty_structs_with_brackets
16)]
17pub mod HoprCrypto {
18    use super::*;
19    use alloy::sol_types as alloy_sol_types;
20    #[derive(serde::Serialize, serde::Deserialize)]
21    #[derive(Default, Debug, PartialEq, Eq, Hash)]
22    /**```solidity
23struct CompactSignature { bytes32 r; bytes32 vs; }
24```*/
25    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
26    #[derive(Clone)]
27    pub struct CompactSignature {
28        #[allow(missing_docs)]
29        pub r: alloy::sol_types::private::FixedBytes<32>,
30        #[allow(missing_docs)]
31        pub vs: alloy::sol_types::private::FixedBytes<32>,
32    }
33    #[allow(
34        non_camel_case_types,
35        non_snake_case,
36        clippy::pub_underscore_fields,
37        clippy::style
38    )]
39    const _: () = {
40        use alloy::sol_types as alloy_sol_types;
41        #[doc(hidden)]
42        type UnderlyingSolTuple<'a> = (
43            alloy::sol_types::sol_data::FixedBytes<32>,
44            alloy::sol_types::sol_data::FixedBytes<32>,
45        );
46        #[doc(hidden)]
47        type UnderlyingRustTuple<'a> = (
48            alloy::sol_types::private::FixedBytes<32>,
49            alloy::sol_types::private::FixedBytes<32>,
50        );
51        #[cfg(test)]
52        #[allow(dead_code, unreachable_patterns)]
53        fn _type_assertion(
54            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
55        ) {
56            match _t {
57                alloy_sol_types::private::AssertTypeEq::<
58                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
59                >(_) => {}
60            }
61        }
62        #[automatically_derived]
63        #[doc(hidden)]
64        impl ::core::convert::From<CompactSignature> for UnderlyingRustTuple<'_> {
65            fn from(value: CompactSignature) -> Self {
66                (value.r, value.vs)
67            }
68        }
69        #[automatically_derived]
70        #[doc(hidden)]
71        impl ::core::convert::From<UnderlyingRustTuple<'_>> for CompactSignature {
72            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
73                Self { r: tuple.0, vs: tuple.1 }
74            }
75        }
76        #[automatically_derived]
77        impl alloy_sol_types::SolValue for CompactSignature {
78            type SolType = Self;
79        }
80        #[automatically_derived]
81        impl alloy_sol_types::private::SolTypeValue<Self> for CompactSignature {
82            #[inline]
83            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
84                (
85                    <alloy::sol_types::sol_data::FixedBytes<
86                        32,
87                    > as alloy_sol_types::SolType>::tokenize(&self.r),
88                    <alloy::sol_types::sol_data::FixedBytes<
89                        32,
90                    > as alloy_sol_types::SolType>::tokenize(&self.vs),
91                )
92            }
93            #[inline]
94            fn stv_abi_encoded_size(&self) -> usize {
95                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
96                    return size;
97                }
98                let tuple = <UnderlyingRustTuple<
99                    '_,
100                > as ::core::convert::From<Self>>::from(self.clone());
101                <UnderlyingSolTuple<
102                    '_,
103                > as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
104            }
105            #[inline]
106            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
107                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
108            }
109            #[inline]
110            fn stv_abi_encode_packed_to(
111                &self,
112                out: &mut alloy_sol_types::private::Vec<u8>,
113            ) {
114                let tuple = <UnderlyingRustTuple<
115                    '_,
116                > as ::core::convert::From<Self>>::from(self.clone());
117                <UnderlyingSolTuple<
118                    '_,
119                > as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out)
120            }
121            #[inline]
122            fn stv_abi_packed_encoded_size(&self) -> usize {
123                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
124                    return size;
125                }
126                let tuple = <UnderlyingRustTuple<
127                    '_,
128                > as ::core::convert::From<Self>>::from(self.clone());
129                <UnderlyingSolTuple<
130                    '_,
131                > as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple)
132            }
133        }
134        #[automatically_derived]
135        impl alloy_sol_types::SolType for CompactSignature {
136            type RustType = Self;
137            type Token<'a> = <UnderlyingSolTuple<
138                'a,
139            > as alloy_sol_types::SolType>::Token<'a>;
140            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
141            const ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
142                '_,
143            > as alloy_sol_types::SolType>::ENCODED_SIZE;
144            const PACKED_ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
145                '_,
146            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
147            #[inline]
148            fn valid_token(token: &Self::Token<'_>) -> bool {
149                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
150            }
151            #[inline]
152            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
153                let tuple = <UnderlyingSolTuple<
154                    '_,
155                > as alloy_sol_types::SolType>::detokenize(token);
156                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
157            }
158        }
159        #[automatically_derived]
160        impl alloy_sol_types::SolStruct for CompactSignature {
161            const NAME: &'static str = "CompactSignature";
162            #[inline]
163            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
164                alloy_sol_types::private::Cow::Borrowed(
165                    "CompactSignature(bytes32 r,bytes32 vs)",
166                )
167            }
168            #[inline]
169            fn eip712_components() -> alloy_sol_types::private::Vec<
170                alloy_sol_types::private::Cow<'static, str>,
171            > {
172                alloy_sol_types::private::Vec::new()
173            }
174            #[inline]
175            fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> {
176                <Self as alloy_sol_types::SolStruct>::eip712_root_type()
177            }
178            #[inline]
179            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
180                [
181                    <alloy::sol_types::sol_data::FixedBytes<
182                        32,
183                    > as alloy_sol_types::SolType>::eip712_data_word(&self.r)
184                        .0,
185                    <alloy::sol_types::sol_data::FixedBytes<
186                        32,
187                    > as alloy_sol_types::SolType>::eip712_data_word(&self.vs)
188                        .0,
189                ]
190                    .concat()
191            }
192        }
193        #[automatically_derived]
194        impl alloy_sol_types::EventTopic for CompactSignature {
195            #[inline]
196            fn topic_preimage_length(rust: &Self::RustType) -> usize {
197                0usize
198                    + <alloy::sol_types::sol_data::FixedBytes<
199                        32,
200                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.r)
201                    + <alloy::sol_types::sol_data::FixedBytes<
202                        32,
203                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.vs)
204            }
205            #[inline]
206            fn encode_topic_preimage(
207                rust: &Self::RustType,
208                out: &mut alloy_sol_types::private::Vec<u8>,
209            ) {
210                out.reserve(
211                    <Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust),
212                );
213                <alloy::sol_types::sol_data::FixedBytes<
214                    32,
215                > as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.r, out);
216                <alloy::sol_types::sol_data::FixedBytes<
217                    32,
218                > as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.vs, out);
219            }
220            #[inline]
221            fn encode_topic(
222                rust: &Self::RustType,
223            ) -> alloy_sol_types::abi::token::WordToken {
224                let mut out = alloy_sol_types::private::Vec::new();
225                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(
226                    rust,
227                    &mut out,
228                );
229                alloy_sol_types::abi::token::WordToken(
230                    alloy_sol_types::private::keccak256(out),
231                )
232            }
233        }
234    };
235    #[derive(serde::Serialize, serde::Deserialize)]
236    #[derive(Default, Debug, PartialEq, Eq, Hash)]
237    /**```solidity
238struct VRFParameters { uint256 vx; uint256 vy; uint256 s; uint256 h; uint256 sBx; uint256 sBy; uint256 hVx; uint256 hVy; }
239```*/
240    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
241    #[derive(Clone)]
242    pub struct VRFParameters {
243        #[allow(missing_docs)]
244        pub vx: alloy::sol_types::private::primitives::aliases::U256,
245        #[allow(missing_docs)]
246        pub vy: alloy::sol_types::private::primitives::aliases::U256,
247        #[allow(missing_docs)]
248        pub s: alloy::sol_types::private::primitives::aliases::U256,
249        #[allow(missing_docs)]
250        pub h: alloy::sol_types::private::primitives::aliases::U256,
251        #[allow(missing_docs)]
252        pub sBx: alloy::sol_types::private::primitives::aliases::U256,
253        #[allow(missing_docs)]
254        pub sBy: alloy::sol_types::private::primitives::aliases::U256,
255        #[allow(missing_docs)]
256        pub hVx: alloy::sol_types::private::primitives::aliases::U256,
257        #[allow(missing_docs)]
258        pub hVy: alloy::sol_types::private::primitives::aliases::U256,
259    }
260    #[allow(
261        non_camel_case_types,
262        non_snake_case,
263        clippy::pub_underscore_fields,
264        clippy::style
265    )]
266    const _: () = {
267        use alloy::sol_types as alloy_sol_types;
268        #[doc(hidden)]
269        type UnderlyingSolTuple<'a> = (
270            alloy::sol_types::sol_data::Uint<256>,
271            alloy::sol_types::sol_data::Uint<256>,
272            alloy::sol_types::sol_data::Uint<256>,
273            alloy::sol_types::sol_data::Uint<256>,
274            alloy::sol_types::sol_data::Uint<256>,
275            alloy::sol_types::sol_data::Uint<256>,
276            alloy::sol_types::sol_data::Uint<256>,
277            alloy::sol_types::sol_data::Uint<256>,
278        );
279        #[doc(hidden)]
280        type UnderlyingRustTuple<'a> = (
281            alloy::sol_types::private::primitives::aliases::U256,
282            alloy::sol_types::private::primitives::aliases::U256,
283            alloy::sol_types::private::primitives::aliases::U256,
284            alloy::sol_types::private::primitives::aliases::U256,
285            alloy::sol_types::private::primitives::aliases::U256,
286            alloy::sol_types::private::primitives::aliases::U256,
287            alloy::sol_types::private::primitives::aliases::U256,
288            alloy::sol_types::private::primitives::aliases::U256,
289        );
290        #[cfg(test)]
291        #[allow(dead_code, unreachable_patterns)]
292        fn _type_assertion(
293            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
294        ) {
295            match _t {
296                alloy_sol_types::private::AssertTypeEq::<
297                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
298                >(_) => {}
299            }
300        }
301        #[automatically_derived]
302        #[doc(hidden)]
303        impl ::core::convert::From<VRFParameters> for UnderlyingRustTuple<'_> {
304            fn from(value: VRFParameters) -> Self {
305                (
306                    value.vx,
307                    value.vy,
308                    value.s,
309                    value.h,
310                    value.sBx,
311                    value.sBy,
312                    value.hVx,
313                    value.hVy,
314                )
315            }
316        }
317        #[automatically_derived]
318        #[doc(hidden)]
319        impl ::core::convert::From<UnderlyingRustTuple<'_>> for VRFParameters {
320            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
321                Self {
322                    vx: tuple.0,
323                    vy: tuple.1,
324                    s: tuple.2,
325                    h: tuple.3,
326                    sBx: tuple.4,
327                    sBy: tuple.5,
328                    hVx: tuple.6,
329                    hVy: tuple.7,
330                }
331            }
332        }
333        #[automatically_derived]
334        impl alloy_sol_types::SolValue for VRFParameters {
335            type SolType = Self;
336        }
337        #[automatically_derived]
338        impl alloy_sol_types::private::SolTypeValue<Self> for VRFParameters {
339            #[inline]
340            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
341                (
342                    <alloy::sol_types::sol_data::Uint<
343                        256,
344                    > as alloy_sol_types::SolType>::tokenize(&self.vx),
345                    <alloy::sol_types::sol_data::Uint<
346                        256,
347                    > as alloy_sol_types::SolType>::tokenize(&self.vy),
348                    <alloy::sol_types::sol_data::Uint<
349                        256,
350                    > as alloy_sol_types::SolType>::tokenize(&self.s),
351                    <alloy::sol_types::sol_data::Uint<
352                        256,
353                    > as alloy_sol_types::SolType>::tokenize(&self.h),
354                    <alloy::sol_types::sol_data::Uint<
355                        256,
356                    > as alloy_sol_types::SolType>::tokenize(&self.sBx),
357                    <alloy::sol_types::sol_data::Uint<
358                        256,
359                    > as alloy_sol_types::SolType>::tokenize(&self.sBy),
360                    <alloy::sol_types::sol_data::Uint<
361                        256,
362                    > as alloy_sol_types::SolType>::tokenize(&self.hVx),
363                    <alloy::sol_types::sol_data::Uint<
364                        256,
365                    > as alloy_sol_types::SolType>::tokenize(&self.hVy),
366                )
367            }
368            #[inline]
369            fn stv_abi_encoded_size(&self) -> usize {
370                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
371                    return size;
372                }
373                let tuple = <UnderlyingRustTuple<
374                    '_,
375                > as ::core::convert::From<Self>>::from(self.clone());
376                <UnderlyingSolTuple<
377                    '_,
378                > as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
379            }
380            #[inline]
381            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
382                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
383            }
384            #[inline]
385            fn stv_abi_encode_packed_to(
386                &self,
387                out: &mut alloy_sol_types::private::Vec<u8>,
388            ) {
389                let tuple = <UnderlyingRustTuple<
390                    '_,
391                > as ::core::convert::From<Self>>::from(self.clone());
392                <UnderlyingSolTuple<
393                    '_,
394                > as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out)
395            }
396            #[inline]
397            fn stv_abi_packed_encoded_size(&self) -> usize {
398                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
399                    return size;
400                }
401                let tuple = <UnderlyingRustTuple<
402                    '_,
403                > as ::core::convert::From<Self>>::from(self.clone());
404                <UnderlyingSolTuple<
405                    '_,
406                > as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple)
407            }
408        }
409        #[automatically_derived]
410        impl alloy_sol_types::SolType for VRFParameters {
411            type RustType = Self;
412            type Token<'a> = <UnderlyingSolTuple<
413                'a,
414            > as alloy_sol_types::SolType>::Token<'a>;
415            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
416            const ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
417                '_,
418            > as alloy_sol_types::SolType>::ENCODED_SIZE;
419            const PACKED_ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
420                '_,
421            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
422            #[inline]
423            fn valid_token(token: &Self::Token<'_>) -> bool {
424                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
425            }
426            #[inline]
427            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
428                let tuple = <UnderlyingSolTuple<
429                    '_,
430                > as alloy_sol_types::SolType>::detokenize(token);
431                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
432            }
433        }
434        #[automatically_derived]
435        impl alloy_sol_types::SolStruct for VRFParameters {
436            const NAME: &'static str = "VRFParameters";
437            #[inline]
438            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
439                alloy_sol_types::private::Cow::Borrowed(
440                    "VRFParameters(uint256 vx,uint256 vy,uint256 s,uint256 h,uint256 sBx,uint256 sBy,uint256 hVx,uint256 hVy)",
441                )
442            }
443            #[inline]
444            fn eip712_components() -> alloy_sol_types::private::Vec<
445                alloy_sol_types::private::Cow<'static, str>,
446            > {
447                alloy_sol_types::private::Vec::new()
448            }
449            #[inline]
450            fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> {
451                <Self as alloy_sol_types::SolStruct>::eip712_root_type()
452            }
453            #[inline]
454            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
455                [
456                    <alloy::sol_types::sol_data::Uint<
457                        256,
458                    > as alloy_sol_types::SolType>::eip712_data_word(&self.vx)
459                        .0,
460                    <alloy::sol_types::sol_data::Uint<
461                        256,
462                    > as alloy_sol_types::SolType>::eip712_data_word(&self.vy)
463                        .0,
464                    <alloy::sol_types::sol_data::Uint<
465                        256,
466                    > as alloy_sol_types::SolType>::eip712_data_word(&self.s)
467                        .0,
468                    <alloy::sol_types::sol_data::Uint<
469                        256,
470                    > as alloy_sol_types::SolType>::eip712_data_word(&self.h)
471                        .0,
472                    <alloy::sol_types::sol_data::Uint<
473                        256,
474                    > as alloy_sol_types::SolType>::eip712_data_word(&self.sBx)
475                        .0,
476                    <alloy::sol_types::sol_data::Uint<
477                        256,
478                    > as alloy_sol_types::SolType>::eip712_data_word(&self.sBy)
479                        .0,
480                    <alloy::sol_types::sol_data::Uint<
481                        256,
482                    > as alloy_sol_types::SolType>::eip712_data_word(&self.hVx)
483                        .0,
484                    <alloy::sol_types::sol_data::Uint<
485                        256,
486                    > as alloy_sol_types::SolType>::eip712_data_word(&self.hVy)
487                        .0,
488                ]
489                    .concat()
490            }
491        }
492        #[automatically_derived]
493        impl alloy_sol_types::EventTopic for VRFParameters {
494            #[inline]
495            fn topic_preimage_length(rust: &Self::RustType) -> usize {
496                0usize
497                    + <alloy::sol_types::sol_data::Uint<
498                        256,
499                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.vx)
500                    + <alloy::sol_types::sol_data::Uint<
501                        256,
502                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.vy)
503                    + <alloy::sol_types::sol_data::Uint<
504                        256,
505                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.s)
506                    + <alloy::sol_types::sol_data::Uint<
507                        256,
508                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.h)
509                    + <alloy::sol_types::sol_data::Uint<
510                        256,
511                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.sBx)
512                    + <alloy::sol_types::sol_data::Uint<
513                        256,
514                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.sBy)
515                    + <alloy::sol_types::sol_data::Uint<
516                        256,
517                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.hVx)
518                    + <alloy::sol_types::sol_data::Uint<
519                        256,
520                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.hVy)
521            }
522            #[inline]
523            fn encode_topic_preimage(
524                rust: &Self::RustType,
525                out: &mut alloy_sol_types::private::Vec<u8>,
526            ) {
527                out.reserve(
528                    <Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust),
529                );
530                <alloy::sol_types::sol_data::Uint<
531                    256,
532                > as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.vx, out);
533                <alloy::sol_types::sol_data::Uint<
534                    256,
535                > as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.vy, out);
536                <alloy::sol_types::sol_data::Uint<
537                    256,
538                > as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.s, out);
539                <alloy::sol_types::sol_data::Uint<
540                    256,
541                > as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.h, out);
542                <alloy::sol_types::sol_data::Uint<
543                    256,
544                > as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.sBx, out);
545                <alloy::sol_types::sol_data::Uint<
546                    256,
547                > as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.sBy, out);
548                <alloy::sol_types::sol_data::Uint<
549                    256,
550                > as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.hVx, out);
551                <alloy::sol_types::sol_data::Uint<
552                    256,
553                > as alloy_sol_types::EventTopic>::encode_topic_preimage(&rust.hVy, out);
554            }
555            #[inline]
556            fn encode_topic(
557                rust: &Self::RustType,
558            ) -> alloy_sol_types::abi::token::WordToken {
559                let mut out = alloy_sol_types::private::Vec::new();
560                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(
561                    rust,
562                    &mut out,
563                );
564                alloy_sol_types::abi::token::WordToken(
565                    alloy_sol_types::private::keccak256(out),
566                )
567            }
568        }
569    };
570    use alloy::contract as alloy_contract;
571    /**Creates a new wrapper around an on-chain [`HoprCrypto`](self) contract instance.
572
573See the [wrapper's documentation](`HoprCryptoInstance`) for more details.*/
574    #[inline]
575    pub const fn new<
576        P: alloy_contract::private::Provider<N>,
577        N: alloy_contract::private::Network,
578    >(
579        address: alloy_sol_types::private::Address,
580        provider: P,
581    ) -> HoprCryptoInstance<P, N> {
582        HoprCryptoInstance::<P, N>::new(address, provider)
583    }
584    /**A [`HoprCrypto`](self) instance.
585
586Contains type-safe methods for interacting with an on-chain instance of the
587[`HoprCrypto`](self) contract located at a given `address`, using a given
588provider `P`.
589
590If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
591documentation on how to provide it), the `deploy` and `deploy_builder` methods can
592be used to deploy a new instance of the contract.
593
594See the [module-level documentation](self) for all the available methods.*/
595    #[derive(Clone)]
596    pub struct HoprCryptoInstance<P, N = alloy_contract::private::Ethereum> {
597        address: alloy_sol_types::private::Address,
598        provider: P,
599        _network: ::core::marker::PhantomData<N>,
600    }
601    #[automatically_derived]
602    impl<P, N> ::core::fmt::Debug for HoprCryptoInstance<P, N> {
603        #[inline]
604        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
605            f.debug_tuple("HoprCryptoInstance").field(&self.address).finish()
606        }
607    }
608    /// Instantiation and getters/setters.
609    #[automatically_derived]
610    impl<
611        P: alloy_contract::private::Provider<N>,
612        N: alloy_contract::private::Network,
613    > HoprCryptoInstance<P, N> {
614        /**Creates a new wrapper around an on-chain [`HoprCrypto`](self) contract instance.
615
616See the [wrapper's documentation](`HoprCryptoInstance`) for more details.*/
617        #[inline]
618        pub const fn new(
619            address: alloy_sol_types::private::Address,
620            provider: P,
621        ) -> Self {
622            Self {
623                address,
624                provider,
625                _network: ::core::marker::PhantomData,
626            }
627        }
628        /// Returns a reference to the address.
629        #[inline]
630        pub const fn address(&self) -> &alloy_sol_types::private::Address {
631            &self.address
632        }
633        /// Sets the address.
634        #[inline]
635        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
636            self.address = address;
637        }
638        /// Sets the address and returns `self`.
639        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
640            self.set_address(address);
641            self
642        }
643        /// Returns a reference to the provider.
644        #[inline]
645        pub const fn provider(&self) -> &P {
646            &self.provider
647        }
648    }
649    impl<P: ::core::clone::Clone, N> HoprCryptoInstance<&P, N> {
650        /// Clones the provider and returns a new instance with the cloned provider.
651        #[inline]
652        pub fn with_cloned_provider(self) -> HoprCryptoInstance<P, N> {
653            HoprCryptoInstance {
654                address: self.address,
655                provider: ::core::clone::Clone::clone(&self.provider),
656                _network: ::core::marker::PhantomData,
657            }
658        }
659    }
660    /// Function calls.
661    #[automatically_derived]
662    impl<
663        P: alloy_contract::private::Provider<N>,
664        N: alloy_contract::private::Network,
665    > HoprCryptoInstance<P, N> {
666        /// Creates a new call builder using this contract instance's provider and address.
667        ///
668        /// Note that the call can be any function call, not just those defined in this
669        /// contract. Prefer using the other methods for building type-safe contract calls.
670        pub fn call_builder<C: alloy_sol_types::SolCall>(
671            &self,
672            call: &C,
673        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
674            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
675        }
676    }
677    /// Event filters.
678    #[automatically_derived]
679    impl<
680        P: alloy_contract::private::Provider<N>,
681        N: alloy_contract::private::Network,
682    > HoprCryptoInstance<P, N> {
683        /// Creates a new event filter using this contract instance's provider and address.
684        ///
685        /// Note that the type can be any event, not just those defined in this contract.
686        /// Prefer using the other methods for building type-safe event filters.
687        pub fn event_filter<E: alloy_sol_types::SolEvent>(
688            &self,
689        ) -> alloy_contract::Event<&P, E, N> {
690            alloy_contract::Event::new_sol(&self.provider, &self.address)
691        }
692    }
693}
694/**
695
696Generated by the following Solidity interface...
697```solidity
698library HoprCrypto {
699    struct CompactSignature {
700        bytes32 r;
701        bytes32 vs;
702    }
703    struct VRFParameters {
704        uint256 vx;
705        uint256 vy;
706        uint256 s;
707        uint256 h;
708        uint256 sBx;
709        uint256 sBy;
710        uint256 hVx;
711        uint256 hVy;
712    }
713}
714
715interface HoprChannels {
716    type ChannelStatus is uint8;
717    type Balance is uint96;
718    type ChannelEpoch is uint24;
719    type TicketIndex is uint48;
720    type TicketIndexOffset is uint32;
721    type Timestamp is uint32;
722    type WinProb is uint56;
723    struct RedeemableTicket {
724        TicketData data;
725        HoprCrypto.CompactSignature signature;
726        uint256 porSecret;
727    }
728    struct TicketData {
729        bytes32 channelId;
730        Balance amount;
731        TicketIndex ticketIndex;
732        TicketIndexOffset indexOffset;
733        ChannelEpoch epoch;
734        WinProb winProb;
735    }
736
737    error AlreadyInitialized();
738    error BalanceExceedsGlobalPerChannelAllowance();
739    error ContractNotResponsible();
740    error InsufficientChannelBalance();
741    error InvalidAggregatedTicketInterval();
742    error InvalidBalance();
743    error InvalidCurvePoint();
744    error InvalidFieldElement();
745    error InvalidNoticePeriod();
746    error InvalidPointWitness();
747    error InvalidSafeAddress();
748    error InvalidTicketSignature();
749    error InvalidTokenRecipient();
750    error InvalidTokensReceivedUsage();
751    error InvalidVRFProof();
752    error MultiSigUninitialized();
753    error NoticePeriodNotDue();
754    error SourceEqualsDestination();
755    error TicketIsNotAWin();
756    error TokenTransferFailed();
757    error WrongChannelState(string reason);
758    error WrongToken();
759    error ZeroAddress(string reason);
760
761    event ChannelBalanceDecreased(bytes32 indexed channelId, Balance newBalance);
762    event ChannelBalanceIncreased(bytes32 indexed channelId, Balance newBalance);
763    event ChannelClosed(bytes32 indexed channelId);
764    event ChannelOpened(address indexed source, address indexed destination);
765    event DomainSeparatorUpdated(bytes32 indexed domainSeparator);
766    event LedgerDomainSeparatorUpdated(bytes32 indexed ledgerDomainSeparator);
767    event OutgoingChannelClosureInitiated(bytes32 indexed channelId, Timestamp closureTime);
768    event TicketRedeemed(bytes32 indexed channelId, TicketIndex newTicketIndex);
769
770    constructor(address _token, Timestamp _noticePeriodChannelClosure, address _safeRegistry);
771
772    function ERC777_HOOK_FUND_CHANNEL_MULTI_SIZE() external view returns (uint256);
773    function ERC777_HOOK_FUND_CHANNEL_SIZE() external view returns (uint256);
774    function LEDGER_VERSION() external view returns (string memory);
775    function MAX_USED_BALANCE() external view returns (Balance);
776    function MIN_USED_BALANCE() external view returns (Balance);
777    function TOKENS_RECIPIENT_INTERFACE_HASH() external view returns (bytes32);
778    function VERSION() external view returns (string memory);
779    function _currentBlockTimestamp() external view returns (Timestamp);
780    function _getChannelId(address source, address destination) external pure returns (bytes32);
781    function _getTicketHash(RedeemableTicket memory redeemable) external view returns (bytes32);
782    function _isWinningTicket(bytes32 ticketHash, RedeemableTicket memory redeemable, HoprCrypto.VRFParameters memory params) external pure returns (bool);
783    function canImplementInterfaceForAddress(bytes32 interfaceHash, address account) external view returns (bytes32);
784    function channels(bytes32) external view returns (Balance balance, TicketIndex ticketIndex, Timestamp closureTime, ChannelEpoch epoch, ChannelStatus status);
785    function closeIncomingChannel(address source) external;
786    function closeIncomingChannelSafe(address selfAddress, address source) external;
787    function domainSeparator() external view returns (bytes32);
788    function finalizeOutgoingChannelClosure(address destination) external;
789    function finalizeOutgoingChannelClosureSafe(address selfAddress, address destination) external;
790    function fundChannel(address account, Balance amount) external;
791    function fundChannelSafe(address selfAddress, address account, Balance amount) external;
792    function initiateOutgoingChannelClosure(address destination) external;
793    function initiateOutgoingChannelClosureSafe(address selfAddress, address destination) external;
794    function ledgerDomainSeparator() external view returns (bytes32);
795    function multicall(bytes[] memory data) external returns (bytes[] memory results);
796    function noticePeriodChannelClosure() external view returns (Timestamp);
797    function redeemTicket(RedeemableTicket memory redeemable, HoprCrypto.VRFParameters memory params) external;
798    function redeemTicketSafe(address selfAddress, RedeemableTicket memory redeemable, HoprCrypto.VRFParameters memory params) external;
799    function token() external view returns (address);
800    function tokensReceived(address, address from, address to, uint256 amount, bytes memory userData, bytes memory) external;
801    function updateDomainSeparator() external;
802    function updateLedgerDomainSeparator() external;
803}
804```
805
806...which was generated by the following JSON ABI:
807```json
808[
809  {
810    "type": "constructor",
811    "inputs": [
812      {
813        "name": "_token",
814        "type": "address",
815        "internalType": "address"
816      },
817      {
818        "name": "_noticePeriodChannelClosure",
819        "type": "uint32",
820        "internalType": "HoprChannels.Timestamp"
821      },
822      {
823        "name": "_safeRegistry",
824        "type": "address",
825        "internalType": "contract HoprNodeSafeRegistry"
826      }
827    ],
828    "stateMutability": "nonpayable"
829  },
830  {
831    "type": "function",
832    "name": "ERC777_HOOK_FUND_CHANNEL_MULTI_SIZE",
833    "inputs": [],
834    "outputs": [
835      {
836        "name": "",
837        "type": "uint256",
838        "internalType": "uint256"
839      }
840    ],
841    "stateMutability": "view"
842  },
843  {
844    "type": "function",
845    "name": "ERC777_HOOK_FUND_CHANNEL_SIZE",
846    "inputs": [],
847    "outputs": [
848      {
849        "name": "",
850        "type": "uint256",
851        "internalType": "uint256"
852      }
853    ],
854    "stateMutability": "view"
855  },
856  {
857    "type": "function",
858    "name": "LEDGER_VERSION",
859    "inputs": [],
860    "outputs": [
861      {
862        "name": "",
863        "type": "string",
864        "internalType": "string"
865      }
866    ],
867    "stateMutability": "view"
868  },
869  {
870    "type": "function",
871    "name": "MAX_USED_BALANCE",
872    "inputs": [],
873    "outputs": [
874      {
875        "name": "",
876        "type": "uint96",
877        "internalType": "HoprChannels.Balance"
878      }
879    ],
880    "stateMutability": "view"
881  },
882  {
883    "type": "function",
884    "name": "MIN_USED_BALANCE",
885    "inputs": [],
886    "outputs": [
887      {
888        "name": "",
889        "type": "uint96",
890        "internalType": "HoprChannels.Balance"
891      }
892    ],
893    "stateMutability": "view"
894  },
895  {
896    "type": "function",
897    "name": "TOKENS_RECIPIENT_INTERFACE_HASH",
898    "inputs": [],
899    "outputs": [
900      {
901        "name": "",
902        "type": "bytes32",
903        "internalType": "bytes32"
904      }
905    ],
906    "stateMutability": "view"
907  },
908  {
909    "type": "function",
910    "name": "VERSION",
911    "inputs": [],
912    "outputs": [
913      {
914        "name": "",
915        "type": "string",
916        "internalType": "string"
917      }
918    ],
919    "stateMutability": "view"
920  },
921  {
922    "type": "function",
923    "name": "_currentBlockTimestamp",
924    "inputs": [],
925    "outputs": [
926      {
927        "name": "",
928        "type": "uint32",
929        "internalType": "HoprChannels.Timestamp"
930      }
931    ],
932    "stateMutability": "view"
933  },
934  {
935    "type": "function",
936    "name": "_getChannelId",
937    "inputs": [
938      {
939        "name": "source",
940        "type": "address",
941        "internalType": "address"
942      },
943      {
944        "name": "destination",
945        "type": "address",
946        "internalType": "address"
947      }
948    ],
949    "outputs": [
950      {
951        "name": "",
952        "type": "bytes32",
953        "internalType": "bytes32"
954      }
955    ],
956    "stateMutability": "pure"
957  },
958  {
959    "type": "function",
960    "name": "_getTicketHash",
961    "inputs": [
962      {
963        "name": "redeemable",
964        "type": "tuple",
965        "internalType": "struct HoprChannels.RedeemableTicket",
966        "components": [
967          {
968            "name": "data",
969            "type": "tuple",
970            "internalType": "struct HoprChannels.TicketData",
971            "components": [
972              {
973                "name": "channelId",
974                "type": "bytes32",
975                "internalType": "bytes32"
976              },
977              {
978                "name": "amount",
979                "type": "uint96",
980                "internalType": "HoprChannels.Balance"
981              },
982              {
983                "name": "ticketIndex",
984                "type": "uint48",
985                "internalType": "HoprChannels.TicketIndex"
986              },
987              {
988                "name": "indexOffset",
989                "type": "uint32",
990                "internalType": "HoprChannels.TicketIndexOffset"
991              },
992              {
993                "name": "epoch",
994                "type": "uint24",
995                "internalType": "HoprChannels.ChannelEpoch"
996              },
997              {
998                "name": "winProb",
999                "type": "uint56",
1000                "internalType": "HoprChannels.WinProb"
1001              }
1002            ]
1003          },
1004          {
1005            "name": "signature",
1006            "type": "tuple",
1007            "internalType": "struct HoprCrypto.CompactSignature",
1008            "components": [
1009              {
1010                "name": "r",
1011                "type": "bytes32",
1012                "internalType": "bytes32"
1013              },
1014              {
1015                "name": "vs",
1016                "type": "bytes32",
1017                "internalType": "bytes32"
1018              }
1019            ]
1020          },
1021          {
1022            "name": "porSecret",
1023            "type": "uint256",
1024            "internalType": "uint256"
1025          }
1026        ]
1027      }
1028    ],
1029    "outputs": [
1030      {
1031        "name": "",
1032        "type": "bytes32",
1033        "internalType": "bytes32"
1034      }
1035    ],
1036    "stateMutability": "view"
1037  },
1038  {
1039    "type": "function",
1040    "name": "_isWinningTicket",
1041    "inputs": [
1042      {
1043        "name": "ticketHash",
1044        "type": "bytes32",
1045        "internalType": "bytes32"
1046      },
1047      {
1048        "name": "redeemable",
1049        "type": "tuple",
1050        "internalType": "struct HoprChannels.RedeemableTicket",
1051        "components": [
1052          {
1053            "name": "data",
1054            "type": "tuple",
1055            "internalType": "struct HoprChannels.TicketData",
1056            "components": [
1057              {
1058                "name": "channelId",
1059                "type": "bytes32",
1060                "internalType": "bytes32"
1061              },
1062              {
1063                "name": "amount",
1064                "type": "uint96",
1065                "internalType": "HoprChannels.Balance"
1066              },
1067              {
1068                "name": "ticketIndex",
1069                "type": "uint48",
1070                "internalType": "HoprChannels.TicketIndex"
1071              },
1072              {
1073                "name": "indexOffset",
1074                "type": "uint32",
1075                "internalType": "HoprChannels.TicketIndexOffset"
1076              },
1077              {
1078                "name": "epoch",
1079                "type": "uint24",
1080                "internalType": "HoprChannels.ChannelEpoch"
1081              },
1082              {
1083                "name": "winProb",
1084                "type": "uint56",
1085                "internalType": "HoprChannels.WinProb"
1086              }
1087            ]
1088          },
1089          {
1090            "name": "signature",
1091            "type": "tuple",
1092            "internalType": "struct HoprCrypto.CompactSignature",
1093            "components": [
1094              {
1095                "name": "r",
1096                "type": "bytes32",
1097                "internalType": "bytes32"
1098              },
1099              {
1100                "name": "vs",
1101                "type": "bytes32",
1102                "internalType": "bytes32"
1103              }
1104            ]
1105          },
1106          {
1107            "name": "porSecret",
1108            "type": "uint256",
1109            "internalType": "uint256"
1110          }
1111        ]
1112      },
1113      {
1114        "name": "params",
1115        "type": "tuple",
1116        "internalType": "struct HoprCrypto.VRFParameters",
1117        "components": [
1118          {
1119            "name": "vx",
1120            "type": "uint256",
1121            "internalType": "uint256"
1122          },
1123          {
1124            "name": "vy",
1125            "type": "uint256",
1126            "internalType": "uint256"
1127          },
1128          {
1129            "name": "s",
1130            "type": "uint256",
1131            "internalType": "uint256"
1132          },
1133          {
1134            "name": "h",
1135            "type": "uint256",
1136            "internalType": "uint256"
1137          },
1138          {
1139            "name": "sBx",
1140            "type": "uint256",
1141            "internalType": "uint256"
1142          },
1143          {
1144            "name": "sBy",
1145            "type": "uint256",
1146            "internalType": "uint256"
1147          },
1148          {
1149            "name": "hVx",
1150            "type": "uint256",
1151            "internalType": "uint256"
1152          },
1153          {
1154            "name": "hVy",
1155            "type": "uint256",
1156            "internalType": "uint256"
1157          }
1158        ]
1159      }
1160    ],
1161    "outputs": [
1162      {
1163        "name": "",
1164        "type": "bool",
1165        "internalType": "bool"
1166      }
1167    ],
1168    "stateMutability": "pure"
1169  },
1170  {
1171    "type": "function",
1172    "name": "canImplementInterfaceForAddress",
1173    "inputs": [
1174      {
1175        "name": "interfaceHash",
1176        "type": "bytes32",
1177        "internalType": "bytes32"
1178      },
1179      {
1180        "name": "account",
1181        "type": "address",
1182        "internalType": "address"
1183      }
1184    ],
1185    "outputs": [
1186      {
1187        "name": "",
1188        "type": "bytes32",
1189        "internalType": "bytes32"
1190      }
1191    ],
1192    "stateMutability": "view"
1193  },
1194  {
1195    "type": "function",
1196    "name": "channels",
1197    "inputs": [
1198      {
1199        "name": "",
1200        "type": "bytes32",
1201        "internalType": "bytes32"
1202      }
1203    ],
1204    "outputs": [
1205      {
1206        "name": "balance",
1207        "type": "uint96",
1208        "internalType": "HoprChannels.Balance"
1209      },
1210      {
1211        "name": "ticketIndex",
1212        "type": "uint48",
1213        "internalType": "HoprChannels.TicketIndex"
1214      },
1215      {
1216        "name": "closureTime",
1217        "type": "uint32",
1218        "internalType": "HoprChannels.Timestamp"
1219      },
1220      {
1221        "name": "epoch",
1222        "type": "uint24",
1223        "internalType": "HoprChannels.ChannelEpoch"
1224      },
1225      {
1226        "name": "status",
1227        "type": "uint8",
1228        "internalType": "enum HoprChannels.ChannelStatus"
1229      }
1230    ],
1231    "stateMutability": "view"
1232  },
1233  {
1234    "type": "function",
1235    "name": "closeIncomingChannel",
1236    "inputs": [
1237      {
1238        "name": "source",
1239        "type": "address",
1240        "internalType": "address"
1241      }
1242    ],
1243    "outputs": [],
1244    "stateMutability": "nonpayable"
1245  },
1246  {
1247    "type": "function",
1248    "name": "closeIncomingChannelSafe",
1249    "inputs": [
1250      {
1251        "name": "selfAddress",
1252        "type": "address",
1253        "internalType": "address"
1254      },
1255      {
1256        "name": "source",
1257        "type": "address",
1258        "internalType": "address"
1259      }
1260    ],
1261    "outputs": [],
1262    "stateMutability": "nonpayable"
1263  },
1264  {
1265    "type": "function",
1266    "name": "domainSeparator",
1267    "inputs": [],
1268    "outputs": [
1269      {
1270        "name": "",
1271        "type": "bytes32",
1272        "internalType": "bytes32"
1273      }
1274    ],
1275    "stateMutability": "view"
1276  },
1277  {
1278    "type": "function",
1279    "name": "finalizeOutgoingChannelClosure",
1280    "inputs": [
1281      {
1282        "name": "destination",
1283        "type": "address",
1284        "internalType": "address"
1285      }
1286    ],
1287    "outputs": [],
1288    "stateMutability": "nonpayable"
1289  },
1290  {
1291    "type": "function",
1292    "name": "finalizeOutgoingChannelClosureSafe",
1293    "inputs": [
1294      {
1295        "name": "selfAddress",
1296        "type": "address",
1297        "internalType": "address"
1298      },
1299      {
1300        "name": "destination",
1301        "type": "address",
1302        "internalType": "address"
1303      }
1304    ],
1305    "outputs": [],
1306    "stateMutability": "nonpayable"
1307  },
1308  {
1309    "type": "function",
1310    "name": "fundChannel",
1311    "inputs": [
1312      {
1313        "name": "account",
1314        "type": "address",
1315        "internalType": "address"
1316      },
1317      {
1318        "name": "amount",
1319        "type": "uint96",
1320        "internalType": "HoprChannels.Balance"
1321      }
1322    ],
1323    "outputs": [],
1324    "stateMutability": "nonpayable"
1325  },
1326  {
1327    "type": "function",
1328    "name": "fundChannelSafe",
1329    "inputs": [
1330      {
1331        "name": "selfAddress",
1332        "type": "address",
1333        "internalType": "address"
1334      },
1335      {
1336        "name": "account",
1337        "type": "address",
1338        "internalType": "address"
1339      },
1340      {
1341        "name": "amount",
1342        "type": "uint96",
1343        "internalType": "HoprChannels.Balance"
1344      }
1345    ],
1346    "outputs": [],
1347    "stateMutability": "nonpayable"
1348  },
1349  {
1350    "type": "function",
1351    "name": "initiateOutgoingChannelClosure",
1352    "inputs": [
1353      {
1354        "name": "destination",
1355        "type": "address",
1356        "internalType": "address"
1357      }
1358    ],
1359    "outputs": [],
1360    "stateMutability": "nonpayable"
1361  },
1362  {
1363    "type": "function",
1364    "name": "initiateOutgoingChannelClosureSafe",
1365    "inputs": [
1366      {
1367        "name": "selfAddress",
1368        "type": "address",
1369        "internalType": "address"
1370      },
1371      {
1372        "name": "destination",
1373        "type": "address",
1374        "internalType": "address"
1375      }
1376    ],
1377    "outputs": [],
1378    "stateMutability": "nonpayable"
1379  },
1380  {
1381    "type": "function",
1382    "name": "ledgerDomainSeparator",
1383    "inputs": [],
1384    "outputs": [
1385      {
1386        "name": "",
1387        "type": "bytes32",
1388        "internalType": "bytes32"
1389      }
1390    ],
1391    "stateMutability": "view"
1392  },
1393  {
1394    "type": "function",
1395    "name": "multicall",
1396    "inputs": [
1397      {
1398        "name": "data",
1399        "type": "bytes[]",
1400        "internalType": "bytes[]"
1401      }
1402    ],
1403    "outputs": [
1404      {
1405        "name": "results",
1406        "type": "bytes[]",
1407        "internalType": "bytes[]"
1408      }
1409    ],
1410    "stateMutability": "nonpayable"
1411  },
1412  {
1413    "type": "function",
1414    "name": "noticePeriodChannelClosure",
1415    "inputs": [],
1416    "outputs": [
1417      {
1418        "name": "",
1419        "type": "uint32",
1420        "internalType": "HoprChannels.Timestamp"
1421      }
1422    ],
1423    "stateMutability": "view"
1424  },
1425  {
1426    "type": "function",
1427    "name": "redeemTicket",
1428    "inputs": [
1429      {
1430        "name": "redeemable",
1431        "type": "tuple",
1432        "internalType": "struct HoprChannels.RedeemableTicket",
1433        "components": [
1434          {
1435            "name": "data",
1436            "type": "tuple",
1437            "internalType": "struct HoprChannels.TicketData",
1438            "components": [
1439              {
1440                "name": "channelId",
1441                "type": "bytes32",
1442                "internalType": "bytes32"
1443              },
1444              {
1445                "name": "amount",
1446                "type": "uint96",
1447                "internalType": "HoprChannels.Balance"
1448              },
1449              {
1450                "name": "ticketIndex",
1451                "type": "uint48",
1452                "internalType": "HoprChannels.TicketIndex"
1453              },
1454              {
1455                "name": "indexOffset",
1456                "type": "uint32",
1457                "internalType": "HoprChannels.TicketIndexOffset"
1458              },
1459              {
1460                "name": "epoch",
1461                "type": "uint24",
1462                "internalType": "HoprChannels.ChannelEpoch"
1463              },
1464              {
1465                "name": "winProb",
1466                "type": "uint56",
1467                "internalType": "HoprChannels.WinProb"
1468              }
1469            ]
1470          },
1471          {
1472            "name": "signature",
1473            "type": "tuple",
1474            "internalType": "struct HoprCrypto.CompactSignature",
1475            "components": [
1476              {
1477                "name": "r",
1478                "type": "bytes32",
1479                "internalType": "bytes32"
1480              },
1481              {
1482                "name": "vs",
1483                "type": "bytes32",
1484                "internalType": "bytes32"
1485              }
1486            ]
1487          },
1488          {
1489            "name": "porSecret",
1490            "type": "uint256",
1491            "internalType": "uint256"
1492          }
1493        ]
1494      },
1495      {
1496        "name": "params",
1497        "type": "tuple",
1498        "internalType": "struct HoprCrypto.VRFParameters",
1499        "components": [
1500          {
1501            "name": "vx",
1502            "type": "uint256",
1503            "internalType": "uint256"
1504          },
1505          {
1506            "name": "vy",
1507            "type": "uint256",
1508            "internalType": "uint256"
1509          },
1510          {
1511            "name": "s",
1512            "type": "uint256",
1513            "internalType": "uint256"
1514          },
1515          {
1516            "name": "h",
1517            "type": "uint256",
1518            "internalType": "uint256"
1519          },
1520          {
1521            "name": "sBx",
1522            "type": "uint256",
1523            "internalType": "uint256"
1524          },
1525          {
1526            "name": "sBy",
1527            "type": "uint256",
1528            "internalType": "uint256"
1529          },
1530          {
1531            "name": "hVx",
1532            "type": "uint256",
1533            "internalType": "uint256"
1534          },
1535          {
1536            "name": "hVy",
1537            "type": "uint256",
1538            "internalType": "uint256"
1539          }
1540        ]
1541      }
1542    ],
1543    "outputs": [],
1544    "stateMutability": "nonpayable"
1545  },
1546  {
1547    "type": "function",
1548    "name": "redeemTicketSafe",
1549    "inputs": [
1550      {
1551        "name": "selfAddress",
1552        "type": "address",
1553        "internalType": "address"
1554      },
1555      {
1556        "name": "redeemable",
1557        "type": "tuple",
1558        "internalType": "struct HoprChannels.RedeemableTicket",
1559        "components": [
1560          {
1561            "name": "data",
1562            "type": "tuple",
1563            "internalType": "struct HoprChannels.TicketData",
1564            "components": [
1565              {
1566                "name": "channelId",
1567                "type": "bytes32",
1568                "internalType": "bytes32"
1569              },
1570              {
1571                "name": "amount",
1572                "type": "uint96",
1573                "internalType": "HoprChannels.Balance"
1574              },
1575              {
1576                "name": "ticketIndex",
1577                "type": "uint48",
1578                "internalType": "HoprChannels.TicketIndex"
1579              },
1580              {
1581                "name": "indexOffset",
1582                "type": "uint32",
1583                "internalType": "HoprChannels.TicketIndexOffset"
1584              },
1585              {
1586                "name": "epoch",
1587                "type": "uint24",
1588                "internalType": "HoprChannels.ChannelEpoch"
1589              },
1590              {
1591                "name": "winProb",
1592                "type": "uint56",
1593                "internalType": "HoprChannels.WinProb"
1594              }
1595            ]
1596          },
1597          {
1598            "name": "signature",
1599            "type": "tuple",
1600            "internalType": "struct HoprCrypto.CompactSignature",
1601            "components": [
1602              {
1603                "name": "r",
1604                "type": "bytes32",
1605                "internalType": "bytes32"
1606              },
1607              {
1608                "name": "vs",
1609                "type": "bytes32",
1610                "internalType": "bytes32"
1611              }
1612            ]
1613          },
1614          {
1615            "name": "porSecret",
1616            "type": "uint256",
1617            "internalType": "uint256"
1618          }
1619        ]
1620      },
1621      {
1622        "name": "params",
1623        "type": "tuple",
1624        "internalType": "struct HoprCrypto.VRFParameters",
1625        "components": [
1626          {
1627            "name": "vx",
1628            "type": "uint256",
1629            "internalType": "uint256"
1630          },
1631          {
1632            "name": "vy",
1633            "type": "uint256",
1634            "internalType": "uint256"
1635          },
1636          {
1637            "name": "s",
1638            "type": "uint256",
1639            "internalType": "uint256"
1640          },
1641          {
1642            "name": "h",
1643            "type": "uint256",
1644            "internalType": "uint256"
1645          },
1646          {
1647            "name": "sBx",
1648            "type": "uint256",
1649            "internalType": "uint256"
1650          },
1651          {
1652            "name": "sBy",
1653            "type": "uint256",
1654            "internalType": "uint256"
1655          },
1656          {
1657            "name": "hVx",
1658            "type": "uint256",
1659            "internalType": "uint256"
1660          },
1661          {
1662            "name": "hVy",
1663            "type": "uint256",
1664            "internalType": "uint256"
1665          }
1666        ]
1667      }
1668    ],
1669    "outputs": [],
1670    "stateMutability": "nonpayable"
1671  },
1672  {
1673    "type": "function",
1674    "name": "token",
1675    "inputs": [],
1676    "outputs": [
1677      {
1678        "name": "",
1679        "type": "address",
1680        "internalType": "contract IERC20"
1681      }
1682    ],
1683    "stateMutability": "view"
1684  },
1685  {
1686    "type": "function",
1687    "name": "tokensReceived",
1688    "inputs": [
1689      {
1690        "name": "",
1691        "type": "address",
1692        "internalType": "address"
1693      },
1694      {
1695        "name": "from",
1696        "type": "address",
1697        "internalType": "address"
1698      },
1699      {
1700        "name": "to",
1701        "type": "address",
1702        "internalType": "address"
1703      },
1704      {
1705        "name": "amount",
1706        "type": "uint256",
1707        "internalType": "uint256"
1708      },
1709      {
1710        "name": "userData",
1711        "type": "bytes",
1712        "internalType": "bytes"
1713      },
1714      {
1715        "name": "",
1716        "type": "bytes",
1717        "internalType": "bytes"
1718      }
1719    ],
1720    "outputs": [],
1721    "stateMutability": "nonpayable"
1722  },
1723  {
1724    "type": "function",
1725    "name": "updateDomainSeparator",
1726    "inputs": [],
1727    "outputs": [],
1728    "stateMutability": "nonpayable"
1729  },
1730  {
1731    "type": "function",
1732    "name": "updateLedgerDomainSeparator",
1733    "inputs": [],
1734    "outputs": [],
1735    "stateMutability": "nonpayable"
1736  },
1737  {
1738    "type": "event",
1739    "name": "ChannelBalanceDecreased",
1740    "inputs": [
1741      {
1742        "name": "channelId",
1743        "type": "bytes32",
1744        "indexed": true,
1745        "internalType": "bytes32"
1746      },
1747      {
1748        "name": "newBalance",
1749        "type": "uint96",
1750        "indexed": false,
1751        "internalType": "HoprChannels.Balance"
1752      }
1753    ],
1754    "anonymous": false
1755  },
1756  {
1757    "type": "event",
1758    "name": "ChannelBalanceIncreased",
1759    "inputs": [
1760      {
1761        "name": "channelId",
1762        "type": "bytes32",
1763        "indexed": true,
1764        "internalType": "bytes32"
1765      },
1766      {
1767        "name": "newBalance",
1768        "type": "uint96",
1769        "indexed": false,
1770        "internalType": "HoprChannels.Balance"
1771      }
1772    ],
1773    "anonymous": false
1774  },
1775  {
1776    "type": "event",
1777    "name": "ChannelClosed",
1778    "inputs": [
1779      {
1780        "name": "channelId",
1781        "type": "bytes32",
1782        "indexed": true,
1783        "internalType": "bytes32"
1784      }
1785    ],
1786    "anonymous": false
1787  },
1788  {
1789    "type": "event",
1790    "name": "ChannelOpened",
1791    "inputs": [
1792      {
1793        "name": "source",
1794        "type": "address",
1795        "indexed": true,
1796        "internalType": "address"
1797      },
1798      {
1799        "name": "destination",
1800        "type": "address",
1801        "indexed": true,
1802        "internalType": "address"
1803      }
1804    ],
1805    "anonymous": false
1806  },
1807  {
1808    "type": "event",
1809    "name": "DomainSeparatorUpdated",
1810    "inputs": [
1811      {
1812        "name": "domainSeparator",
1813        "type": "bytes32",
1814        "indexed": true,
1815        "internalType": "bytes32"
1816      }
1817    ],
1818    "anonymous": false
1819  },
1820  {
1821    "type": "event",
1822    "name": "LedgerDomainSeparatorUpdated",
1823    "inputs": [
1824      {
1825        "name": "ledgerDomainSeparator",
1826        "type": "bytes32",
1827        "indexed": true,
1828        "internalType": "bytes32"
1829      }
1830    ],
1831    "anonymous": false
1832  },
1833  {
1834    "type": "event",
1835    "name": "OutgoingChannelClosureInitiated",
1836    "inputs": [
1837      {
1838        "name": "channelId",
1839        "type": "bytes32",
1840        "indexed": true,
1841        "internalType": "bytes32"
1842      },
1843      {
1844        "name": "closureTime",
1845        "type": "uint32",
1846        "indexed": false,
1847        "internalType": "HoprChannels.Timestamp"
1848      }
1849    ],
1850    "anonymous": false
1851  },
1852  {
1853    "type": "event",
1854    "name": "TicketRedeemed",
1855    "inputs": [
1856      {
1857        "name": "channelId",
1858        "type": "bytes32",
1859        "indexed": true,
1860        "internalType": "bytes32"
1861      },
1862      {
1863        "name": "newTicketIndex",
1864        "type": "uint48",
1865        "indexed": false,
1866        "internalType": "HoprChannels.TicketIndex"
1867      }
1868    ],
1869    "anonymous": false
1870  },
1871  {
1872    "type": "error",
1873    "name": "AlreadyInitialized",
1874    "inputs": []
1875  },
1876  {
1877    "type": "error",
1878    "name": "BalanceExceedsGlobalPerChannelAllowance",
1879    "inputs": []
1880  },
1881  {
1882    "type": "error",
1883    "name": "ContractNotResponsible",
1884    "inputs": []
1885  },
1886  {
1887    "type": "error",
1888    "name": "InsufficientChannelBalance",
1889    "inputs": []
1890  },
1891  {
1892    "type": "error",
1893    "name": "InvalidAggregatedTicketInterval",
1894    "inputs": []
1895  },
1896  {
1897    "type": "error",
1898    "name": "InvalidBalance",
1899    "inputs": []
1900  },
1901  {
1902    "type": "error",
1903    "name": "InvalidCurvePoint",
1904    "inputs": []
1905  },
1906  {
1907    "type": "error",
1908    "name": "InvalidFieldElement",
1909    "inputs": []
1910  },
1911  {
1912    "type": "error",
1913    "name": "InvalidNoticePeriod",
1914    "inputs": []
1915  },
1916  {
1917    "type": "error",
1918    "name": "InvalidPointWitness",
1919    "inputs": []
1920  },
1921  {
1922    "type": "error",
1923    "name": "InvalidSafeAddress",
1924    "inputs": []
1925  },
1926  {
1927    "type": "error",
1928    "name": "InvalidTicketSignature",
1929    "inputs": []
1930  },
1931  {
1932    "type": "error",
1933    "name": "InvalidTokenRecipient",
1934    "inputs": []
1935  },
1936  {
1937    "type": "error",
1938    "name": "InvalidTokensReceivedUsage",
1939    "inputs": []
1940  },
1941  {
1942    "type": "error",
1943    "name": "InvalidVRFProof",
1944    "inputs": []
1945  },
1946  {
1947    "type": "error",
1948    "name": "MultiSigUninitialized",
1949    "inputs": []
1950  },
1951  {
1952    "type": "error",
1953    "name": "NoticePeriodNotDue",
1954    "inputs": []
1955  },
1956  {
1957    "type": "error",
1958    "name": "SourceEqualsDestination",
1959    "inputs": []
1960  },
1961  {
1962    "type": "error",
1963    "name": "TicketIsNotAWin",
1964    "inputs": []
1965  },
1966  {
1967    "type": "error",
1968    "name": "TokenTransferFailed",
1969    "inputs": []
1970  },
1971  {
1972    "type": "error",
1973    "name": "WrongChannelState",
1974    "inputs": [
1975      {
1976        "name": "reason",
1977        "type": "string",
1978        "internalType": "string"
1979      }
1980    ]
1981  },
1982  {
1983    "type": "error",
1984    "name": "WrongToken",
1985    "inputs": []
1986  },
1987  {
1988    "type": "error",
1989    "name": "ZeroAddress",
1990    "inputs": [
1991      {
1992        "name": "reason",
1993        "type": "string",
1994        "internalType": "string"
1995      }
1996    ]
1997  }
1998]
1999```*/
2000#[allow(
2001    non_camel_case_types,
2002    non_snake_case,
2003    clippy::pub_underscore_fields,
2004    clippy::style,
2005    clippy::empty_structs_with_brackets
2006)]
2007pub mod HoprChannels {
2008    use super::*;
2009    use alloy::sol_types as alloy_sol_types;
2010    /// The creation / init bytecode of the contract.
2011    ///
2012    /// ```text
2013    ///0x6004805460ff60a01b191690556000610140819052610154819052610160819052610174819052604061012081905260a08190526101a08290526101b49190915260286101808190526101c890915260c0523480156200005e57600080fd5b5060405162004927380380620049278339810160408190526200008191620004e9565b6305265c0060808190526040516001600160601b03193060601b16602082015260340160408051808303601f190181529190528051602091820120901c600160e01b4263ffffffff90811682029290921760018190556001600160e01b038082169183900490931690910217600255620000fc906200024f16565b508163ffffffff16600003620001255760405163f9ee910760e01b815260040160405180910390fd5b6001600160a01b038316620001805760405162461bcd60e51b815260206004820152601760248201527f746f6b656e206d757374206e6f7420626520656d707479000000000000000000604482015260640160405180910390fd5b6200018b816200034e565b6001600160a01b03831660e05263ffffffff8216610100526040516329965a1d60e01b815230600482018190527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b60248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad24906329965a1d90606401600060405180830381600087803b1580156200021d57600080fd5b505af115801562000232573d6000803e3d6000fd5b5050505062000246620003ca60201b60201c565b50505062000545565b604080518082018252600a8152692437b8392632b233b2b960b11b6020918201528151808301835260058152640312e302e360dc1b90820152815160008051602062004907833981519152818301527f6cd681790c78c220517b099a737f8e85f69e797abe4e2910fb189b61db4bf2cd818401527f06c015bd22b4c69690933c1058878ebdfef31f9aaae40bbe86d8a09fe1b2972c60608201524660808201523060a0808301919091528351808303909101815260c0909101909252815191012060035481146200034b57600381905560405181907fa43fad83920fd09445855e854e73c9c532e17402c9ceb09993a2392843a5bdb990600090a25b50565b600454600160a01b900460ff1615620003795760405162dc149f60e41b815260040160405180910390fd5b6001600160a01b038116620003a15760405163474ebe2f60e11b815260040160405180910390fd5b600480546001600160a01b039092166001600160a81b031990921691909117600160a01b179055565b604080518082018252600c81526b486f70724368616e6e656c7360a01b6020918201528151808301835260058152640322e302e360dc1b90820152815160008051602062004907833981519152918101919091527f84e6908f343601d9ce9fb60d8250394eb8a51c56f1876bc1e017c97acd6567f2918101919091527fb4bcb154e38601c389396fa918314da42d4626f13ef6d0ceb07e5f5d26b2fbc360608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905060055481146200034b57600581905560405181907f771f5240ae5fd8a7640d3fb82fa70aab2fb1dbf35f2ef464f8509946717664c590600090a250565b6001600160a01b03811681146200034b57600080fd5b600080600060608486031215620004ff57600080fd5b83516200050c81620004d3565b602085015190935063ffffffff811681146200052757600080fd5b60408501519092506200053a81620004d3565b809150509250925092565b60805160a05160c05160e0516101005161433e620005c9600039600081816103d9015261262d0152600081816104d701528181610566015281816109120152818161160101528181612089015281816122f801526124dc0152600081816102a801526105d501526000818161032e015261073001526000612751015261433e6000f3fe608060405234801561001057600080fd5b50600436106101e45760003560e01c80637c8e28da1161010f578063c966c4fe116100a2578063fc0c546a11610071578063fc0c546a146104d2578063fc55309a14610511578063fcb7796f14610524578063ffa1ad741461053757600080fd5b8063c966c4fe14610487578063dc96fd5014610490578063ddad190214610498578063f698da25146104c957600080fd5b8063ac9650d8116100de578063ac9650d81461043b578063b920deed1461045b578063bda65f4514610461578063be9babdc1461047457600080fd5b80637c8e28da146103c157806387352d65146103d457806389ccfe89146104105780638c3710c91461041857600080fd5b806329392e3211610187578063651514bf11610156578063651514bf146102ef57806372581cc01461030257806378d8016d146103295780637a7ebd7b1461035057600080fd5b806329392e321461028357806344dae6f8146102a357806354a2edf5146102ca5780635d2f07c5146102dd57600080fd5b80631a7ffe7a116101c35780631a7ffe7a1461022457806323cb3ac01461023757806324086cc21461024a578063249cb3fa1461027057600080fd5b806223de29146101e95780630abec58f146101fe5780630cd88d7214610211575b600080fd5b6101fc6101f7366004613a87565b61055b565b005b6101fc61020c366004613b54565b610817565b6101fc61021f366004613bc7565b6109af565b6101fc610232366004613c07565b610a80565b6101fc610245366004613c07565b610b50565b61025d610258366004613c2b565b610c1d565b6040519081526020015b60405180910390f35b61025d61027e366004613c48565b610d8a565b61028b600181565b6040516001600160601b039091168152602001610267565b61025d7f000000000000000000000000000000000000000000000000000000000000000081565b6101fc6102d8366004613c78565b610de4565b61028b6a084595161401484a00000081565b6101fc6102fd366004613c78565b610eb9565b61025d7fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b81565b61025d7f000000000000000000000000000000000000000000000000000000000000000081565b6103b061035e366004613ca6565b6006602052600090815260409020546001600160601b03811690600160601b810465ffffffffffff1690600160901b810463ffffffff1690600160b01b810462ffffff1690600160c81b900460ff1685565b604051610267959493929190613cd5565b6101fc6103cf366004613c07565b610f89565b6103fb7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610267565b6101fc611056565b61042b610426366004613d38565b61116f565b6040519015158152602001610267565b61044e610449366004613d5f565b6111f1565b6040516102679190613e24565b426103fb565b6101fc61046f366004613c78565b6112e6565b61025d610482366004613c78565b6113b6565b61025d60035481565b6101fc6113fb565b6104bc604051806040016040528060058152602001640312e302e360dc1b81525081565b6040516102679190613e86565b61025d60055481565b6104f97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610267565b6101fc61051f366004613e99565b611509565b6101fc610532366004613ece565b61169c565b6104bc604051806040016040528060058152602001640322e302e360dc1b81525081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105a457604051635079ff7560e11b815260040160405180910390fd5b6001600160a01b03861630146105cd57604051631738922160e31b815260040160405180910390fd5b821561080d577f0000000000000000000000000000000000000000000000000000000000000000830361072e576001600160601b038511156106225760405163293ceef960e21b815260040160405180910390fd5b600480546040516302265e3160e61b81528635606090811c9382018490526014880135901c916000916001600160a01b03909116906389978c4090602401602060405180830381865afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a19190613efc565b9050826001600160a01b03168a6001600160a01b0316036106e9576001600160a01b038116156106e45760405163acd5a82360e01b815260040160405180910390fd5b61071b565b896001600160a01b0316816001600160a01b03161461071b5760405163acd5a82360e01b815260040160405180910390fd5b61072683838a61176a565b50505061080d565b7f000000000000000000000000000000000000000000000000000000000000000083036107f4578335606090811c90601486013560a090811c916020880135901c906034880135901c88158061079957506107956001600160601b03808316908516613f2f565b8914155b156107b75760405163c52e3eff60e01b815260040160405180910390fd5b6001600160601b038316156107d1576107d184838561176a565b6001600160601b038116156107eb576107eb82858361176a565b5050505061080d565b604051630d3dcde560e31b815260040160405180910390fd5b5050505050505050565b6004548390600160a01b900460ff16610843576040516308a9441960e31b815260040160405180910390fd5b600480546040516302265e3160e61b81526001600160a01b03848116938201939093523392909116906389978c4090602401602060405180830381865afa158015610892573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b69190613efc565b6001600160a01b0316146108dd5760405163acd5a82360e01b815260040160405180910390fd5b6108e884848461176a565b6040516323b872dd60e01b81523360048201523060248201526001600160601b03831660448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015610963573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109879190613f42565b15156001146109a95760405163022e258160e11b815260040160405180910390fd5b50505050565b6004548390600160a01b900460ff166109db576040516308a9441960e31b815260040160405180910390fd5b600480546040516302265e3160e61b81526001600160a01b03848116938201939093523392909116906389978c4090602401602060405180830381865afa158015610a2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4e9190613efc565b6001600160a01b031614610a755760405163acd5a82360e01b815260040160405180910390fd5b6109a9848484611b16565b600454600160a01b900460ff16610aaa576040516308a9441960e31b815260040160405180910390fd5b600480546040516302265e3160e61b815233928101929092526000916001600160a01b03909116906389978c4090602401602060405180830381865afa158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1c9190613efc565b6001600160a01b031614610b435760405163acd5a82360e01b815260040160405180910390fd5b610b4d3382612213565b50565b600454600160a01b900460ff16610b7a576040516308a9441960e31b815260040160405180910390fd5b600480546040516302265e3160e61b815233928101929092526000916001600160a01b03909116906389978c4090602401602060405180830381865afa158015610bc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bec9190613efc565b6001600160a01b031614610c135760405163acd5a82360e01b815260040160405180910390fd5b610b4d338261238f565b600080610c2e836101000135612513565b90506000610c4260c0850160a08601613f64565b66ffffffffffffff166038610c5d60a0870160808801613f8d565b62ffffff16901b6050610c766080880160608901613fb2565b63ffffffff16901b6070610c906060890160408a01613fd8565b65ffffffffffff16901b60a0610cac60408a0160208b01614000565b6001600160601b0316901b171717179050600063fcb7796f60e01b85600001600001358385604051602001610d0193929190928352602083019190915260601b6001600160601b031916604082015260540190565b60408051808303601f1901815282825280516020918201206001600160e01b0319949094168184015282820193909352805180830382018152606083018252805190840120600554601960f81b6080850152600160f81b6081850152608284015260a2808401919091528151808403909101815260c29092019052805191012095945050505050565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610db9576000610ddb565b7fa2ef4600d742022d532d4747cb3547474667d6f13804902513b2ec01c848f4b45b90505b92915050565b6004548290600160a01b900460ff16610e10576040516308a9441960e31b815260040160405180910390fd5b600480546040516302265e3160e61b81526001600160a01b03848116938201939093523392909116906389978c4090602401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190613efc565b6001600160a01b031614610eaa5760405163acd5a82360e01b815260040160405180910390fd5b610eb48383612213565b505050565b6004548290600160a01b900460ff16610ee5576040516308a9441960e31b815260040160405180910390fd5b600480546040516302265e3160e61b81526001600160a01b03848116938201939093523392909116906389978c4090602401602060405180830381865afa158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f589190613efc565b6001600160a01b031614610f7f5760405163acd5a82360e01b815260040160405180910390fd5b610eb4838361238f565b600454600160a01b900460ff16610fb3576040516308a9441960e31b815260040160405180910390fd5b600480546040516302265e3160e61b815233928101929092526000916001600160a01b03909116906389978c4090602401602060405180830381865afa158015611001573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110259190613efc565b6001600160a01b03161461104c5760405163acd5a82360e01b815260040160405180910390fd5b610b4d33826125d0565b604080518082018252600c81526b486f70724368616e6e656c7360a01b6020918201528151808301835260058152640322e302e360dc1b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527f84e6908f343601d9ce9fb60d8250394eb8a51c56f1876bc1e017c97acd6567f2918101919091527fb4bcb154e38601c389396fa918314da42d4626f13ef6d0ceb07e5f5d26b2fbc360608201524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090506005548114610b4d57600581905560405181907f771f5240ae5fd8a7640d3fb82fa70aab2fb1dbf35f2ef464f8509946717664c590600090a250565b604080516020808201869052833582840152838101356060830152610100850135608083015260c0808601803560a08086019190915260e0808901358487015286518087039094018452909401909452805191012060009260c89190911c916111da91908601613f64565b66ffffffffffffff90811691161115949350505050565b60608167ffffffffffffffff81111561120c5761120c61401b565b60405190808252806020026020018201604052801561123f57816020015b606081526020019060019003908161122a5790505b50905060005b828110156112df576112af3085858481811061126357611263614031565b90506020028101906112759190614047565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061272092505050565b8282815181106112c1576112c1614031565b602002602001018190525080806112d79061408e565b915050611245565b5092915050565b6004548290600160a01b900460ff16611312576040516308a9441960e31b815260040160405180910390fd5b600480546040516302265e3160e61b81526001600160a01b03848116938201939093523392909116906389978c4090602401602060405180830381865afa158015611361573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113859190613efc565b6001600160a01b0316146113ac5760405163acd5a82360e01b815260040160405180910390fd5b610eb483836125d0565b6040516001600160601b0319606084811b8216602084015283901b16603482015260009060480160405160208183030381529060405280519060200120905092915050565b604080518082018252600a8152692437b8392632b233b2b960b11b6020918201528151808301835260058152640312e302e360dc1b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f6cd681790c78c220517b099a737f8e85f69e797abe4e2910fb189b61db4bf2cd818401527f06c015bd22b4c69690933c1058878ebdfef31f9aaae40bbe86d8a09fe1b2972c60608201524660808201523060a0808301919091528351808303909101815260c090910190925281519101206003548114610b4d57600381905560405181907fa43fad83920fd09445855e854e73c9c532e17402c9ceb09993a2392843a5bdb990600090a250565b600454600160a01b900460ff16611533576040516308a9441960e31b815260040160405180910390fd5b600480546040516302265e3160e61b815233928101929092526000916001600160a01b03909116906389978c4090602401602060405180830381865afa158015611581573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a59190613efc565b6001600160a01b0316146115cc5760405163acd5a82360e01b815260040160405180910390fd5b6115d733838361176a565b6040516323b872dd60e01b81523360048201523060248201526001600160601b03821660448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015611652573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116769190613f42565b15156001146116985760405163022e258160e11b815260040160405180910390fd5b5050565b600454600160a01b900460ff166116c6576040516308a9441960e31b815260040160405180910390fd5b600480546040516302265e3160e61b815233928101929092526000916001600160a01b03909116906389978c4090602401602060405180830381865afa158015611714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117389190613efc565b6001600160a01b03161461175f5760405163acd5a82360e01b815260040160405180910390fd5b611698338383611b16565b8060016001600160601b03821610156117965760405163c52e3eff60e01b815260040160405180910390fd5b6a084595161401484a0000006001600160601b03821611156117cb5760405163293ceef960e21b815260040160405180910390fd5b8383806001600160a01b0316826001600160a01b0316036117ff57604051634bd1d76960e11b815260040160405180910390fd5b6001600160a01b03821661185b5760405163eac0d38960e01b815260206004820152601860248201527f736f75726365206d757374206e6f7420626520656d707479000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166118b25760405163eac0d38960e01b815260206004820152601d60248201527f64657374696e6174696f6e206d757374206e6f7420626520656d7074790000006044820152606401611852565b60006118be87876113b6565b600081815260066020526040902090915060028154600160c81b900460ff1660028111156118ee576118ee613cbf565b0361194f5760405163499463c160e01b815260206004820152602a60248201527f63616e6e6f742066756e642061206368616e6e656c20746861742077696c6c2060448201526931b637b9b29039b7b7b760b11b6064820152608401611852565b80546119659087906001600160601b03166140a7565b81546001600160601b0319166001600160601b039190911617815560008154600160c81b900460ff16600281111561199f5761199f613cbf565b03611aaa5780546119bd90600160b01b900462ffffff1660016140c7565b815462ffffff91909116600160b01b026dff00000000000000ffffffffffff60601b19166dffffffff00000000ffffffffffff60601b1990911617600160c81b178155604080517fdd90f938230335e59dc925c57ecb0e27a28c2d87356e31f00cd5554abd6c1b2d602082015260608a811b6001600160601b03199081169383019390935289901b9091166054820152611a69906068015b604051602081830303815290604052612745565b866001600160a01b0316886001600160a01b03167fdd90f938230335e59dc925c57ecb0e27a28c2d87356e31f00cd5554abd6c1b2d60405160405180910390a35b8054604051611add91611a55916000805160206142c98339815191529186916001600160601b03909116906020016140e3565b80546040516001600160601b03909116815282906000805160206142c98339815191529060200160405180910390a25050505050505050565b611b266040830160208401614000565b60016001600160601b0382161015611b515760405163c52e3eff60e01b815260040160405180910390fd5b6a084595161401484a0000006001600160601b0382161115611b865760405163293ceef960e21b815260040160405180910390fd5b826101000135611b958161282b565b611bb257604051633ae4ed6b60e01b815260040160405180910390fd5b8335600090815260066020526040902060018154600160c81b900460ff166002811115611be157611be1613cbf565b14158015611c0c575060028154600160c81b900460ff166002811115611c0957611c09613cbf565b14155b15611c745760405163499463c160e01b815260206004820152603160248201527f7370656e64696e67206368616e6e656c206d757374206265204f50454e206f726044820152702050454e44494e475f544f5f434c4f534560781b6064820152608401611852565b611c8460a0860160808701613f8d565b8154600160b01b900462ffffff908116911614611ce45760405163499463c160e01b815260206004820152601860248201527f6368616e6e656c2065706f6368206d757374206d6174636800000000000000006044820152606401611852565b6000611cf66060870160408801613fd8565b90506000611d0a6080880160608901613fb2565b8354909150600160601b900465ffffffffffff16600163ffffffff83161080611d4257508065ffffffffffff168365ffffffffffff16105b15611d605760405163686e1e0f60e11b815260040160405180910390fd5b611d706040890160208a01614000565b84546001600160601b0391821691161015611d9e57604051632c51d8db60e21b815260040160405180910390fd5b6000611da989610c1d565b9050611db6818a8a61116f565b611dd35760405163ee835c8960e01b815260040160405180910390fd5b600060405180606001604052808381526020018c6001600160a01b03168152602001600554604051602001611e0a91815260200190565b60408051601f1981840301815291905290529050611e36611e30368b90038b018b614106565b8261284d565b611e53576040516312bfb7b760e31b815260040160405180910390fd5b6000611e688360c08d013560e08e0135612ad6565b90508a35611e76828e6113b6565b14611e94576040516366eea9ab60e11b815260040160405180910390fd5b611ea463ffffffff8616876141a4565b875465ffffffffffff91909116600160601b0265ffffffffffff60601b19909116178755611ed860408c0160208d01614000565b8754611eed91906001600160601b03166141c3565b87546001600160601b0319166001600160601b03919091169081178855604051611f4291611a55917f22e2a422a8860656a3a33cfa1daf771e76798ce5649747957235025de12e0b24918f35916020016140e3565b86546040516001600160601b0390911681528b35907f22e2a422a8860656a3a33cfa1daf771e76798ce5649747957235025de12e0b249060200160405180910390a26000611f908d836113b6565b9050600060066000838152602001908152602001600020905061201c7f7165e2ebc7ce35cc98cb7666f9945b3617f3f36326b76d18937ba5fecf18739a8e600001600001358b600001600c9054906101000a900465ffffffffffff16604051602001611a5593929190928352602083019190915260d01b6001600160d01b031916604082015260460190565b8854604051600160601b90910465ffffffffffff1681528d35907f7165e2ebc7ce35cc98cb7666f9945b3617f3f36326b76d18937ba5fecf18739a9060200160405180910390a260008154600160c81b900460ff16600281111561208257612082613cbf565b0361216c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb338f60000160200160208101906120cd9190614000565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526001600160601b031660248201526044016020604051808303816000875af1158015612121573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121459190613f42565b15156001146121675760405163022e258160e11b815260040160405180910390fd5b612203565b61217c60408e0160208f01614000565b815461219191906001600160601b03166140a7565b81546001600160601b0319166001600160601b039190911690811782556040516121d391611a55916000805160206142c98339815191529186916020016140e3565b80546040516001600160601b03909116815282906000805160206142c98339815191529060200160405180910390a25b5050505050505050505050505050565b600061221f82846113b6565b60008181526006602052604081209192508154600160c81b900460ff16600281111561224d5761224d613cbf565b0361226b5760405163499463c160e01b8152600401611852906141e3565b8054600163ff00000160b01b031981168255604080516000805160206142e983398151915260208201529081018490526001600160601b03909116906122b390606001611a55565b60405183906000805160206142e983398151915290600090a280156123885760405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044015b6020604051808303816000875af1158015612342573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123669190613f42565b15156001146123885760405163022e258160e11b815260040160405180910390fd5b5050505050565b600061239b83836113b6565b600081815260066020526040902090915060028154600160c81b900460ff1660028111156123cb576123cb613cbf565b146124285760405163499463c160e01b815260206004820152602660248201527f6368616e6e656c207374617465206d7573742062652050454e44494e475f544f6044820152655f434c4f534560d01b6064820152608401611852565b805463ffffffff428116600160901b9092041610612459576040516338b2019560e11b815260040160405180910390fd5b8054600163ff00000160b01b031981168255604080516000805160206142e983398151915260208201529081018490526001600160601b03909116906124a190606001611a55565b60405183906000805160206142e983398151915290600090a280156123885760405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb90604401612323565b6000600181601b7f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179870014551231950b75fc4402da1732fc9bebe197f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179887096040805160008152602081018083529590955260ff909316928401929092526060830152608082015260a0016020604051602081039080840390855afa1580156125bf573d6000803e3d6000fd5b5050604051601f1901519392505050565b60006125dc83836113b6565b60008181526006602052604081209192508154600160c81b900460ff16600281111561260a5761260a613cbf565b036126285760405163499463c160e01b8152600401611852906141e3565b6126527f000000000000000000000000000000000000000000000000000000000000000042614233565b8154600160c91b67ff000000ffffffff60901b1990911660ff60c81b19600160901b63ffffffff949094168402161717808355604080517f07b5c950597fc3bed92e2ad37fa84f701655acb372982e486f5fad3607f04a5c602082015290810185905291900460e01b6001600160e01b03191660608201526126d690606401611a55565b8054604051600160901b90910463ffffffff16815282907f07b5c950597fc3bed92e2ad37fa84f701655acb372982e486f5fad3607f04a5c9060200160405180910390a250505050565b6060610ddb83836040518060600160405280602781526020016142a260279139612afc565b600154600090612783907f000000000000000000000000000000000000000000000000000000000000000090600160e01b900463ffffffff16613f2f565b42111561278e575060015b600354600154835160208086019190912060408051808401959095524360e01b6001600160e01b0319169085015291901b63ffffffff19166044830152606082015260800160408051601f19818403018152919052805160209182012063ffffffff4216600160e01b02911c1760015580156116985750506001546001600160e01b038116600160e01b9182900463ffffffff1690910217600255565b6000811580610dde57505070014551231950b75fc4402da1732fc9bebe191190565b60006401000003d019836060015110158061287257506401000003d019836040015110155b1561289057604051633ae4ed6b60e01b815260040160405180910390fd5b6128a283600001518460200151612b74565b6128bf57604051633922a54160e11b815260040160405180910390fd5b600080612911846020015185600001516040516020016128f892919060609290921b6001600160601b0319168252601482015260340190565b6040516020818303038152906040528560400151612b9f565b91509150600061292686604001518484612c25565b905061296186608001518760a00151604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b6001600160a01b0316816001600160a01b03161461299257604051631dbfb9b360e31b815260040160405180910390fd5b60006129ab876060015188600001518960200151612c25565b90506129e68760c001518860e00151604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b6001600160a01b0316816001600160a01b031614612a1757604051631dbfb9b360e31b815260040160405180910390fd5b600080612a4989608001518a60a001518b60c001518c60e001516401000003d019612a429190614250565b6000612cc4565b6020808b01518c518d8301518d51604051969850949650600095612ac195612aa8958a928a92910160609690961b6001600160601b03191686526014860194909452603485019290925260548401526074830152609482015260b40190565b6040516020818303038152906040528a60400151612e4b565b60608b01511497505050505050505092915050565b6000806000612ae6868686612ebc565b91509150612af381612ef5565b50949350505050565b6060600080856001600160a01b031685604051612b199190614263565b600060405180830381855af49150503d8060008114612b54576040519150601f19603f3d011682016040523d82523d6000602084013e612b59565b606091505b5091509150612b6a8683838761303f565b9695505050505050565b60006401000003d01980846401000003d019868709096007086401000003d019838409149392505050565b600080600080612baf86866130c0565b91509150600080612bbf8461317c565b91509150600080612bcf8561317c565b91509150600080612c03868686867f3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533612cc4565b91509150612c11828261343e565b9950995050505050505050505b9250929050565b600080612c3360028461427f565b600003612c425750601b612c46565b50601c5b60016000828670014551231950b75fc4402da1732fc9bebe19888a096040805160008152602081018083529590955260ff909316928401929092526060830152608082015260a0016020604051602081039080840390855afa158015612cb0573d6000803e3d6000fd5b5050604051601f1901519695505050505050565b600080838614198588141615612cd957600080fd5b600080858814878a141660018114612cf6578015612d7357612dee565b6401000003d019866401000003d0198b60020908915060405160208152602080820152602060408201528260608201526401000003d21960808201526401000003d01960a082015260208160c0836005600019fa612d5357600080fd5b6401000003d01981516401000003d019808e8f0960030909935050612dee565b6401000003d0198a6401000003d019038908915060405160208152602080820152602060408201528260608201526401000003d21960808201526401000003d01960a082015260208160c0836005600019fa612dce57600080fd5b6401000003d01981516401000003d0198c6401000003d019038b08099350505b50506401000003d01980896401000003d01903886401000003d01903086401000003d0198384090892506401000003d019876401000003d019036401000003d01980866401000003d019038c088409089150509550959350505050565b6000806000612e5a858561372b565b9150915060405160308152602080820152602060408201528260608201528160808201526001609082015270014551231950b75fc4402da1732fc9bebe1960b082015260208160d0836005600019fa612eb257600080fd5b5195945050505050565b6000806001600160ff1b03831681612ed960ff86901c601b613f2f565b9050612ee78782888561382b565b935093505050935093915050565b6000816004811115612f0957612f09613cbf565b03612f115750565b6001816004811115612f2557612f25613cbf565b03612f725760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611852565b6002816004811115612f8657612f86613cbf565b03612fd35760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611852565b6003816004811115612fe757612fe7613cbf565b03610b4d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611852565b606083156130ae5782516000036130a7576001600160a01b0385163b6130a75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611852565b50816130b8565b6130b883836138ef565b949350505050565b60008060008060006130d28787613919565b9250925092506040516030815260208082015260206040820152836060820152826080820152600160908201526401000003d01960b082015260208160d0836005600019fa61312057600080fd5b80519550506040516030815260208082015282605082015260206040820152816070820152600160908201526401000003d01960b082015260208160d0836005600019fa61316d57600080fd5b80519450505050509250929050565b6000806401000003d0198384096401000003d019816401000003db190990506401000003d0198182096401000003d01982820890506401000003d019600182086401000003d0196106eb8209905060008215600181146131e15780156131ef576131fb565b6401000003db1991506131fb565b836401000003d0190391505b506401000003d019817f3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a4445330990506401000003d01982830992506401000003d0198182096401000003d019817f3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533096401000003d01981860894506401000003d01984860994506401000003d01983830991506401000003d019826106eb0990506401000003d0198186089450506401000003d01983860996506000806401000003d0198384096401000003d0198488096401000003d0198183099150604051602081526020808201526020604082015282606082015263400000f5600160fe1b0360808201526401000003d01960a082015260208160c0836005600019fa61332157600080fd5b6401000003d01982825109925050506401000003d0197f31fdf302724013e57ad13fb38f842afeec184f00a74789dd286729c8303c4a5982096401000003d0198283096401000003d0198682099050888114600181146133865780156133925761339a565b6001945083955061339a565b600094508295505b505050506401000003d0198a880997506401000003d019828909975080156133c3578498508197505b5050506002850660028806146133df57846401000003d0190394505b604051935060208452602080850152602060408501528060608501525050506401000003d21960808201526401000003d01960a082015260208160c0836005600019fa61342b57600080fd5b6401000003d01981518409925050915091565b6000806401000003d0198485096401000003d0198186096401000003d019807f8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c76401000003d019897f07d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c658109086401000003d01980857f534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262096401000003d019857f8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c0908086401000003d0197fd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b6401000003d019808a7fedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d140986080860405160208152602080820152602060408201528160608201526401000003d21960808201526401000003d01960a082015260208160c0836005600019fa61359d57600080fd5b805191506401000003d01982840996506401000003d019807f4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c6401000003d0198c7fc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a309086401000003d01980887f29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931096401000003d019887f2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d8409080892506401000003d019806401000006c4196401000003d0198c7f7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c257309086401000003d01980887f6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f098708089450604051905060208152602080820152602060408201528460608201526401000003d21960808201526401000003d01960a082015260208160c0836005600019fa61370d57600080fd5b5193506401000003d019905083818389090993505050509250929050565b60008060ff8351111561373d57600080fd5b60006040516088602060005b885181101561376a5788820151848401526020928301929182019101613749565b505060898751019050603081830153600201602060005b87518110156137a25787820151848401526020928301929182019101613781565b5050608b8651885101019050855181830153508551855101608c018120915050604051818152600160208201536021602060005b87518110156137f757878201518484015260209283019291820191016137d6565b5050508451855160210182015384516022018120935083821881526002602082015384516022018120925050509250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561386257506000905060036138e6565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156138b6573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166138df576000600192509250506138e6565b9150600090505b94509492505050565b8151156138ff5781518083602001fd5b8060405162461bcd60e51b81526004016118529190613e86565b600080600060ff8451111561392d57600080fd5b60006040516088602060005b895181101561395a5789820151848401526020928301929182019101613939565b505060898851019050606081830153600201602060005b88518110156139925788820151848401526020928301929182019101613971565b5050608b8751895101019050865181830153508651865101608c018120915050604051818152600160208201536021602060005b88518110156139e757888201518484015260209283019291820191016139c6565b5050508551865160210182015385516022018120945084821881526002602082015385516022018120935083821881526003602082015385516022018120925050509250925092565b6001600160a01b0381168114610b4d57600080fd5b60008083601f840112613a5757600080fd5b50813567ffffffffffffffff811115613a6f57600080fd5b602083019150836020828501011115612c1e57600080fd5b60008060008060008060008060c0898b031215613aa357600080fd5b8835613aae81613a30565b97506020890135613abe81613a30565b96506040890135613ace81613a30565b955060608901359450608089013567ffffffffffffffff80821115613af257600080fd5b613afe8c838d01613a45565b909650945060a08b0135915080821115613b1757600080fd5b50613b248b828c01613a45565b999c989b5096995094979396929594505050565b80356001600160601b0381168114613b4f57600080fd5b919050565b600080600060608486031215613b6957600080fd5b8335613b7481613a30565b92506020840135613b8481613a30565b9150613b9260408501613b38565b90509250925092565b60006101208284031215613bae57600080fd5b50919050565b60006101008284031215613bae57600080fd5b60008060006102408486031215613bdd57600080fd5b8335613be881613a30565b9250613bf78560208601613b9b565b9150613b92856101408601613bb4565b600060208284031215613c1957600080fd5b8135613c2481613a30565b9392505050565b60006101208284031215613c3e57600080fd5b610ddb8383613b9b565b60008060408385031215613c5b57600080fd5b823591506020830135613c6d81613a30565b809150509250929050565b60008060408385031215613c8b57600080fd5b8235613c9681613a30565b91506020830135613c6d81613a30565b600060208284031215613cb857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6001600160601b038616815265ffffffffffff8516602082015263ffffffff8416604082015262ffffff8316606082015260a0810160038310613d2857634e487b7160e01b600052602160045260246000fd5b8260808301529695505050505050565b60008060006102408486031215613d4e57600080fd5b83359250613bf78560208601613b9b565b60008060208385031215613d7257600080fd5b823567ffffffffffffffff80821115613d8a57600080fd5b818501915085601f830112613d9e57600080fd5b813581811115613dad57600080fd5b8660208260051b8501011115613dc257600080fd5b60209290920196919550909350505050565b60005b83811015613def578181015183820152602001613dd7565b50506000910152565b60008151808452613e10816020860160208601613dd4565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613e7957603f19888603018452613e67858351613df8565b94509285019290850190600101613e4b565b5092979650505050505050565b602081526000610ddb6020830184613df8565b60008060408385031215613eac57600080fd5b8235613eb781613a30565b9150613ec560208401613b38565b90509250929050565b6000806102208385031215613ee257600080fd5b613eec8484613b9b565b9150613ec5846101208501613bb4565b600060208284031215613f0e57600080fd5b8151613c2481613a30565b634e487b7160e01b600052601160045260246000fd5b80820180821115610dde57610dde613f19565b600060208284031215613f5457600080fd5b81518015158114613c2457600080fd5b600060208284031215613f7657600080fd5b813566ffffffffffffff81168114613c2457600080fd5b600060208284031215613f9f57600080fd5b813562ffffff81168114613c2457600080fd5b600060208284031215613fc457600080fd5b813563ffffffff81168114613c2457600080fd5b600060208284031215613fea57600080fd5b813565ffffffffffff81168114613c2457600080fd5b60006020828403121561401257600080fd5b610ddb82613b38565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261405e57600080fd5b83018035915067ffffffffffffffff82111561407957600080fd5b602001915036819003821315612c1e57600080fd5b6000600182016140a0576140a0613f19565b5060010190565b6001600160601b038181168382160190808211156112df576112df613f19565b62ffffff8181168382160190808211156112df576112df613f19565b928352602083019190915260a01b6001600160a01b0319166040820152604c0190565b600061010080838503121561411a57600080fd5b6040519081019067ffffffffffffffff8211818310171561414b57634e487b7160e01b600052604160045260246000fd5b81604052833581526020840135602082015260408401356040820152606084013560608201526080840135608082015260a084013560a082015260c084013560c082015260e084013560e0820152809250505092915050565b65ffffffffffff8181168382160190808211156112df576112df613f19565b6001600160601b038281168282160390808211156112df576112df613f19565b60208082526030908201527f6368616e6e656c206d7573742068617665207374617465204f50454e206f722060408201526f50454e44494e475f544f5f434c4f534560801b606082015260800190565b63ffffffff8181168382160190808211156112df576112df613f19565b81810381811115610dde57610dde613f19565b60008251614275818460208701613dd4565b9190910192915050565b60008261429c57634e487b7160e01b600052601260045260246000fd5b50069056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645fa17246d3a5d68d42baa94cde33042180b783a399c02bf63ac2076e0f708738ceeab2eef998c17fe96f30f83fbf3c55fc5047f6e40c55a0cf72d236e9d2ba72a26469706673582212202343980d92998edaee11a6676235eb75899e111708ed0a2a33545ccdcb0e050364736f6c634300081300338b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f
2014    /// ```
2015    #[rustfmt::skip]
2016    #[allow(clippy::all)]
2017    pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
2018        b"`\x04\x80T`\xFF`\xA0\x1B\x19\x16\x90U`\0a\x01@\x81\x90Ra\x01T\x81\x90Ra\x01`\x81\x90Ra\x01t\x81\x90R`@a\x01 \x81\x90R`\xA0\x81\x90Ra\x01\xA0\x82\x90Ra\x01\xB4\x91\x90\x91R`(a\x01\x80\x81\x90Ra\x01\xC8\x90\x91R`\xC0R4\x80\x15b\0\0^W`\0\x80\xFD[P`@Qb\0I'8\x03\x80b\0I'\x839\x81\x01`@\x81\x90Rb\0\0\x81\x91b\0\x04\xE9V[c\x05&\\\0`\x80\x81\x90R`@Q`\x01`\x01``\x1B\x03\x190``\x1B\x16` \x82\x01R`4\x01`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x91\x90R\x80Q` \x91\x82\x01 \x90\x1C`\x01`\xE0\x1BBc\xFF\xFF\xFF\xFF\x90\x81\x16\x82\x02\x92\x90\x92\x17`\x01\x81\x90U`\x01`\x01`\xE0\x1B\x03\x80\x82\x16\x91\x83\x90\x04\x90\x93\x16\x90\x91\x02\x17`\x02Ub\0\0\xFC\x90b\0\x02O\x16V[P\x81c\xFF\xFF\xFF\xFF\x16`\0\x03b\0\x01%W`@Qc\xF9\xEE\x91\x07`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x83\x16b\0\x01\x80W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x17`$\x82\x01R\x7Ftoken must not be empty\0\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01`@Q\x80\x91\x03\x90\xFD[b\0\x01\x8B\x81b\0\x03NV[`\x01`\x01`\xA0\x1B\x03\x83\x16`\xE0Rc\xFF\xFF\xFF\xFF\x82\x16a\x01\0R`@Qc)\x96Z\x1D`\xE0\x1B\x81R0`\x04\x82\x01\x81\x90R\x7F\xB2\x81\xFC\x8C\x12\x95M\"TM\xB4]\xE3\x15\x9A9'(\x95\xB1i\xA8R\xB3\x14\xF9\xCCv.D\xC5;`$\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\x02\x1DW`\0\x80\xFD[PZ\xF1\x15\x80\x15b\0\x022W=`\0\x80>=`\0\xFD[PPPPb\0\x02Fb\0\x03\xCA` \x1B` \x1CV[PPPb\0\x05EV[`@\x80Q\x80\x82\x01\x82R`\n\x81Ri$7\xB89&2\xB23\xB2\xB9`\xB1\x1B` \x91\x82\x01R\x81Q\x80\x83\x01\x83R`\x05\x81Rd\x03\x12\xE3\x02\xE3`\xDC\x1B\x90\x82\x01R\x81Q`\0\x80Q` b\0I\x07\x839\x81Q\x91R\x81\x83\x01R\x7Fl\xD6\x81y\x0Cx\xC2 Q{\t\x9As\x7F\x8E\x85\xF6\x9Eyz\xBEN)\x10\xFB\x18\x9Ba\xDBK\xF2\xCD\x81\x84\x01R\x7F\x06\xC0\x15\xBD\"\xB4\xC6\x96\x90\x93<\x10X\x87\x8E\xBD\xFE\xF3\x1F\x9A\xAA\xE4\x0B\xBE\x86\xD8\xA0\x9F\xE1\xB2\x97,``\x82\x01RF`\x80\x82\x01R0`\xA0\x80\x83\x01\x91\x90\x91R\x83Q\x80\x83\x03\x90\x91\x01\x81R`\xC0\x90\x91\x01\x90\x92R\x81Q\x91\x01 `\x03T\x81\x14b\0\x03KW`\x03\x81\x90U`@Q\x81\x90\x7F\xA4?\xAD\x83\x92\x0F\xD0\x94E\x85^\x85Ns\xC9\xC52\xE1t\x02\xC9\xCE\xB0\x99\x93\xA29(C\xA5\xBD\xB9\x90`\0\x90\xA2[PV[`\x04T`\x01`\xA0\x1B\x90\x04`\xFF\x16\x15b\0\x03yW`@Qb\xDC\x14\x9F`\xE4\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16b\0\x03\xA1W`@QcGN\xBE/`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`\x01`\x01`\xA0\x1B\x03\x90\x92\x16`\x01`\x01`\xA8\x1B\x03\x19\x90\x92\x16\x91\x90\x91\x17`\x01`\xA0\x1B\x17\x90UV[`@\x80Q\x80\x82\x01\x82R`\x0C\x81RkHoprChannels`\xA0\x1B` \x91\x82\x01R\x81Q\x80\x83\x01\x83R`\x05\x81Rd\x03\"\xE3\x02\xE3`\xDC\x1B\x90\x82\x01R\x81Q`\0\x80Q` b\0I\x07\x839\x81Q\x91R\x91\x81\x01\x91\x90\x91R\x7F\x84\xE6\x90\x8F46\x01\xD9\xCE\x9F\xB6\r\x82P9N\xB8\xA5\x1CV\xF1\x87k\xC1\xE0\x17\xC9z\xCDeg\xF2\x91\x81\x01\x91\x90\x91R\x7F\xB4\xBC\xB1T\xE3\x86\x01\xC3\x899o\xA9\x181M\xA4-F&\xF1>\xF6\xD0\xCE\xB0~_]&\xB2\xFB\xC3``\x82\x01RF`\x80\x82\x01R0`\xA0\x82\x01R`\0\x90`\xC0\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P`\x05T\x81\x14b\0\x03KW`\x05\x81\x90U`@Q\x81\x90\x7Fw\x1FR@\xAE_\xD8\xA7d\r?\xB8/\xA7\n\xAB/\xB1\xDB\xF3_.\xF4d\xF8P\x99Fqvd\xC5\x90`\0\x90\xA2PV[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14b\0\x03KW`\0\x80\xFD[`\0\x80`\0``\x84\x86\x03\x12\x15b\0\x04\xFFW`\0\x80\xFD[\x83Qb\0\x05\x0C\x81b\0\x04\xD3V[` \x85\x01Q\x90\x93Pc\xFF\xFF\xFF\xFF\x81\x16\x81\x14b\0\x05'W`\0\x80\xFD[`@\x85\x01Q\x90\x92Pb\0\x05:\x81b\0\x04\xD3V[\x80\x91PP\x92P\x92P\x92V[`\x80Q`\xA0Q`\xC0Q`\xE0Qa\x01\0QaC>b\0\x05\xC9`\09`\0\x81\x81a\x03\xD9\x01Ra&-\x01R`\0\x81\x81a\x04\xD7\x01R\x81\x81a\x05f\x01R\x81\x81a\t\x12\x01R\x81\x81a\x16\x01\x01R\x81\x81a \x89\x01R\x81\x81a\"\xF8\x01Ra$\xDC\x01R`\0\x81\x81a\x02\xA8\x01Ra\x05\xD5\x01R`\0\x81\x81a\x03.\x01Ra\x070\x01R`\0a'Q\x01RaC>`\0\xF3\xFE`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x01\xE4W`\x005`\xE0\x1C\x80c|\x8E(\xDA\x11a\x01\x0FW\x80c\xC9f\xC4\xFE\x11a\0\xA2W\x80c\xFC\x0CTj\x11a\0qW\x80c\xFC\x0CTj\x14a\x04\xD2W\x80c\xFCU0\x9A\x14a\x05\x11W\x80c\xFC\xB7yo\x14a\x05$W\x80c\xFF\xA1\xADt\x14a\x057W`\0\x80\xFD[\x80c\xC9f\xC4\xFE\x14a\x04\x87W\x80c\xDC\x96\xFDP\x14a\x04\x90W\x80c\xDD\xAD\x19\x02\x14a\x04\x98W\x80c\xF6\x98\xDA%\x14a\x04\xC9W`\0\x80\xFD[\x80c\xAC\x96P\xD8\x11a\0\xDEW\x80c\xAC\x96P\xD8\x14a\x04;W\x80c\xB9 \xDE\xED\x14a\x04[W\x80c\xBD\xA6_E\x14a\x04aW\x80c\xBE\x9B\xAB\xDC\x14a\x04tW`\0\x80\xFD[\x80c|\x8E(\xDA\x14a\x03\xC1W\x80c\x875-e\x14a\x03\xD4W\x80c\x89\xCC\xFE\x89\x14a\x04\x10W\x80c\x8C7\x10\xC9\x14a\x04\x18W`\0\x80\xFD[\x80c)9.2\x11a\x01\x87W\x80ce\x15\x14\xBF\x11a\x01VW\x80ce\x15\x14\xBF\x14a\x02\xEFW\x80crX\x1C\xC0\x14a\x03\x02W\x80cx\xD8\x01m\x14a\x03)W\x80cz~\xBD{\x14a\x03PW`\0\x80\xFD[\x80c)9.2\x14a\x02\x83W\x80cD\xDA\xE6\xF8\x14a\x02\xA3W\x80cT\xA2\xED\xF5\x14a\x02\xCAW\x80c]/\x07\xC5\x14a\x02\xDDW`\0\x80\xFD[\x80c\x1A\x7F\xFEz\x11a\x01\xC3W\x80c\x1A\x7F\xFEz\x14a\x02$W\x80c#\xCB:\xC0\x14a\x027W\x80c$\x08l\xC2\x14a\x02JW\x80c$\x9C\xB3\xFA\x14a\x02pW`\0\x80\xFD[\x80b#\xDE)\x14a\x01\xE9W\x80c\n\xBE\xC5\x8F\x14a\x01\xFEW\x80c\x0C\xD8\x8Dr\x14a\x02\x11W[`\0\x80\xFD[a\x01\xFCa\x01\xF76`\x04a:\x87V[a\x05[V[\0[a\x01\xFCa\x02\x0C6`\x04a;TV[a\x08\x17V[a\x01\xFCa\x02\x1F6`\x04a;\xC7V[a\t\xAFV[a\x01\xFCa\x0226`\x04a<\x07V[a\n\x80V[a\x01\xFCa\x02E6`\x04a<\x07V[a\x0BPV[a\x02]a\x02X6`\x04a<+V[a\x0C\x1DV[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x02]a\x02~6`\x04a<HV[a\r\x8AV[a\x02\x8B`\x01\x81V[`@Q`\x01`\x01``\x1B\x03\x90\x91\x16\x81R` \x01a\x02gV[a\x02]\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[a\x01\xFCa\x02\xD86`\x04a<xV[a\r\xE4V[a\x02\x8Bj\x08E\x95\x16\x14\x01HJ\0\0\0\x81V[a\x01\xFCa\x02\xFD6`\x04a<xV[a\x0E\xB9V[a\x02]\x7F\xB2\x81\xFC\x8C\x12\x95M\"TM\xB4]\xE3\x15\x9A9'(\x95\xB1i\xA8R\xB3\x14\xF9\xCCv.D\xC5;\x81V[a\x02]\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[a\x03\xB0a\x03^6`\x04a<\xA6V[`\x06` R`\0\x90\x81R`@\x90 T`\x01`\x01``\x1B\x03\x81\x16\x90`\x01``\x1B\x81\x04e\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90`\x01`\x90\x1B\x81\x04c\xFF\xFF\xFF\xFF\x16\x90`\x01`\xB0\x1B\x81\x04b\xFF\xFF\xFF\x16\x90`\x01`\xC8\x1B\x90\x04`\xFF\x16\x85V[`@Qa\x02g\x95\x94\x93\x92\x91\x90a<\xD5V[a\x01\xFCa\x03\xCF6`\x04a<\x07V[a\x0F\x89V[a\x03\xFB\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[`@Qc\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01a\x02gV[a\x01\xFCa\x10VV[a\x04+a\x04&6`\x04a=8V[a\x11oV[`@Q\x90\x15\x15\x81R` \x01a\x02gV[a\x04Na\x04I6`\x04a=_V[a\x11\xF1V[`@Qa\x02g\x91\x90a>$V[Ba\x03\xFBV[a\x01\xFCa\x04o6`\x04a<xV[a\x12\xE6V[a\x02]a\x04\x826`\x04a<xV[a\x13\xB6V[a\x02]`\x03T\x81V[a\x01\xFCa\x13\xFBV[a\x04\xBC`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01d\x03\x12\xE3\x02\xE3`\xDC\x1B\x81RP\x81V[`@Qa\x02g\x91\x90a>\x86V[a\x02]`\x05T\x81V[a\x04\xF9\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x02gV[a\x01\xFCa\x05\x1F6`\x04a>\x99V[a\x15\tV[a\x01\xFCa\x0526`\x04a>\xCEV[a\x16\x9CV[a\x04\xBC`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01d\x03\"\xE3\x02\xE3`\xDC\x1B\x81RP\x81V[3`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x14a\x05\xA4W`@QcPy\xFFu`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x86\x160\x14a\x05\xCDW`@Qc\x178\x92!`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x82\x15a\x08\rW\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83\x03a\x07.W`\x01`\x01``\x1B\x03\x85\x11\x15a\x06\"W`@Qc)<\xEE\xF9`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R\x865``\x90\x81\x1C\x93\x82\x01\x84\x90R`\x14\x88\x015\x90\x1C\x91`\0\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x06}W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06\xA1\x91\x90a>\xFCV[\x90P\x82`\x01`\x01`\xA0\x1B\x03\x16\x8A`\x01`\x01`\xA0\x1B\x03\x16\x03a\x06\xE9W`\x01`\x01`\xA0\x1B\x03\x81\x16\x15a\x06\xE4W`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x07\x1BV[\x89`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x14a\x07\x1BW`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x07&\x83\x83\x8Aa\x17jV[PPPa\x08\rV[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83\x03a\x07\xF4W\x835``\x90\x81\x1C\x90`\x14\x86\x015`\xA0\x90\x81\x1C\x91` \x88\x015\x90\x1C\x90`4\x88\x015\x90\x1C\x88\x15\x80a\x07\x99WPa\x07\x95`\x01`\x01``\x1B\x03\x80\x83\x16\x90\x85\x16a?/V[\x89\x14\x15[\x15a\x07\xB7W`@Qc\xC5.>\xFF`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01``\x1B\x03\x83\x16\x15a\x07\xD1Wa\x07\xD1\x84\x83\x85a\x17jV[`\x01`\x01``\x1B\x03\x81\x16\x15a\x07\xEBWa\x07\xEB\x82\x85\x83a\x17jV[PPPPa\x08\rV[`@Qc\r=\xCD\xE5`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPPPPV[`\x04T\x83\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16a\x08CW`@Qc\x08\xA9D\x19`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x81\x16\x93\x82\x01\x93\x90\x93R3\x92\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x08\x92W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08\xB6\x91\x90a>\xFCV[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x08\xDDW`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x08\xE8\x84\x84\x84a\x17jV[`@Qc#\xB8r\xDD`\xE0\x1B\x81R3`\x04\x82\x01R0`$\x82\x01R`\x01`\x01``\x1B\x03\x83\x16`D\x82\x01R\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xA0\x1B\x03\x16\x90c#\xB8r\xDD\x90`d\x01` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\tcW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\t\x87\x91\x90a?BV[\x15\x15`\x01\x14a\t\xA9W`@Qc\x02.%\x81`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPV[`\x04T\x83\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16a\t\xDBW`@Qc\x08\xA9D\x19`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x81\x16\x93\x82\x01\x93\x90\x93R3\x92\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\n*W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\nN\x91\x90a>\xFCV[`\x01`\x01`\xA0\x1B\x03\x16\x14a\nuW`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\t\xA9\x84\x84\x84a\x1B\x16V[`\x04T`\x01`\xA0\x1B\x90\x04`\xFF\x16a\n\xAAW`@Qc\x08\xA9D\x19`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R3\x92\x81\x01\x92\x90\x92R`\0\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\n\xF8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0B\x1C\x91\x90a>\xFCV[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x0BCW`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0BM3\x82a\"\x13V[PV[`\x04T`\x01`\xA0\x1B\x90\x04`\xFF\x16a\x0BzW`@Qc\x08\xA9D\x19`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R3\x92\x81\x01\x92\x90\x92R`\0\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0B\xC8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0B\xEC\x91\x90a>\xFCV[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x0C\x13W`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0BM3\x82a#\x8FV[`\0\x80a\x0C.\x83a\x01\0\x015a%\x13V[\x90P`\0a\x0CB`\xC0\x85\x01`\xA0\x86\x01a?dV[f\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`8a\x0C]`\xA0\x87\x01`\x80\x88\x01a?\x8DV[b\xFF\xFF\xFF\x16\x90\x1B`Pa\x0Cv`\x80\x88\x01``\x89\x01a?\xB2V[c\xFF\xFF\xFF\xFF\x16\x90\x1B`pa\x0C\x90``\x89\x01`@\x8A\x01a?\xD8V[e\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90\x1B`\xA0a\x0C\xAC`@\x8A\x01` \x8B\x01a@\0V[`\x01`\x01``\x1B\x03\x16\x90\x1B\x17\x17\x17\x17\x90P`\0c\xFC\xB7yo`\xE0\x1B\x85`\0\x01`\0\x015\x83\x85`@Q` \x01a\r\x01\x93\x92\x91\x90\x92\x83R` \x83\x01\x91\x90\x91R``\x1B`\x01`\x01``\x1B\x03\x19\x16`@\x82\x01R`T\x01\x90V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 `\x01`\x01`\xE0\x1B\x03\x19\x94\x90\x94\x16\x81\x84\x01R\x82\x82\x01\x93\x90\x93R\x80Q\x80\x83\x03\x82\x01\x81R``\x83\x01\x82R\x80Q\x90\x84\x01 `\x05T`\x19`\xF8\x1B`\x80\x85\x01R`\x01`\xF8\x1B`\x81\x85\x01R`\x82\x84\x01R`\xA2\x80\x84\x01\x91\x90\x91R\x81Q\x80\x84\x03\x90\x91\x01\x81R`\xC2\x90\x92\x01\x90R\x80Q\x91\x01 \x95\x94PPPPPV[`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x81 T`\xFF\x16a\r\xB9W`\0a\r\xDBV[\x7F\xA2\xEFF\0\xD7B\x02-S-GG\xCB5GGFg\xD6\xF18\x04\x90%\x13\xB2\xEC\x01\xC8H\xF4\xB4[\x90P[\x92\x91PPV[`\x04T\x82\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16a\x0E\x10W`@Qc\x08\xA9D\x19`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x81\x16\x93\x82\x01\x93\x90\x93R3\x92\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0E_W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0E\x83\x91\x90a>\xFCV[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x0E\xAAW`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0E\xB4\x83\x83a\"\x13V[PPPV[`\x04T\x82\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16a\x0E\xE5W`@Qc\x08\xA9D\x19`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x81\x16\x93\x82\x01\x93\x90\x93R3\x92\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0F4W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0FX\x91\x90a>\xFCV[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x0F\x7FW`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0E\xB4\x83\x83a#\x8FV[`\x04T`\x01`\xA0\x1B\x90\x04`\xFF\x16a\x0F\xB3W`@Qc\x08\xA9D\x19`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R3\x92\x81\x01\x92\x90\x92R`\0\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x10\x01W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10%\x91\x90a>\xFCV[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x10LW`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0BM3\x82a%\xD0V[`@\x80Q\x80\x82\x01\x82R`\x0C\x81RkHoprChannels`\xA0\x1B` \x91\x82\x01R\x81Q\x80\x83\x01\x83R`\x05\x81Rd\x03\"\xE3\x02\xE3`\xDC\x1B\x90\x82\x01R\x81Q\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0F\x91\x81\x01\x91\x90\x91R\x7F\x84\xE6\x90\x8F46\x01\xD9\xCE\x9F\xB6\r\x82P9N\xB8\xA5\x1CV\xF1\x87k\xC1\xE0\x17\xC9z\xCDeg\xF2\x91\x81\x01\x91\x90\x91R\x7F\xB4\xBC\xB1T\xE3\x86\x01\xC3\x899o\xA9\x181M\xA4-F&\xF1>\xF6\xD0\xCE\xB0~_]&\xB2\xFB\xC3``\x82\x01RF`\x80\x82\x01R0`\xA0\x82\x01R`\0\x90`\xC0\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P`\x05T\x81\x14a\x0BMW`\x05\x81\x90U`@Q\x81\x90\x7Fw\x1FR@\xAE_\xD8\xA7d\r?\xB8/\xA7\n\xAB/\xB1\xDB\xF3_.\xF4d\xF8P\x99Fqvd\xC5\x90`\0\x90\xA2PV[`@\x80Q` \x80\x82\x01\x86\x90R\x835\x82\x84\x01R\x83\x81\x015``\x83\x01Ra\x01\0\x85\x015`\x80\x83\x01R`\xC0\x80\x86\x01\x805`\xA0\x80\x86\x01\x91\x90\x91R`\xE0\x80\x89\x015\x84\x87\x01R\x86Q\x80\x87\x03\x90\x94\x01\x84R\x90\x94\x01\x90\x94R\x80Q\x91\x01 `\0\x92`\xC8\x91\x90\x91\x1C\x91a\x11\xDA\x91\x90\x86\x01a?dV[f\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x81\x16\x91\x16\x11\x15\x94\x93PPPPV[``\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x12\x0CWa\x12\x0Ca@\x1BV[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x12?W\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x12*W\x90P[P\x90P`\0[\x82\x81\x10\x15a\x12\xDFWa\x12\xAF0\x85\x85\x84\x81\x81\x10a\x12cWa\x12ca@1V[\x90P` \x02\x81\x01\x90a\x12u\x91\x90a@GV[\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RPa' \x92PPPV[\x82\x82\x81Q\x81\x10a\x12\xC1Wa\x12\xC1a@1V[` \x02` \x01\x01\x81\x90RP\x80\x80a\x12\xD7\x90a@\x8EV[\x91PPa\x12EV[P\x92\x91PPV[`\x04T\x82\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16a\x13\x12W`@Qc\x08\xA9D\x19`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x81\x16\x93\x82\x01\x93\x90\x93R3\x92\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x13aW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x13\x85\x91\x90a>\xFCV[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x13\xACW`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0E\xB4\x83\x83a%\xD0V[`@Q`\x01`\x01``\x1B\x03\x19``\x84\x81\x1B\x82\x16` \x84\x01R\x83\x90\x1B\x16`4\x82\x01R`\0\x90`H\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x92\x91PPV[`@\x80Q\x80\x82\x01\x82R`\n\x81Ri$7\xB89&2\xB23\xB2\xB9`\xB1\x1B` \x91\x82\x01R\x81Q\x80\x83\x01\x83R`\x05\x81Rd\x03\x12\xE3\x02\xE3`\xDC\x1B\x90\x82\x01R\x81Q\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0F\x81\x83\x01R\x7Fl\xD6\x81y\x0Cx\xC2 Q{\t\x9As\x7F\x8E\x85\xF6\x9Eyz\xBEN)\x10\xFB\x18\x9Ba\xDBK\xF2\xCD\x81\x84\x01R\x7F\x06\xC0\x15\xBD\"\xB4\xC6\x96\x90\x93<\x10X\x87\x8E\xBD\xFE\xF3\x1F\x9A\xAA\xE4\x0B\xBE\x86\xD8\xA0\x9F\xE1\xB2\x97,``\x82\x01RF`\x80\x82\x01R0`\xA0\x80\x83\x01\x91\x90\x91R\x83Q\x80\x83\x03\x90\x91\x01\x81R`\xC0\x90\x91\x01\x90\x92R\x81Q\x91\x01 `\x03T\x81\x14a\x0BMW`\x03\x81\x90U`@Q\x81\x90\x7F\xA4?\xAD\x83\x92\x0F\xD0\x94E\x85^\x85Ns\xC9\xC52\xE1t\x02\xC9\xCE\xB0\x99\x93\xA29(C\xA5\xBD\xB9\x90`\0\x90\xA2PV[`\x04T`\x01`\xA0\x1B\x90\x04`\xFF\x16a\x153W`@Qc\x08\xA9D\x19`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R3\x92\x81\x01\x92\x90\x92R`\0\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x15\x81W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x15\xA5\x91\x90a>\xFCV[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x15\xCCW`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x15\xD73\x83\x83a\x17jV[`@Qc#\xB8r\xDD`\xE0\x1B\x81R3`\x04\x82\x01R0`$\x82\x01R`\x01`\x01``\x1B\x03\x82\x16`D\x82\x01R\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xA0\x1B\x03\x16\x90c#\xB8r\xDD\x90`d\x01` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x16RW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x16v\x91\x90a?BV[\x15\x15`\x01\x14a\x16\x98W`@Qc\x02.%\x81`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPV[`\x04T`\x01`\xA0\x1B\x90\x04`\xFF\x16a\x16\xC6W`@Qc\x08\xA9D\x19`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R3\x92\x81\x01\x92\x90\x92R`\0\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x17\x14W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x178\x91\x90a>\xFCV[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x17_W`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x16\x983\x83\x83a\x1B\x16V[\x80`\x01`\x01`\x01``\x1B\x03\x82\x16\x10\x15a\x17\x96W`@Qc\xC5.>\xFF`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[j\x08E\x95\x16\x14\x01HJ\0\0\0`\x01`\x01``\x1B\x03\x82\x16\x11\x15a\x17\xCBW`@Qc)<\xEE\xF9`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x83\x83\x80`\x01`\x01`\xA0\x1B\x03\x16\x82`\x01`\x01`\xA0\x1B\x03\x16\x03a\x17\xFFW`@QcK\xD1\xD7i`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x82\x16a\x18[W`@Qc\xEA\xC0\xD3\x89`\xE0\x1B\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7Fsource must not be empty\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01[`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16a\x18\xB2W`@Qc\xEA\xC0\xD3\x89`\xE0\x1B\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7Fdestination must not be empty\0\0\0`D\x82\x01R`d\x01a\x18RV[`\0a\x18\xBE\x87\x87a\x13\xB6V[`\0\x81\x81R`\x06` R`@\x90 \x90\x91P`\x02\x81T`\x01`\xC8\x1B\x90\x04`\xFF\x16`\x02\x81\x11\x15a\x18\xEEWa\x18\xEEa<\xBFV[\x03a\x19OW`@QcI\x94c\xC1`\xE0\x1B\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7Fcannot fund a channel that will `D\x82\x01Ri1\xB67\xB9\xB2\x909\xB7\xB7\xB7`\xB1\x1B`d\x82\x01R`\x84\x01a\x18RV[\x80Ta\x19e\x90\x87\x90`\x01`\x01``\x1B\x03\x16a@\xA7V[\x81T`\x01`\x01``\x1B\x03\x19\x16`\x01`\x01``\x1B\x03\x91\x90\x91\x16\x17\x81U`\0\x81T`\x01`\xC8\x1B\x90\x04`\xFF\x16`\x02\x81\x11\x15a\x19\x9FWa\x19\x9Fa<\xBFV[\x03a\x1A\xAAW\x80Ta\x19\xBD\x90`\x01`\xB0\x1B\x90\x04b\xFF\xFF\xFF\x16`\x01a@\xC7V[\x81Tb\xFF\xFF\xFF\x91\x90\x91\x16`\x01`\xB0\x1B\x02m\xFF\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF``\x1B\x19\x16m\xFF\xFF\xFF\xFF\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF``\x1B\x19\x90\x91\x16\x17`\x01`\xC8\x1B\x17\x81U`@\x80Q\x7F\xDD\x90\xF98#\x035\xE5\x9D\xC9%\xC5~\xCB\x0E'\xA2\x8C-\x875n1\xF0\x0C\xD5UJ\xBDl\x1B-` \x82\x01R``\x8A\x81\x1B`\x01`\x01``\x1B\x03\x19\x90\x81\x16\x93\x83\x01\x93\x90\x93R\x89\x90\x1B\x90\x91\x16`T\x82\x01Ra\x1Ai\x90`h\x01[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra'EV[\x86`\x01`\x01`\xA0\x1B\x03\x16\x88`\x01`\x01`\xA0\x1B\x03\x16\x7F\xDD\x90\xF98#\x035\xE5\x9D\xC9%\xC5~\xCB\x0E'\xA2\x8C-\x875n1\xF0\x0C\xD5UJ\xBDl\x1B-`@Q`@Q\x80\x91\x03\x90\xA3[\x80T`@Qa\x1A\xDD\x91a\x1AU\x91`\0\x80Q` aB\xC9\x839\x81Q\x91R\x91\x86\x91`\x01`\x01``\x1B\x03\x90\x91\x16\x90` \x01a@\xE3V[\x80T`@Q`\x01`\x01``\x1B\x03\x90\x91\x16\x81R\x82\x90`\0\x80Q` aB\xC9\x839\x81Q\x91R\x90` \x01`@Q\x80\x91\x03\x90\xA2PPPPPPPPV[a\x1B&`@\x83\x01` \x84\x01a@\0V[`\x01`\x01`\x01``\x1B\x03\x82\x16\x10\x15a\x1BQW`@Qc\xC5.>\xFF`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[j\x08E\x95\x16\x14\x01HJ\0\0\0`\x01`\x01``\x1B\x03\x82\x16\x11\x15a\x1B\x86W`@Qc)<\xEE\xF9`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x82a\x01\0\x015a\x1B\x95\x81a(+V[a\x1B\xB2W`@Qc:\xE4\xEDk`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x835`\0\x90\x81R`\x06` R`@\x90 `\x01\x81T`\x01`\xC8\x1B\x90\x04`\xFF\x16`\x02\x81\x11\x15a\x1B\xE1Wa\x1B\xE1a<\xBFV[\x14\x15\x80\x15a\x1C\x0CWP`\x02\x81T`\x01`\xC8\x1B\x90\x04`\xFF\x16`\x02\x81\x11\x15a\x1C\tWa\x1C\ta<\xBFV[\x14\x15[\x15a\x1CtW`@QcI\x94c\xC1`\xE0\x1B\x81R` `\x04\x82\x01R`1`$\x82\x01R\x7Fspending channel must be OPEN or`D\x82\x01Rp PENDING_TO_CLOSE`x\x1B`d\x82\x01R`\x84\x01a\x18RV[a\x1C\x84`\xA0\x86\x01`\x80\x87\x01a?\x8DV[\x81T`\x01`\xB0\x1B\x90\x04b\xFF\xFF\xFF\x90\x81\x16\x91\x16\x14a\x1C\xE4W`@QcI\x94c\xC1`\xE0\x1B\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7Fchannel epoch must match\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x18RV[`\0a\x1C\xF6``\x87\x01`@\x88\x01a?\xD8V[\x90P`\0a\x1D\n`\x80\x88\x01``\x89\x01a?\xB2V[\x83T\x90\x91P`\x01``\x1B\x90\x04e\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x01c\xFF\xFF\xFF\xFF\x83\x16\x10\x80a\x1DBWP\x80e\xFF\xFF\xFF\xFF\xFF\xFF\x16\x83e\xFF\xFF\xFF\xFF\xFF\xFF\x16\x10[\x15a\x1D`W`@Qchn\x1E\x0F`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x1Dp`@\x89\x01` \x8A\x01a@\0V[\x84T`\x01`\x01``\x1B\x03\x91\x82\x16\x91\x16\x10\x15a\x1D\x9EW`@Qc,Q\xD8\xDB`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\x1D\xA9\x89a\x0C\x1DV[\x90Pa\x1D\xB6\x81\x8A\x8Aa\x11oV[a\x1D\xD3W`@Qc\xEE\x83\\\x89`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0`@Q\x80``\x01`@R\x80\x83\x81R` \x01\x8C`\x01`\x01`\xA0\x1B\x03\x16\x81R` \x01`\x05T`@Q` \x01a\x1E\n\x91\x81R` \x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x90R\x90Pa\x1E6a\x1E06\x8B\x90\x03\x8B\x01\x8BaA\x06V[\x82a(MV[a\x1ESW`@Qc\x12\xBF\xB7\xB7`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\x1Eh\x83`\xC0\x8D\x015`\xE0\x8E\x015a*\xD6V[\x90P\x8A5a\x1Ev\x82\x8Ea\x13\xB6V[\x14a\x1E\x94W`@Qcf\xEE\xA9\xAB`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x1E\xA4c\xFF\xFF\xFF\xFF\x86\x16\x87aA\xA4V[\x87Te\xFF\xFF\xFF\xFF\xFF\xFF\x91\x90\x91\x16`\x01``\x1B\x02e\xFF\xFF\xFF\xFF\xFF\xFF``\x1B\x19\x90\x91\x16\x17\x87Ua\x1E\xD8`@\x8C\x01` \x8D\x01a@\0V[\x87Ta\x1E\xED\x91\x90`\x01`\x01``\x1B\x03\x16aA\xC3V[\x87T`\x01`\x01``\x1B\x03\x19\x16`\x01`\x01``\x1B\x03\x91\x90\x91\x16\x90\x81\x17\x88U`@Qa\x1FB\x91a\x1AU\x91\x7F\"\xE2\xA4\"\xA8\x86\x06V\xA3\xA3<\xFA\x1D\xAFw\x1Evy\x8C\xE5d\x97G\x95r5\x02]\xE1.\x0B$\x91\x8F5\x91` \x01a@\xE3V[\x86T`@Q`\x01`\x01``\x1B\x03\x90\x91\x16\x81R\x8B5\x90\x7F\"\xE2\xA4\"\xA8\x86\x06V\xA3\xA3<\xFA\x1D\xAFw\x1Evy\x8C\xE5d\x97G\x95r5\x02]\xE1.\x0B$\x90` \x01`@Q\x80\x91\x03\x90\xA2`\0a\x1F\x90\x8D\x83a\x13\xB6V[\x90P`\0`\x06`\0\x83\x81R` \x01\x90\x81R` \x01`\0 \x90Pa \x1C\x7Fqe\xE2\xEB\xC7\xCE5\xCC\x98\xCBvf\xF9\x94[6\x17\xF3\xF3c&\xB7m\x18\x93{\xA5\xFE\xCF\x18s\x9A\x8E`\0\x01`\0\x015\x8B`\0\x01`\x0C\x90T\x90a\x01\0\n\x90\x04e\xFF\xFF\xFF\xFF\xFF\xFF\x16`@Q` \x01a\x1AU\x93\x92\x91\x90\x92\x83R` \x83\x01\x91\x90\x91R`\xD0\x1B`\x01`\x01`\xD0\x1B\x03\x19\x16`@\x82\x01R`F\x01\x90V[\x88T`@Q`\x01``\x1B\x90\x91\x04e\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R\x8D5\x90\x7Fqe\xE2\xEB\xC7\xCE5\xCC\x98\xCBvf\xF9\x94[6\x17\xF3\xF3c&\xB7m\x18\x93{\xA5\xFE\xCF\x18s\x9A\x90` \x01`@Q\x80\x91\x03\x90\xA2`\0\x81T`\x01`\xC8\x1B\x90\x04`\xFF\x16`\x02\x81\x11\x15a \x82Wa \x82a<\xBFV[\x03a!lW\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xA0\x1B\x03\x16c\xA9\x05\x9C\xBB3\x8F`\0\x01` \x01` \x81\x01\x90a \xCD\x91\x90a@\0V[`@Q`\x01`\x01`\xE0\x1B\x03\x19`\xE0\x85\x90\x1B\x16\x81R`\x01`\x01`\xA0\x1B\x03\x90\x92\x16`\x04\x83\x01R`\x01`\x01``\x1B\x03\x16`$\x82\x01R`D\x01` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a!!W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a!E\x91\x90a?BV[\x15\x15`\x01\x14a!gW`@Qc\x02.%\x81`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\"\x03V[a!|`@\x8E\x01` \x8F\x01a@\0V[\x81Ta!\x91\x91\x90`\x01`\x01``\x1B\x03\x16a@\xA7V[\x81T`\x01`\x01``\x1B\x03\x19\x16`\x01`\x01``\x1B\x03\x91\x90\x91\x16\x90\x81\x17\x82U`@Qa!\xD3\x91a\x1AU\x91`\0\x80Q` aB\xC9\x839\x81Q\x91R\x91\x86\x91` \x01a@\xE3V[\x80T`@Q`\x01`\x01``\x1B\x03\x90\x91\x16\x81R\x82\x90`\0\x80Q` aB\xC9\x839\x81Q\x91R\x90` \x01`@Q\x80\x91\x03\x90\xA2[PPPPPPPPPPPPPPV[`\0a\"\x1F\x82\x84a\x13\xB6V[`\0\x81\x81R`\x06` R`@\x81 \x91\x92P\x81T`\x01`\xC8\x1B\x90\x04`\xFF\x16`\x02\x81\x11\x15a\"MWa\"Ma<\xBFV[\x03a\"kW`@QcI\x94c\xC1`\xE0\x1B\x81R`\x04\x01a\x18R\x90aA\xE3V[\x80T`\x01c\xFF\0\0\x01`\xB0\x1B\x03\x19\x81\x16\x82U`@\x80Q`\0\x80Q` aB\xE9\x839\x81Q\x91R` \x82\x01R\x90\x81\x01\x84\x90R`\x01`\x01``\x1B\x03\x90\x91\x16\x90a\"\xB3\x90``\x01a\x1AUV[`@Q\x83\x90`\0\x80Q` aB\xE9\x839\x81Q\x91R\x90`\0\x90\xA2\x80\x15a#\x88W`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x81\x16`\x04\x83\x01R`$\x82\x01\x83\x90R\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90c\xA9\x05\x9C\xBB\x90`D\x01[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a#BW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a#f\x91\x90a?BV[\x15\x15`\x01\x14a#\x88W`@Qc\x02.%\x81`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPV[`\0a#\x9B\x83\x83a\x13\xB6V[`\0\x81\x81R`\x06` R`@\x90 \x90\x91P`\x02\x81T`\x01`\xC8\x1B\x90\x04`\xFF\x16`\x02\x81\x11\x15a#\xCBWa#\xCBa<\xBFV[\x14a$(W`@QcI\x94c\xC1`\xE0\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7Fchannel state must be PENDING_TO`D\x82\x01Re_CLOSE`\xD0\x1B`d\x82\x01R`\x84\x01a\x18RV[\x80Tc\xFF\xFF\xFF\xFFB\x81\x16`\x01`\x90\x1B\x90\x92\x04\x16\x10a$YW`@Qc8\xB2\x01\x95`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x80T`\x01c\xFF\0\0\x01`\xB0\x1B\x03\x19\x81\x16\x82U`@\x80Q`\0\x80Q` aB\xE9\x839\x81Q\x91R` \x82\x01R\x90\x81\x01\x84\x90R`\x01`\x01``\x1B\x03\x90\x91\x16\x90a$\xA1\x90``\x01a\x1AUV[`@Q\x83\x90`\0\x80Q` aB\xE9\x839\x81Q\x91R\x90`\0\x90\xA2\x80\x15a#\x88W`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R3`\x04\x82\x01R`$\x81\x01\x82\x90R\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xA0\x1B\x03\x16\x90c\xA9\x05\x9C\xBB\x90`D\x01a##V[`\0`\x01\x81`\x1B\x7Fy\xBEf~\xF9\xDC\xBB\xACU\xA0b\x95\xCE\x87\x0B\x07\x02\x9B\xFC\xDB-\xCE(\xD9Y\xF2\x81[\x16\xF8\x17\x98p\x01EQ#\x19P\xB7_\xC4@-\xA1s/\xC9\xBE\xBE\x19\x7Fy\xBEf~\xF9\xDC\xBB\xACU\xA0b\x95\xCE\x87\x0B\x07\x02\x9B\xFC\xDB-\xCE(\xD9Y\xF2\x81[\x16\xF8\x17\x98\x87\t`@\x80Q`\0\x81R` \x81\x01\x80\x83R\x95\x90\x95R`\xFF\x90\x93\x16\x92\x84\x01\x92\x90\x92R``\x83\x01R`\x80\x82\x01R`\xA0\x01` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15a%\xBFW=`\0\x80>=`\0\xFD[PP`@Q`\x1F\x19\x01Q\x93\x92PPPV[`\0a%\xDC\x83\x83a\x13\xB6V[`\0\x81\x81R`\x06` R`@\x81 \x91\x92P\x81T`\x01`\xC8\x1B\x90\x04`\xFF\x16`\x02\x81\x11\x15a&\nWa&\na<\xBFV[\x03a&(W`@QcI\x94c\xC1`\xE0\x1B\x81R`\x04\x01a\x18R\x90aA\xE3V[a&R\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0BaB3V[\x81T`\x01`\xC9\x1Bg\xFF\0\0\0\xFF\xFF\xFF\xFF`\x90\x1B\x19\x90\x91\x16`\xFF`\xC8\x1B\x19`\x01`\x90\x1Bc\xFF\xFF\xFF\xFF\x94\x90\x94\x16\x84\x02\x16\x17\x17\x80\x83U`@\x80Q\x7F\x07\xB5\xC9PY\x7F\xC3\xBE\xD9.*\xD3\x7F\xA8Op\x16U\xAC\xB3r\x98.Ho_\xAD6\x07\xF0J\\` \x82\x01R\x90\x81\x01\x85\x90R\x91\x90\x04`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16``\x82\x01Ra&\xD6\x90`d\x01a\x1AUV[\x80T`@Q`\x01`\x90\x1B\x90\x91\x04c\xFF\xFF\xFF\xFF\x16\x81R\x82\x90\x7F\x07\xB5\xC9PY\x7F\xC3\xBE\xD9.*\xD3\x7F\xA8Op\x16U\xAC\xB3r\x98.Ho_\xAD6\x07\xF0J\\\x90` \x01`@Q\x80\x91\x03\x90\xA2PPPPV[``a\r\xDB\x83\x83`@Q\x80``\x01`@R\x80`'\x81R` \x01aB\xA2`'\x919a*\xFCV[`\x01T`\0\x90a'\x83\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90`\x01`\xE0\x1B\x90\x04c\xFF\xFF\xFF\xFF\x16a?/V[B\x11\x15a'\x8EWP`\x01[`\x03T`\x01T\x83Q` \x80\x86\x01\x91\x90\x91 `@\x80Q\x80\x84\x01\x95\x90\x95RC`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x90\x85\x01R\x91\x90\x1Bc\xFF\xFF\xFF\xFF\x19\x16`D\x83\x01R``\x82\x01R`\x80\x01`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x80Q` \x91\x82\x01 c\xFF\xFF\xFF\xFFB\x16`\x01`\xE0\x1B\x02\x91\x1C\x17`\x01U\x80\x15a\x16\x98WPP`\x01T`\x01`\x01`\xE0\x1B\x03\x81\x16`\x01`\xE0\x1B\x91\x82\x90\x04c\xFF\xFF\xFF\xFF\x16\x90\x91\x02\x17`\x02UV[`\0\x81\x15\x80a\r\xDEWPPp\x01EQ#\x19P\xB7_\xC4@-\xA1s/\xC9\xBE\xBE\x19\x11\x90V[`\0d\x01\0\0\x03\xD0\x19\x83``\x01Q\x10\x15\x80a(rWPd\x01\0\0\x03\xD0\x19\x83`@\x01Q\x10\x15[\x15a(\x90W`@Qc:\xE4\xEDk`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a(\xA2\x83`\0\x01Q\x84` \x01Qa+tV[a(\xBFW`@Qc9\"\xA5A`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x80a)\x11\x84` \x01Q\x85`\0\x01Q`@Q` \x01a(\xF8\x92\x91\x90``\x92\x90\x92\x1B`\x01`\x01``\x1B\x03\x19\x16\x82R`\x14\x82\x01R`4\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x85`@\x01Qa+\x9FV[\x91P\x91P`\0a)&\x86`@\x01Q\x84\x84a,%V[\x90Pa)a\x86`\x80\x01Q\x87`\xA0\x01Q`@\x80Q` \x80\x82\x01\x94\x90\x94R\x80\x82\x01\x92\x90\x92R\x80Q\x80\x83\x03\x82\x01\x81R``\x90\x92\x01\x90R\x80Q\x91\x01 \x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x14a)\x92W`@Qc\x1D\xBF\xB9\xB3`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a)\xAB\x87``\x01Q\x88`\0\x01Q\x89` \x01Qa,%V[\x90Pa)\xE6\x87`\xC0\x01Q\x88`\xE0\x01Q`@\x80Q` \x80\x82\x01\x94\x90\x94R\x80\x82\x01\x92\x90\x92R\x80Q\x80\x83\x03\x82\x01\x81R``\x90\x92\x01\x90R\x80Q\x91\x01 \x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x14a*\x17W`@Qc\x1D\xBF\xB9\xB3`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x80a*I\x89`\x80\x01Q\x8A`\xA0\x01Q\x8B`\xC0\x01Q\x8C`\xE0\x01Qd\x01\0\0\x03\xD0\x19a*B\x91\x90aBPV[`\0a,\xC4V[` \x80\x8B\x01Q\x8CQ\x8D\x83\x01Q\x8DQ`@Q\x96\x98P\x94\x96P`\0\x95a*\xC1\x95a*\xA8\x95\x8A\x92\x8A\x92\x91\x01``\x96\x90\x96\x1B`\x01`\x01``\x1B\x03\x19\x16\x86R`\x14\x86\x01\x94\x90\x94R`4\x85\x01\x92\x90\x92R`T\x84\x01R`t\x83\x01R`\x94\x82\x01R`\xB4\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x8A`@\x01Qa.KV[``\x8B\x01Q\x14\x97PPPPPPPP\x92\x91PPV[`\0\x80`\0a*\xE6\x86\x86\x86a.\xBCV[\x91P\x91Pa*\xF3\x81a.\xF5V[P\x94\x93PPPPV[```\0\x80\x85`\x01`\x01`\xA0\x1B\x03\x16\x85`@Qa+\x19\x91\x90aBcV[`\0`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80`\0\x81\x14a+TW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a+YV[``\x91P[P\x91P\x91Pa+j\x86\x83\x83\x87a0?V[\x96\x95PPPPPPV[`\0d\x01\0\0\x03\xD0\x19\x80\x84d\x01\0\0\x03\xD0\x19\x86\x87\t\t`\x07\x08d\x01\0\0\x03\xD0\x19\x83\x84\t\x14\x93\x92PPPV[`\0\x80`\0\x80a+\xAF\x86\x86a0\xC0V[\x91P\x91P`\0\x80a+\xBF\x84a1|V[\x91P\x91P`\0\x80a+\xCF\x85a1|V[\x91P\x91P`\0\x80a,\x03\x86\x86\x86\x86\x7F?\x871\xAB\xDDf\x1A\xDC\xA0\x8AUX\xF0\xF5\xD2r\xE9S\xD3c\xCBo\x0E]@TG\xC0\x1ADE3a,\xC4V[\x91P\x91Pa,\x11\x82\x82a4>V[\x99P\x99PPPPPPPPP[\x92P\x92\x90PV[`\0\x80a,3`\x02\x84aB\x7FV[`\0\x03a,BWP`\x1Ba,FV[P`\x1C[`\x01`\0\x82\x86p\x01EQ#\x19P\xB7_\xC4@-\xA1s/\xC9\xBE\xBE\x19\x88\x8A\t`@\x80Q`\0\x81R` \x81\x01\x80\x83R\x95\x90\x95R`\xFF\x90\x93\x16\x92\x84\x01\x92\x90\x92R``\x83\x01R`\x80\x82\x01R`\xA0\x01` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15a,\xB0W=`\0\x80>=`\0\xFD[PP`@Q`\x1F\x19\x01Q\x96\x95PPPPPPV[`\0\x80\x83\x86\x14\x19\x85\x88\x14\x16\x15a,\xD9W`\0\x80\xFD[`\0\x80\x85\x88\x14\x87\x8A\x14\x16`\x01\x81\x14a,\xF6W\x80\x15a-sWa-\xEEV[d\x01\0\0\x03\xD0\x19\x86d\x01\0\0\x03\xD0\x19\x8B`\x02\t\x08\x91P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x82``\x82\x01Rd\x01\0\0\x03\xD2\x19`\x80\x82\x01Rd\x01\0\0\x03\xD0\x19`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa-SW`\0\x80\xFD[d\x01\0\0\x03\xD0\x19\x81Qd\x01\0\0\x03\xD0\x19\x80\x8E\x8F\t`\x03\t\t\x93PPa-\xEEV[d\x01\0\0\x03\xD0\x19\x8Ad\x01\0\0\x03\xD0\x19\x03\x89\x08\x91P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x82``\x82\x01Rd\x01\0\0\x03\xD2\x19`\x80\x82\x01Rd\x01\0\0\x03\xD0\x19`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa-\xCEW`\0\x80\xFD[d\x01\0\0\x03\xD0\x19\x81Qd\x01\0\0\x03\xD0\x19\x8Cd\x01\0\0\x03\xD0\x19\x03\x8B\x08\t\x93PP[PPd\x01\0\0\x03\xD0\x19\x80\x89d\x01\0\0\x03\xD0\x19\x03\x88d\x01\0\0\x03\xD0\x19\x03\x08d\x01\0\0\x03\xD0\x19\x83\x84\t\x08\x92Pd\x01\0\0\x03\xD0\x19\x87d\x01\0\0\x03\xD0\x19\x03d\x01\0\0\x03\xD0\x19\x80\x86d\x01\0\0\x03\xD0\x19\x03\x8C\x08\x84\t\x08\x91PP\x95P\x95\x93PPPPV[`\0\x80`\0a.Z\x85\x85a7+V[\x91P\x91P`@Q`0\x81R` \x80\x82\x01R` `@\x82\x01R\x82``\x82\x01R\x81`\x80\x82\x01R`\x01`\x90\x82\x01Rp\x01EQ#\x19P\xB7_\xC4@-\xA1s/\xC9\xBE\xBE\x19`\xB0\x82\x01R` \x81`\xD0\x83`\x05`\0\x19\xFAa.\xB2W`\0\x80\xFD[Q\x95\x94PPPPPV[`\0\x80`\x01`\x01`\xFF\x1B\x03\x83\x16\x81a.\xD9`\xFF\x86\x90\x1C`\x1Ba?/V[\x90Pa.\xE7\x87\x82\x88\x85a8+V[\x93P\x93PPP\x93P\x93\x91PPV[`\0\x81`\x04\x81\x11\x15a/\tWa/\ta<\xBFV[\x03a/\x11WPV[`\x01\x81`\x04\x81\x11\x15a/%Wa/%a<\xBFV[\x03a/rW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FECDSA: invalid signature\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x18RV[`\x02\x81`\x04\x81\x11\x15a/\x86Wa/\x86a<\xBFV[\x03a/\xD3W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1F`$\x82\x01R\x7FECDSA: invalid signature length\0`D\x82\x01R`d\x01a\x18RV[`\x03\x81`\x04\x81\x11\x15a/\xE7Wa/\xE7a<\xBFV[\x03a\x0BMW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FECDSA: invalid signature 's' val`D\x82\x01Raue`\xF0\x1B`d\x82\x01R`\x84\x01a\x18RV[``\x83\x15a0\xAEW\x82Q`\0\x03a0\xA7W`\x01`\x01`\xA0\x1B\x03\x85\x16;a0\xA7W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FAddress: call to non-contract\0\0\0`D\x82\x01R`d\x01a\x18RV[P\x81a0\xB8V[a0\xB8\x83\x83a8\xEFV[\x94\x93PPPPV[`\0\x80`\0\x80`\0a0\xD2\x87\x87a9\x19V[\x92P\x92P\x92P`@Q`0\x81R` \x80\x82\x01R` `@\x82\x01R\x83``\x82\x01R\x82`\x80\x82\x01R`\x01`\x90\x82\x01Rd\x01\0\0\x03\xD0\x19`\xB0\x82\x01R` \x81`\xD0\x83`\x05`\0\x19\xFAa1 W`\0\x80\xFD[\x80Q\x95PP`@Q`0\x81R` \x80\x82\x01R\x82`P\x82\x01R` `@\x82\x01R\x81`p\x82\x01R`\x01`\x90\x82\x01Rd\x01\0\0\x03\xD0\x19`\xB0\x82\x01R` \x81`\xD0\x83`\x05`\0\x19\xFAa1mW`\0\x80\xFD[\x80Q\x94PPPPP\x92P\x92\x90PV[`\0\x80d\x01\0\0\x03\xD0\x19\x83\x84\td\x01\0\0\x03\xD0\x19\x81d\x01\0\0\x03\xDB\x19\t\x90Pd\x01\0\0\x03\xD0\x19\x81\x82\td\x01\0\0\x03\xD0\x19\x82\x82\x08\x90Pd\x01\0\0\x03\xD0\x19`\x01\x82\x08d\x01\0\0\x03\xD0\x19a\x06\xEB\x82\t\x90P`\0\x82\x15`\x01\x81\x14a1\xE1W\x80\x15a1\xEFWa1\xFBV[d\x01\0\0\x03\xDB\x19\x91Pa1\xFBV[\x83d\x01\0\0\x03\xD0\x19\x03\x91P[Pd\x01\0\0\x03\xD0\x19\x81\x7F?\x871\xAB\xDDf\x1A\xDC\xA0\x8AUX\xF0\xF5\xD2r\xE9S\xD3c\xCBo\x0E]@TG\xC0\x1ADE3\t\x90Pd\x01\0\0\x03\xD0\x19\x82\x83\t\x92Pd\x01\0\0\x03\xD0\x19\x81\x82\td\x01\0\0\x03\xD0\x19\x81\x7F?\x871\xAB\xDDf\x1A\xDC\xA0\x8AUX\xF0\xF5\xD2r\xE9S\xD3c\xCBo\x0E]@TG\xC0\x1ADE3\td\x01\0\0\x03\xD0\x19\x81\x86\x08\x94Pd\x01\0\0\x03\xD0\x19\x84\x86\t\x94Pd\x01\0\0\x03\xD0\x19\x83\x83\t\x91Pd\x01\0\0\x03\xD0\x19\x82a\x06\xEB\t\x90Pd\x01\0\0\x03\xD0\x19\x81\x86\x08\x94PPd\x01\0\0\x03\xD0\x19\x83\x86\t\x96P`\0\x80d\x01\0\0\x03\xD0\x19\x83\x84\td\x01\0\0\x03\xD0\x19\x84\x88\td\x01\0\0\x03\xD0\x19\x81\x83\t\x91P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x82``\x82\x01Rc@\0\0\xF5`\x01`\xFE\x1B\x03`\x80\x82\x01Rd\x01\0\0\x03\xD0\x19`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa3!W`\0\x80\xFD[d\x01\0\0\x03\xD0\x19\x82\x82Q\t\x92PPPd\x01\0\0\x03\xD0\x19\x7F1\xFD\xF3\x02r@\x13\xE5z\xD1?\xB3\x8F\x84*\xFE\xEC\x18O\0\xA7G\x89\xDD(g)\xC80<JY\x82\td\x01\0\0\x03\xD0\x19\x82\x83\td\x01\0\0\x03\xD0\x19\x86\x82\t\x90P\x88\x81\x14`\x01\x81\x14a3\x86W\x80\x15a3\x92Wa3\x9AV[`\x01\x94P\x83\x95Pa3\x9AV[`\0\x94P\x82\x95P[PPPPd\x01\0\0\x03\xD0\x19\x8A\x88\t\x97Pd\x01\0\0\x03\xD0\x19\x82\x89\t\x97P\x80\x15a3\xC3W\x84\x98P\x81\x97P[PPP`\x02\x85\x06`\x02\x88\x06\x14a3\xDFW\x84d\x01\0\0\x03\xD0\x19\x03\x94P[`@Q\x93P` \x84R` \x80\x85\x01R` `@\x85\x01R\x80``\x85\x01RPPPd\x01\0\0\x03\xD2\x19`\x80\x82\x01Rd\x01\0\0\x03\xD0\x19`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa4+W`\0\x80\xFD[d\x01\0\0\x03\xD0\x19\x81Q\x84\t\x92PP\x91P\x91V[`\0\x80d\x01\0\0\x03\xD0\x19\x84\x85\td\x01\0\0\x03\xD0\x19\x81\x86\td\x01\0\0\x03\xD0\x19\x80\x7F\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8D\xAA\xAA\xA8\xC7d\x01\0\0\x03\xD0\x19\x89\x7F\x07\xD3\xD4\xC8\x0B\xC3!\xD5\xB9\xF3\x15\xCE\xA7\xFDD\xC5\xD5\x95\xD2\xFC\x0B\xF6;\x92\xDF\xFF\x10D\xF1|e\x81\t\x08d\x01\0\0\x03\xD0\x19\x80\x85\x7FSL2\x8D#\xF24\xE6\xE2\xA4\x13\xDE\xCA%\xCA\xEC\xE4PaD\x03|@1N\xCB\xD0\xB5=\x9D\xD2b\td\x01\0\0\x03\xD0\x19\x85\x7F\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8D\xAA\xAA\xA8\x8C\t\x08\x08d\x01\0\0\x03\xD0\x19\x7F\xD3Wq\x19=\x94\x91\x8A\x9C\xA3L\xCB\xB7\xB6@\xDD\x86\xCD@\x95B\xF8H}\x9F\xE6\xB7Ex\x1E\xB4\x9Bd\x01\0\0\x03\xD0\x19\x80\x8A\x7F\xED\xAD\xC6\xF6C\x83\xDC\x1D\xF7\xC4\xB2\xD5\x1BT\"T\x06\xD3kd\x1F^A\xBB\xC5*Va*\x8Cm\x14\t\x86\x08\x08`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x81``\x82\x01Rd\x01\0\0\x03\xD2\x19`\x80\x82\x01Rd\x01\0\0\x03\xD0\x19`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa5\x9DW`\0\x80\xFD[\x80Q\x91Pd\x01\0\0\x03\xD0\x19\x82\x84\t\x96Pd\x01\0\0\x03\xD0\x19\x80\x7FK\xDA\x12\xF6\x84\xBD\xA1/hK\xDA\x12\xF6\x84\xBD\xA1/hK\xDA\x12\xF6\x84\xBD\xA1/hK\x8E8\xE2<d\x01\0\0\x03\xD0\x19\x8C\x7F\xC7^\x0C2\xD5\xCB|\x0F\xA9\xD0\xA5K\x12\xA0\xA6\xD5dz\xB0F\xD6\x86\xDAo\xDF\xFC\x90\xFC \x1Dq\xA3\t\x08d\x01\0\0\x03\xD0\x19\x80\x88\x7F)\xA6\x19F\x91\xF9\x1AsqR\t\xEFe\x12\xE5vr(0\xA2\x01\xBE \x18\xA7e\xE8Z\x9E\xCE\xE91\td\x01\0\0\x03\xD0\x19\x88\x7F/hK\xDA\x12\xF6\x84\xBD\xA1/hK\xDA\x12\xF6\x84\xBD\xA1/hK\xDA\x12\xF6\x84\xBD\xA1/8\xE3\x8D\x84\t\x08\x08\x92Pd\x01\0\0\x03\xD0\x19\x80d\x01\0\0\x06\xC4\x19d\x01\0\0\x03\xD0\x19\x8C\x7Fz\x06SK\xB8\xBD\xB4\x9F\xD5\xE9\xE6c'\"\xC2\x98\x94g\xC1\xBF\xC8\xE8\xD9x\xDF\xB4%\xD2h\\%s\t\x08d\x01\0\0\x03\xD0\x19\x80\x88\x7Fd\x84\xAAqeE\xCA,\xF3\xA7\x0C?\xA8\xFE3~\n=!\x16/\rb\x99\xA7\xBF\x81\x92\xBF\xD2\xA7o\t\x87\x08\x08\x94P`@Q\x90P` \x81R` \x80\x82\x01R` `@\x82\x01R\x84``\x82\x01Rd\x01\0\0\x03\xD2\x19`\x80\x82\x01Rd\x01\0\0\x03\xD0\x19`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa7\rW`\0\x80\xFD[Q\x93Pd\x01\0\0\x03\xD0\x19\x90P\x83\x81\x83\x89\t\t\x93PPPP\x92P\x92\x90PV[`\0\x80`\xFF\x83Q\x11\x15a7=W`\0\x80\xFD[`\0`@Q`\x88` `\0[\x88Q\x81\x10\x15a7jW\x88\x82\x01Q\x84\x84\x01R` \x92\x83\x01\x92\x91\x82\x01\x91\x01a7IV[PP`\x89\x87Q\x01\x90P`0\x81\x83\x01S`\x02\x01` `\0[\x87Q\x81\x10\x15a7\xA2W\x87\x82\x01Q\x84\x84\x01R` \x92\x83\x01\x92\x91\x82\x01\x91\x01a7\x81V[PP`\x8B\x86Q\x88Q\x01\x01\x90P\x85Q\x81\x83\x01SP\x85Q\x85Q\x01`\x8C\x01\x81 \x91PP`@Q\x81\x81R`\x01` \x82\x01S`!` `\0[\x87Q\x81\x10\x15a7\xF7W\x87\x82\x01Q\x84\x84\x01R` \x92\x83\x01\x92\x91\x82\x01\x91\x01a7\xD6V[PPP\x84Q\x85Q`!\x01\x82\x01S\x84Q`\"\x01\x81 \x93P\x83\x82\x18\x81R`\x02` \x82\x01S\x84Q`\"\x01\x81 \x92PPP\x92P\x92\x90PV[`\0\x80\x7F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF]WnsW\xA4P\x1D\xDF\xE9/Fh\x1B \xA0\x83\x11\x15a8bWP`\0\x90P`\x03a8\xE6V[`@\x80Q`\0\x80\x82R` \x82\x01\x80\x84R\x89\x90R`\xFF\x88\x16\x92\x82\x01\x92\x90\x92R``\x81\x01\x86\x90R`\x80\x81\x01\x85\x90R`\x01\x90`\xA0\x01` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15a8\xB6W=`\0\x80>=`\0\xFD[PP`@Q`\x1F\x19\x01Q\x91PP`\x01`\x01`\xA0\x1B\x03\x81\x16a8\xDFW`\0`\x01\x92P\x92PPa8\xE6V[\x91P`\0\x90P[\x94P\x94\x92PPPV[\x81Q\x15a8\xFFW\x81Q\x80\x83` \x01\xFD[\x80`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x18R\x91\x90a>\x86V[`\0\x80`\0`\xFF\x84Q\x11\x15a9-W`\0\x80\xFD[`\0`@Q`\x88` `\0[\x89Q\x81\x10\x15a9ZW\x89\x82\x01Q\x84\x84\x01R` \x92\x83\x01\x92\x91\x82\x01\x91\x01a99V[PP`\x89\x88Q\x01\x90P``\x81\x83\x01S`\x02\x01` `\0[\x88Q\x81\x10\x15a9\x92W\x88\x82\x01Q\x84\x84\x01R` \x92\x83\x01\x92\x91\x82\x01\x91\x01a9qV[PP`\x8B\x87Q\x89Q\x01\x01\x90P\x86Q\x81\x83\x01SP\x86Q\x86Q\x01`\x8C\x01\x81 \x91PP`@Q\x81\x81R`\x01` \x82\x01S`!` `\0[\x88Q\x81\x10\x15a9\xE7W\x88\x82\x01Q\x84\x84\x01R` \x92\x83\x01\x92\x91\x82\x01\x91\x01a9\xC6V[PPP\x85Q\x86Q`!\x01\x82\x01S\x85Q`\"\x01\x81 \x94P\x84\x82\x18\x81R`\x02` \x82\x01S\x85Q`\"\x01\x81 \x93P\x83\x82\x18\x81R`\x03` \x82\x01S\x85Q`\"\x01\x81 \x92PPP\x92P\x92P\x92V[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x0BMW`\0\x80\xFD[`\0\x80\x83`\x1F\x84\x01\x12a:WW`\0\x80\xFD[P\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a:oW`\0\x80\xFD[` \x83\x01\x91P\x83` \x82\x85\x01\x01\x11\x15a,\x1EW`\0\x80\xFD[`\0\x80`\0\x80`\0\x80`\0\x80`\xC0\x89\x8B\x03\x12\x15a:\xA3W`\0\x80\xFD[\x885a:\xAE\x81a:0V[\x97P` \x89\x015a:\xBE\x81a:0V[\x96P`@\x89\x015a:\xCE\x81a:0V[\x95P``\x89\x015\x94P`\x80\x89\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a:\xF2W`\0\x80\xFD[a:\xFE\x8C\x83\x8D\x01a:EV[\x90\x96P\x94P`\xA0\x8B\x015\x91P\x80\x82\x11\x15a;\x17W`\0\x80\xFD[Pa;$\x8B\x82\x8C\x01a:EV[\x99\x9C\x98\x9BP\x96\x99P\x94\x97\x93\x96\x92\x95\x94PPPV[\x805`\x01`\x01``\x1B\x03\x81\x16\x81\x14a;OW`\0\x80\xFD[\x91\x90PV[`\0\x80`\0``\x84\x86\x03\x12\x15a;iW`\0\x80\xFD[\x835a;t\x81a:0V[\x92P` \x84\x015a;\x84\x81a:0V[\x91Pa;\x92`@\x85\x01a;8V[\x90P\x92P\x92P\x92V[`\0a\x01 \x82\x84\x03\x12\x15a;\xAEW`\0\x80\xFD[P\x91\x90PV[`\0a\x01\0\x82\x84\x03\x12\x15a;\xAEW`\0\x80\xFD[`\0\x80`\0a\x02@\x84\x86\x03\x12\x15a;\xDDW`\0\x80\xFD[\x835a;\xE8\x81a:0V[\x92Pa;\xF7\x85` \x86\x01a;\x9BV[\x91Pa;\x92\x85a\x01@\x86\x01a;\xB4V[`\0` \x82\x84\x03\x12\x15a<\x19W`\0\x80\xFD[\x815a<$\x81a:0V[\x93\x92PPPV[`\0a\x01 \x82\x84\x03\x12\x15a<>W`\0\x80\xFD[a\r\xDB\x83\x83a;\x9BV[`\0\x80`@\x83\x85\x03\x12\x15a<[W`\0\x80\xFD[\x825\x91P` \x83\x015a<m\x81a:0V[\x80\x91PP\x92P\x92\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a<\x8BW`\0\x80\xFD[\x825a<\x96\x81a:0V[\x91P` \x83\x015a<m\x81a:0V[`\0` \x82\x84\x03\x12\x15a<\xB8W`\0\x80\xFD[P5\x91\x90PV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[`\x01`\x01``\x1B\x03\x86\x16\x81Re\xFF\xFF\xFF\xFF\xFF\xFF\x85\x16` \x82\x01Rc\xFF\xFF\xFF\xFF\x84\x16`@\x82\x01Rb\xFF\xFF\xFF\x83\x16``\x82\x01R`\xA0\x81\x01`\x03\x83\x10a=(WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x82`\x80\x83\x01R\x96\x95PPPPPPV[`\0\x80`\0a\x02@\x84\x86\x03\x12\x15a=NW`\0\x80\xFD[\x835\x92Pa;\xF7\x85` \x86\x01a;\x9BV[`\0\x80` \x83\x85\x03\x12\x15a=rW`\0\x80\xFD[\x825g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a=\x8AW`\0\x80\xFD[\x81\x85\x01\x91P\x85`\x1F\x83\x01\x12a=\x9EW`\0\x80\xFD[\x815\x81\x81\x11\x15a=\xADW`\0\x80\xFD[\x86` \x82`\x05\x1B\x85\x01\x01\x11\x15a=\xC2W`\0\x80\xFD[` \x92\x90\x92\x01\x96\x91\x95P\x90\x93PPPPV[`\0[\x83\x81\x10\x15a=\xEFW\x81\x81\x01Q\x83\x82\x01R` \x01a=\xD7V[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra>\x10\x81` \x86\x01` \x86\x01a=\xD4V[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[`\0` \x80\x83\x01\x81\x84R\x80\x85Q\x80\x83R`@\x86\x01\x91P`@\x81`\x05\x1B\x87\x01\x01\x92P\x83\x87\x01`\0[\x82\x81\x10\x15a>yW`?\x19\x88\x86\x03\x01\x84Ra>g\x85\x83Qa=\xF8V[\x94P\x92\x85\x01\x92\x90\x85\x01\x90`\x01\x01a>KV[P\x92\x97\x96PPPPPPPV[` \x81R`\0a\r\xDB` \x83\x01\x84a=\xF8V[`\0\x80`@\x83\x85\x03\x12\x15a>\xACW`\0\x80\xFD[\x825a>\xB7\x81a:0V[\x91Pa>\xC5` \x84\x01a;8V[\x90P\x92P\x92\x90PV[`\0\x80a\x02 \x83\x85\x03\x12\x15a>\xE2W`\0\x80\xFD[a>\xEC\x84\x84a;\x9BV[\x91Pa>\xC5\x84a\x01 \x85\x01a;\xB4V[`\0` \x82\x84\x03\x12\x15a?\x0EW`\0\x80\xFD[\x81Qa<$\x81a:0V[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x01\x80\x82\x11\x15a\r\xDEWa\r\xDEa?\x19V[`\0` \x82\x84\x03\x12\x15a?TW`\0\x80\xFD[\x81Q\x80\x15\x15\x81\x14a<$W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a?vW`\0\x80\xFD[\x815f\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x14a<$W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a?\x9FW`\0\x80\xFD[\x815b\xFF\xFF\xFF\x81\x16\x81\x14a<$W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a?\xC4W`\0\x80\xFD[\x815c\xFF\xFF\xFF\xFF\x81\x16\x81\x14a<$W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a?\xEAW`\0\x80\xFD[\x815e\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x14a<$W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a@\x12W`\0\x80\xFD[a\r\xDB\x82a;8V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x80\x835`\x1E\x19\x846\x03\x01\x81\x12a@^W`\0\x80\xFD[\x83\x01\x805\x91Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a@yW`\0\x80\xFD[` \x01\x91P6\x81\x90\x03\x82\x13\x15a,\x1EW`\0\x80\xFD[`\0`\x01\x82\x01a@\xA0Wa@\xA0a?\x19V[P`\x01\x01\x90V[`\x01`\x01``\x1B\x03\x81\x81\x16\x83\x82\x16\x01\x90\x80\x82\x11\x15a\x12\xDFWa\x12\xDFa?\x19V[b\xFF\xFF\xFF\x81\x81\x16\x83\x82\x16\x01\x90\x80\x82\x11\x15a\x12\xDFWa\x12\xDFa?\x19V[\x92\x83R` \x83\x01\x91\x90\x91R`\xA0\x1B`\x01`\x01`\xA0\x1B\x03\x19\x16`@\x82\x01R`L\x01\x90V[`\0a\x01\0\x80\x83\x85\x03\x12\x15aA\x1AW`\0\x80\xFD[`@Q\x90\x81\x01\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x81\x83\x10\x17\x15aAKWcNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[\x81`@R\x835\x81R` \x84\x015` \x82\x01R`@\x84\x015`@\x82\x01R``\x84\x015``\x82\x01R`\x80\x84\x015`\x80\x82\x01R`\xA0\x84\x015`\xA0\x82\x01R`\xC0\x84\x015`\xC0\x82\x01R`\xE0\x84\x015`\xE0\x82\x01R\x80\x92PPP\x92\x91PPV[e\xFF\xFF\xFF\xFF\xFF\xFF\x81\x81\x16\x83\x82\x16\x01\x90\x80\x82\x11\x15a\x12\xDFWa\x12\xDFa?\x19V[`\x01`\x01``\x1B\x03\x82\x81\x16\x82\x82\x16\x03\x90\x80\x82\x11\x15a\x12\xDFWa\x12\xDFa?\x19V[` \x80\x82R`0\x90\x82\x01R\x7Fchannel must have state OPEN or `@\x82\x01RoPENDING_TO_CLOSE`\x80\x1B``\x82\x01R`\x80\x01\x90V[c\xFF\xFF\xFF\xFF\x81\x81\x16\x83\x82\x16\x01\x90\x80\x82\x11\x15a\x12\xDFWa\x12\xDFa?\x19V[\x81\x81\x03\x81\x81\x11\x15a\r\xDEWa\r\xDEa?\x19V[`\0\x82QaBu\x81\x84` \x87\x01a=\xD4V[\x91\x90\x91\x01\x92\x91PPV[`\0\x82aB\x9CWcNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[P\x06\x90V\xFEAddress: low-level delegate call failed_\xA1rF\xD3\xA5\xD6\x8DB\xBA\xA9L\xDE3\x04!\x80\xB7\x83\xA3\x99\xC0+\xF6:\xC2\x07n\x0Fp\x878\xCE\xEA\xB2\xEE\xF9\x98\xC1\x7F\xE9o0\xF8?\xBF<U\xFCPG\xF6\xE4\x0CU\xA0\xCFr\xD26\xE9\xD2\xBAr\xA2dipfsX\"\x12 #C\x98\r\x92\x99\x8E\xDA\xEE\x11\xA6gb5\xEBu\x89\x9E\x11\x17\x08\xED\n*3T\\\xCD\xCB\x0E\x05\x03dsolcC\0\x08\x13\x003\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0F",
2019    );
2020    /// The runtime bytecode of the contract, as deployed on the network.
2021    ///
2022    /// ```text
2023    ///0x608060405234801561001057600080fd5b50600436106101e45760003560e01c80637c8e28da1161010f578063c966c4fe116100a2578063fc0c546a11610071578063fc0c546a146104d2578063fc55309a14610511578063fcb7796f14610524578063ffa1ad741461053757600080fd5b8063c966c4fe14610487578063dc96fd5014610490578063ddad190214610498578063f698da25146104c957600080fd5b8063ac9650d8116100de578063ac9650d81461043b578063b920deed1461045b578063bda65f4514610461578063be9babdc1461047457600080fd5b80637c8e28da146103c157806387352d65146103d457806389ccfe89146104105780638c3710c91461041857600080fd5b806329392e3211610187578063651514bf11610156578063651514bf146102ef57806372581cc01461030257806378d8016d146103295780637a7ebd7b1461035057600080fd5b806329392e321461028357806344dae6f8146102a357806354a2edf5146102ca5780635d2f07c5146102dd57600080fd5b80631a7ffe7a116101c35780631a7ffe7a1461022457806323cb3ac01461023757806324086cc21461024a578063249cb3fa1461027057600080fd5b806223de29146101e95780630abec58f146101fe5780630cd88d7214610211575b600080fd5b6101fc6101f7366004613a87565b61055b565b005b6101fc61020c366004613b54565b610817565b6101fc61021f366004613bc7565b6109af565b6101fc610232366004613c07565b610a80565b6101fc610245366004613c07565b610b50565b61025d610258366004613c2b565b610c1d565b6040519081526020015b60405180910390f35b61025d61027e366004613c48565b610d8a565b61028b600181565b6040516001600160601b039091168152602001610267565b61025d7f000000000000000000000000000000000000000000000000000000000000000081565b6101fc6102d8366004613c78565b610de4565b61028b6a084595161401484a00000081565b6101fc6102fd366004613c78565b610eb9565b61025d7fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b81565b61025d7f000000000000000000000000000000000000000000000000000000000000000081565b6103b061035e366004613ca6565b6006602052600090815260409020546001600160601b03811690600160601b810465ffffffffffff1690600160901b810463ffffffff1690600160b01b810462ffffff1690600160c81b900460ff1685565b604051610267959493929190613cd5565b6101fc6103cf366004613c07565b610f89565b6103fb7f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610267565b6101fc611056565b61042b610426366004613d38565b61116f565b6040519015158152602001610267565b61044e610449366004613d5f565b6111f1565b6040516102679190613e24565b426103fb565b6101fc61046f366004613c78565b6112e6565b61025d610482366004613c78565b6113b6565b61025d60035481565b6101fc6113fb565b6104bc604051806040016040528060058152602001640312e302e360dc1b81525081565b6040516102679190613e86565b61025d60055481565b6104f97f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610267565b6101fc61051f366004613e99565b611509565b6101fc610532366004613ece565b61169c565b6104bc604051806040016040528060058152602001640322e302e360dc1b81525081565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105a457604051635079ff7560e11b815260040160405180910390fd5b6001600160a01b03861630146105cd57604051631738922160e31b815260040160405180910390fd5b821561080d577f0000000000000000000000000000000000000000000000000000000000000000830361072e576001600160601b038511156106225760405163293ceef960e21b815260040160405180910390fd5b600480546040516302265e3160e61b81528635606090811c9382018490526014880135901c916000916001600160a01b03909116906389978c4090602401602060405180830381865afa15801561067d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106a19190613efc565b9050826001600160a01b03168a6001600160a01b0316036106e9576001600160a01b038116156106e45760405163acd5a82360e01b815260040160405180910390fd5b61071b565b896001600160a01b0316816001600160a01b03161461071b5760405163acd5a82360e01b815260040160405180910390fd5b61072683838a61176a565b50505061080d565b7f000000000000000000000000000000000000000000000000000000000000000083036107f4578335606090811c90601486013560a090811c916020880135901c906034880135901c88158061079957506107956001600160601b03808316908516613f2f565b8914155b156107b75760405163c52e3eff60e01b815260040160405180910390fd5b6001600160601b038316156107d1576107d184838561176a565b6001600160601b038116156107eb576107eb82858361176a565b5050505061080d565b604051630d3dcde560e31b815260040160405180910390fd5b5050505050505050565b6004548390600160a01b900460ff16610843576040516308a9441960e31b815260040160405180910390fd5b600480546040516302265e3160e61b81526001600160a01b03848116938201939093523392909116906389978c4090602401602060405180830381865afa158015610892573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108b69190613efc565b6001600160a01b0316146108dd5760405163acd5a82360e01b815260040160405180910390fd5b6108e884848461176a565b6040516323b872dd60e01b81523360048201523060248201526001600160601b03831660448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015610963573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109879190613f42565b15156001146109a95760405163022e258160e11b815260040160405180910390fd5b50505050565b6004548390600160a01b900460ff166109db576040516308a9441960e31b815260040160405180910390fd5b600480546040516302265e3160e61b81526001600160a01b03848116938201939093523392909116906389978c4090602401602060405180830381865afa158015610a2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4e9190613efc565b6001600160a01b031614610a755760405163acd5a82360e01b815260040160405180910390fd5b6109a9848484611b16565b600454600160a01b900460ff16610aaa576040516308a9441960e31b815260040160405180910390fd5b600480546040516302265e3160e61b815233928101929092526000916001600160a01b03909116906389978c4090602401602060405180830381865afa158015610af8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b1c9190613efc565b6001600160a01b031614610b435760405163acd5a82360e01b815260040160405180910390fd5b610b4d3382612213565b50565b600454600160a01b900460ff16610b7a576040516308a9441960e31b815260040160405180910390fd5b600480546040516302265e3160e61b815233928101929092526000916001600160a01b03909116906389978c4090602401602060405180830381865afa158015610bc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bec9190613efc565b6001600160a01b031614610c135760405163acd5a82360e01b815260040160405180910390fd5b610b4d338261238f565b600080610c2e836101000135612513565b90506000610c4260c0850160a08601613f64565b66ffffffffffffff166038610c5d60a0870160808801613f8d565b62ffffff16901b6050610c766080880160608901613fb2565b63ffffffff16901b6070610c906060890160408a01613fd8565b65ffffffffffff16901b60a0610cac60408a0160208b01614000565b6001600160601b0316901b171717179050600063fcb7796f60e01b85600001600001358385604051602001610d0193929190928352602083019190915260601b6001600160601b031916604082015260540190565b60408051808303601f1901815282825280516020918201206001600160e01b0319949094168184015282820193909352805180830382018152606083018252805190840120600554601960f81b6080850152600160f81b6081850152608284015260a2808401919091528151808403909101815260c29092019052805191012095945050505050565b6000828152602081815260408083206001600160a01b038516845290915281205460ff16610db9576000610ddb565b7fa2ef4600d742022d532d4747cb3547474667d6f13804902513b2ec01c848f4b45b90505b92915050565b6004548290600160a01b900460ff16610e10576040516308a9441960e31b815260040160405180910390fd5b600480546040516302265e3160e61b81526001600160a01b03848116938201939093523392909116906389978c4090602401602060405180830381865afa158015610e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e839190613efc565b6001600160a01b031614610eaa5760405163acd5a82360e01b815260040160405180910390fd5b610eb48383612213565b505050565b6004548290600160a01b900460ff16610ee5576040516308a9441960e31b815260040160405180910390fd5b600480546040516302265e3160e61b81526001600160a01b03848116938201939093523392909116906389978c4090602401602060405180830381865afa158015610f34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f589190613efc565b6001600160a01b031614610f7f5760405163acd5a82360e01b815260040160405180910390fd5b610eb4838361238f565b600454600160a01b900460ff16610fb3576040516308a9441960e31b815260040160405180910390fd5b600480546040516302265e3160e61b815233928101929092526000916001600160a01b03909116906389978c4090602401602060405180830381865afa158015611001573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110259190613efc565b6001600160a01b03161461104c5760405163acd5a82360e01b815260040160405180910390fd5b610b4d33826125d0565b604080518082018252600c81526b486f70724368616e6e656c7360a01b6020918201528151808301835260058152640322e302e360dc1b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f918101919091527f84e6908f343601d9ce9fb60d8250394eb8a51c56f1876bc1e017c97acd6567f2918101919091527fb4bcb154e38601c389396fa918314da42d4626f13ef6d0ceb07e5f5d26b2fbc360608201524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090506005548114610b4d57600581905560405181907f771f5240ae5fd8a7640d3fb82fa70aab2fb1dbf35f2ef464f8509946717664c590600090a250565b604080516020808201869052833582840152838101356060830152610100850135608083015260c0808601803560a08086019190915260e0808901358487015286518087039094018452909401909452805191012060009260c89190911c916111da91908601613f64565b66ffffffffffffff90811691161115949350505050565b60608167ffffffffffffffff81111561120c5761120c61401b565b60405190808252806020026020018201604052801561123f57816020015b606081526020019060019003908161122a5790505b50905060005b828110156112df576112af3085858481811061126357611263614031565b90506020028101906112759190614047565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061272092505050565b8282815181106112c1576112c1614031565b602002602001018190525080806112d79061408e565b915050611245565b5092915050565b6004548290600160a01b900460ff16611312576040516308a9441960e31b815260040160405180910390fd5b600480546040516302265e3160e61b81526001600160a01b03848116938201939093523392909116906389978c4090602401602060405180830381865afa158015611361573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113859190613efc565b6001600160a01b0316146113ac5760405163acd5a82360e01b815260040160405180910390fd5b610eb483836125d0565b6040516001600160601b0319606084811b8216602084015283901b16603482015260009060480160405160208183030381529060405280519060200120905092915050565b604080518082018252600a8152692437b8392632b233b2b960b11b6020918201528151808301835260058152640312e302e360dc1b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f6cd681790c78c220517b099a737f8e85f69e797abe4e2910fb189b61db4bf2cd818401527f06c015bd22b4c69690933c1058878ebdfef31f9aaae40bbe86d8a09fe1b2972c60608201524660808201523060a0808301919091528351808303909101815260c090910190925281519101206003548114610b4d57600381905560405181907fa43fad83920fd09445855e854e73c9c532e17402c9ceb09993a2392843a5bdb990600090a250565b600454600160a01b900460ff16611533576040516308a9441960e31b815260040160405180910390fd5b600480546040516302265e3160e61b815233928101929092526000916001600160a01b03909116906389978c4090602401602060405180830381865afa158015611581573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a59190613efc565b6001600160a01b0316146115cc5760405163acd5a82360e01b815260040160405180910390fd5b6115d733838361176a565b6040516323b872dd60e01b81523360048201523060248201526001600160601b03821660448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303816000875af1158015611652573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116769190613f42565b15156001146116985760405163022e258160e11b815260040160405180910390fd5b5050565b600454600160a01b900460ff166116c6576040516308a9441960e31b815260040160405180910390fd5b600480546040516302265e3160e61b815233928101929092526000916001600160a01b03909116906389978c4090602401602060405180830381865afa158015611714573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117389190613efc565b6001600160a01b03161461175f5760405163acd5a82360e01b815260040160405180910390fd5b611698338383611b16565b8060016001600160601b03821610156117965760405163c52e3eff60e01b815260040160405180910390fd5b6a084595161401484a0000006001600160601b03821611156117cb5760405163293ceef960e21b815260040160405180910390fd5b8383806001600160a01b0316826001600160a01b0316036117ff57604051634bd1d76960e11b815260040160405180910390fd5b6001600160a01b03821661185b5760405163eac0d38960e01b815260206004820152601860248201527f736f75726365206d757374206e6f7420626520656d707479000000000000000060448201526064015b60405180910390fd5b6001600160a01b0381166118b25760405163eac0d38960e01b815260206004820152601d60248201527f64657374696e6174696f6e206d757374206e6f7420626520656d7074790000006044820152606401611852565b60006118be87876113b6565b600081815260066020526040902090915060028154600160c81b900460ff1660028111156118ee576118ee613cbf565b0361194f5760405163499463c160e01b815260206004820152602a60248201527f63616e6e6f742066756e642061206368616e6e656c20746861742077696c6c2060448201526931b637b9b29039b7b7b760b11b6064820152608401611852565b80546119659087906001600160601b03166140a7565b81546001600160601b0319166001600160601b039190911617815560008154600160c81b900460ff16600281111561199f5761199f613cbf565b03611aaa5780546119bd90600160b01b900462ffffff1660016140c7565b815462ffffff91909116600160b01b026dff00000000000000ffffffffffff60601b19166dffffffff00000000ffffffffffff60601b1990911617600160c81b178155604080517fdd90f938230335e59dc925c57ecb0e27a28c2d87356e31f00cd5554abd6c1b2d602082015260608a811b6001600160601b03199081169383019390935289901b9091166054820152611a69906068015b604051602081830303815290604052612745565b866001600160a01b0316886001600160a01b03167fdd90f938230335e59dc925c57ecb0e27a28c2d87356e31f00cd5554abd6c1b2d60405160405180910390a35b8054604051611add91611a55916000805160206142c98339815191529186916001600160601b03909116906020016140e3565b80546040516001600160601b03909116815282906000805160206142c98339815191529060200160405180910390a25050505050505050565b611b266040830160208401614000565b60016001600160601b0382161015611b515760405163c52e3eff60e01b815260040160405180910390fd5b6a084595161401484a0000006001600160601b0382161115611b865760405163293ceef960e21b815260040160405180910390fd5b826101000135611b958161282b565b611bb257604051633ae4ed6b60e01b815260040160405180910390fd5b8335600090815260066020526040902060018154600160c81b900460ff166002811115611be157611be1613cbf565b14158015611c0c575060028154600160c81b900460ff166002811115611c0957611c09613cbf565b14155b15611c745760405163499463c160e01b815260206004820152603160248201527f7370656e64696e67206368616e6e656c206d757374206265204f50454e206f726044820152702050454e44494e475f544f5f434c4f534560781b6064820152608401611852565b611c8460a0860160808701613f8d565b8154600160b01b900462ffffff908116911614611ce45760405163499463c160e01b815260206004820152601860248201527f6368616e6e656c2065706f6368206d757374206d6174636800000000000000006044820152606401611852565b6000611cf66060870160408801613fd8565b90506000611d0a6080880160608901613fb2565b8354909150600160601b900465ffffffffffff16600163ffffffff83161080611d4257508065ffffffffffff168365ffffffffffff16105b15611d605760405163686e1e0f60e11b815260040160405180910390fd5b611d706040890160208a01614000565b84546001600160601b0391821691161015611d9e57604051632c51d8db60e21b815260040160405180910390fd5b6000611da989610c1d565b9050611db6818a8a61116f565b611dd35760405163ee835c8960e01b815260040160405180910390fd5b600060405180606001604052808381526020018c6001600160a01b03168152602001600554604051602001611e0a91815260200190565b60408051601f1981840301815291905290529050611e36611e30368b90038b018b614106565b8261284d565b611e53576040516312bfb7b760e31b815260040160405180910390fd5b6000611e688360c08d013560e08e0135612ad6565b90508a35611e76828e6113b6565b14611e94576040516366eea9ab60e11b815260040160405180910390fd5b611ea463ffffffff8616876141a4565b875465ffffffffffff91909116600160601b0265ffffffffffff60601b19909116178755611ed860408c0160208d01614000565b8754611eed91906001600160601b03166141c3565b87546001600160601b0319166001600160601b03919091169081178855604051611f4291611a55917f22e2a422a8860656a3a33cfa1daf771e76798ce5649747957235025de12e0b24918f35916020016140e3565b86546040516001600160601b0390911681528b35907f22e2a422a8860656a3a33cfa1daf771e76798ce5649747957235025de12e0b249060200160405180910390a26000611f908d836113b6565b9050600060066000838152602001908152602001600020905061201c7f7165e2ebc7ce35cc98cb7666f9945b3617f3f36326b76d18937ba5fecf18739a8e600001600001358b600001600c9054906101000a900465ffffffffffff16604051602001611a5593929190928352602083019190915260d01b6001600160d01b031916604082015260460190565b8854604051600160601b90910465ffffffffffff1681528d35907f7165e2ebc7ce35cc98cb7666f9945b3617f3f36326b76d18937ba5fecf18739a9060200160405180910390a260008154600160c81b900460ff16600281111561208257612082613cbf565b0361216c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb338f60000160200160208101906120cd9190614000565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526001600160601b031660248201526044016020604051808303816000875af1158015612121573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121459190613f42565b15156001146121675760405163022e258160e11b815260040160405180910390fd5b612203565b61217c60408e0160208f01614000565b815461219191906001600160601b03166140a7565b81546001600160601b0319166001600160601b039190911690811782556040516121d391611a55916000805160206142c98339815191529186916020016140e3565b80546040516001600160601b03909116815282906000805160206142c98339815191529060200160405180910390a25b5050505050505050505050505050565b600061221f82846113b6565b60008181526006602052604081209192508154600160c81b900460ff16600281111561224d5761224d613cbf565b0361226b5760405163499463c160e01b8152600401611852906141e3565b8054600163ff00000160b01b031981168255604080516000805160206142e983398151915260208201529081018490526001600160601b03909116906122b390606001611a55565b60405183906000805160206142e983398151915290600090a280156123885760405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044015b6020604051808303816000875af1158015612342573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123669190613f42565b15156001146123885760405163022e258160e11b815260040160405180910390fd5b5050505050565b600061239b83836113b6565b600081815260066020526040902090915060028154600160c81b900460ff1660028111156123cb576123cb613cbf565b146124285760405163499463c160e01b815260206004820152602660248201527f6368616e6e656c207374617465206d7573742062652050454e44494e475f544f6044820152655f434c4f534560d01b6064820152608401611852565b805463ffffffff428116600160901b9092041610612459576040516338b2019560e11b815260040160405180910390fd5b8054600163ff00000160b01b031981168255604080516000805160206142e983398151915260208201529081018490526001600160601b03909116906124a190606001611a55565b60405183906000805160206142e983398151915290600090a280156123885760405163a9059cbb60e01b8152336004820152602481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063a9059cbb90604401612323565b6000600181601b7f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179870014551231950b75fc4402da1732fc9bebe197f79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f8179887096040805160008152602081018083529590955260ff909316928401929092526060830152608082015260a0016020604051602081039080840390855afa1580156125bf573d6000803e3d6000fd5b5050604051601f1901519392505050565b60006125dc83836113b6565b60008181526006602052604081209192508154600160c81b900460ff16600281111561260a5761260a613cbf565b036126285760405163499463c160e01b8152600401611852906141e3565b6126527f000000000000000000000000000000000000000000000000000000000000000042614233565b8154600160c91b67ff000000ffffffff60901b1990911660ff60c81b19600160901b63ffffffff949094168402161717808355604080517f07b5c950597fc3bed92e2ad37fa84f701655acb372982e486f5fad3607f04a5c602082015290810185905291900460e01b6001600160e01b03191660608201526126d690606401611a55565b8054604051600160901b90910463ffffffff16815282907f07b5c950597fc3bed92e2ad37fa84f701655acb372982e486f5fad3607f04a5c9060200160405180910390a250505050565b6060610ddb83836040518060600160405280602781526020016142a260279139612afc565b600154600090612783907f000000000000000000000000000000000000000000000000000000000000000090600160e01b900463ffffffff16613f2f565b42111561278e575060015b600354600154835160208086019190912060408051808401959095524360e01b6001600160e01b0319169085015291901b63ffffffff19166044830152606082015260800160408051601f19818403018152919052805160209182012063ffffffff4216600160e01b02911c1760015580156116985750506001546001600160e01b038116600160e01b9182900463ffffffff1690910217600255565b6000811580610dde57505070014551231950b75fc4402da1732fc9bebe191190565b60006401000003d019836060015110158061287257506401000003d019836040015110155b1561289057604051633ae4ed6b60e01b815260040160405180910390fd5b6128a283600001518460200151612b74565b6128bf57604051633922a54160e11b815260040160405180910390fd5b600080612911846020015185600001516040516020016128f892919060609290921b6001600160601b0319168252601482015260340190565b6040516020818303038152906040528560400151612b9f565b91509150600061292686604001518484612c25565b905061296186608001518760a00151604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b6001600160a01b0316816001600160a01b03161461299257604051631dbfb9b360e31b815260040160405180910390fd5b60006129ab876060015188600001518960200151612c25565b90506129e68760c001518860e00151604080516020808201949094528082019290925280518083038201815260609092019052805191012090565b6001600160a01b0316816001600160a01b031614612a1757604051631dbfb9b360e31b815260040160405180910390fd5b600080612a4989608001518a60a001518b60c001518c60e001516401000003d019612a429190614250565b6000612cc4565b6020808b01518c518d8301518d51604051969850949650600095612ac195612aa8958a928a92910160609690961b6001600160601b03191686526014860194909452603485019290925260548401526074830152609482015260b40190565b6040516020818303038152906040528a60400151612e4b565b60608b01511497505050505050505092915050565b6000806000612ae6868686612ebc565b91509150612af381612ef5565b50949350505050565b6060600080856001600160a01b031685604051612b199190614263565b600060405180830381855af49150503d8060008114612b54576040519150601f19603f3d011682016040523d82523d6000602084013e612b59565b606091505b5091509150612b6a8683838761303f565b9695505050505050565b60006401000003d01980846401000003d019868709096007086401000003d019838409149392505050565b600080600080612baf86866130c0565b91509150600080612bbf8461317c565b91509150600080612bcf8561317c565b91509150600080612c03868686867f3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533612cc4565b91509150612c11828261343e565b9950995050505050505050505b9250929050565b600080612c3360028461427f565b600003612c425750601b612c46565b50601c5b60016000828670014551231950b75fc4402da1732fc9bebe19888a096040805160008152602081018083529590955260ff909316928401929092526060830152608082015260a0016020604051602081039080840390855afa158015612cb0573d6000803e3d6000fd5b5050604051601f1901519695505050505050565b600080838614198588141615612cd957600080fd5b600080858814878a141660018114612cf6578015612d7357612dee565b6401000003d019866401000003d0198b60020908915060405160208152602080820152602060408201528260608201526401000003d21960808201526401000003d01960a082015260208160c0836005600019fa612d5357600080fd5b6401000003d01981516401000003d019808e8f0960030909935050612dee565b6401000003d0198a6401000003d019038908915060405160208152602080820152602060408201528260608201526401000003d21960808201526401000003d01960a082015260208160c0836005600019fa612dce57600080fd5b6401000003d01981516401000003d0198c6401000003d019038b08099350505b50506401000003d01980896401000003d01903886401000003d01903086401000003d0198384090892506401000003d019876401000003d019036401000003d01980866401000003d019038c088409089150509550959350505050565b6000806000612e5a858561372b565b9150915060405160308152602080820152602060408201528260608201528160808201526001609082015270014551231950b75fc4402da1732fc9bebe1960b082015260208160d0836005600019fa612eb257600080fd5b5195945050505050565b6000806001600160ff1b03831681612ed960ff86901c601b613f2f565b9050612ee78782888561382b565b935093505050935093915050565b6000816004811115612f0957612f09613cbf565b03612f115750565b6001816004811115612f2557612f25613cbf565b03612f725760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611852565b6002816004811115612f8657612f86613cbf565b03612fd35760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611852565b6003816004811115612fe757612fe7613cbf565b03610b4d5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611852565b606083156130ae5782516000036130a7576001600160a01b0385163b6130a75760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401611852565b50816130b8565b6130b883836138ef565b949350505050565b60008060008060006130d28787613919565b9250925092506040516030815260208082015260206040820152836060820152826080820152600160908201526401000003d01960b082015260208160d0836005600019fa61312057600080fd5b80519550506040516030815260208082015282605082015260206040820152816070820152600160908201526401000003d01960b082015260208160d0836005600019fa61316d57600080fd5b80519450505050509250929050565b6000806401000003d0198384096401000003d019816401000003db190990506401000003d0198182096401000003d01982820890506401000003d019600182086401000003d0196106eb8209905060008215600181146131e15780156131ef576131fb565b6401000003db1991506131fb565b836401000003d0190391505b506401000003d019817f3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a4445330990506401000003d01982830992506401000003d0198182096401000003d019817f3f8731abdd661adca08a5558f0f5d272e953d363cb6f0e5d405447c01a444533096401000003d01981860894506401000003d01984860994506401000003d01983830991506401000003d019826106eb0990506401000003d0198186089450506401000003d01983860996506000806401000003d0198384096401000003d0198488096401000003d0198183099150604051602081526020808201526020604082015282606082015263400000f5600160fe1b0360808201526401000003d01960a082015260208160c0836005600019fa61332157600080fd5b6401000003d01982825109925050506401000003d0197f31fdf302724013e57ad13fb38f842afeec184f00a74789dd286729c8303c4a5982096401000003d0198283096401000003d0198682099050888114600181146133865780156133925761339a565b6001945083955061339a565b600094508295505b505050506401000003d0198a880997506401000003d019828909975080156133c3578498508197505b5050506002850660028806146133df57846401000003d0190394505b604051935060208452602080850152602060408501528060608501525050506401000003d21960808201526401000003d01960a082015260208160c0836005600019fa61342b57600080fd5b6401000003d01981518409925050915091565b6000806401000003d0198485096401000003d0198186096401000003d019807f8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa8c76401000003d019897f07d3d4c80bc321d5b9f315cea7fd44c5d595d2fc0bf63b92dfff1044f17c658109086401000003d01980857f534c328d23f234e6e2a413deca25caece4506144037c40314ecbd0b53d9dd262096401000003d019857f8e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38e38daaaaa88c0908086401000003d0197fd35771193d94918a9ca34ccbb7b640dd86cd409542f8487d9fe6b745781eb49b6401000003d019808a7fedadc6f64383dc1df7c4b2d51b54225406d36b641f5e41bbc52a56612a8c6d140986080860405160208152602080820152602060408201528160608201526401000003d21960808201526401000003d01960a082015260208160c0836005600019fa61359d57600080fd5b805191506401000003d01982840996506401000003d019807f4bda12f684bda12f684bda12f684bda12f684bda12f684bda12f684b8e38e23c6401000003d0198c7fc75e0c32d5cb7c0fa9d0a54b12a0a6d5647ab046d686da6fdffc90fc201d71a309086401000003d01980887f29a6194691f91a73715209ef6512e576722830a201be2018a765e85a9ecee931096401000003d019887f2f684bda12f684bda12f684bda12f684bda12f684bda12f684bda12f38e38d8409080892506401000003d019806401000006c4196401000003d0198c7f7a06534bb8bdb49fd5e9e6632722c2989467c1bfc8e8d978dfb425d2685c257309086401000003d01980887f6484aa716545ca2cf3a70c3fa8fe337e0a3d21162f0d6299a7bf8192bfd2a76f098708089450604051905060208152602080820152602060408201528460608201526401000003d21960808201526401000003d01960a082015260208160c0836005600019fa61370d57600080fd5b5193506401000003d019905083818389090993505050509250929050565b60008060ff8351111561373d57600080fd5b60006040516088602060005b885181101561376a5788820151848401526020928301929182019101613749565b505060898751019050603081830153600201602060005b87518110156137a25787820151848401526020928301929182019101613781565b5050608b8651885101019050855181830153508551855101608c018120915050604051818152600160208201536021602060005b87518110156137f757878201518484015260209283019291820191016137d6565b5050508451855160210182015384516022018120935083821881526002602082015384516022018120925050509250929050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a083111561386257506000905060036138e6565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa1580156138b6573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166138df576000600192509250506138e6565b9150600090505b94509492505050565b8151156138ff5781518083602001fd5b8060405162461bcd60e51b81526004016118529190613e86565b600080600060ff8451111561392d57600080fd5b60006040516088602060005b895181101561395a5789820151848401526020928301929182019101613939565b505060898851019050606081830153600201602060005b88518110156139925788820151848401526020928301929182019101613971565b5050608b8751895101019050865181830153508651865101608c018120915050604051818152600160208201536021602060005b88518110156139e757888201518484015260209283019291820191016139c6565b5050508551865160210182015385516022018120945084821881526002602082015385516022018120935083821881526003602082015385516022018120925050509250925092565b6001600160a01b0381168114610b4d57600080fd5b60008083601f840112613a5757600080fd5b50813567ffffffffffffffff811115613a6f57600080fd5b602083019150836020828501011115612c1e57600080fd5b60008060008060008060008060c0898b031215613aa357600080fd5b8835613aae81613a30565b97506020890135613abe81613a30565b96506040890135613ace81613a30565b955060608901359450608089013567ffffffffffffffff80821115613af257600080fd5b613afe8c838d01613a45565b909650945060a08b0135915080821115613b1757600080fd5b50613b248b828c01613a45565b999c989b5096995094979396929594505050565b80356001600160601b0381168114613b4f57600080fd5b919050565b600080600060608486031215613b6957600080fd5b8335613b7481613a30565b92506020840135613b8481613a30565b9150613b9260408501613b38565b90509250925092565b60006101208284031215613bae57600080fd5b50919050565b60006101008284031215613bae57600080fd5b60008060006102408486031215613bdd57600080fd5b8335613be881613a30565b9250613bf78560208601613b9b565b9150613b92856101408601613bb4565b600060208284031215613c1957600080fd5b8135613c2481613a30565b9392505050565b60006101208284031215613c3e57600080fd5b610ddb8383613b9b565b60008060408385031215613c5b57600080fd5b823591506020830135613c6d81613a30565b809150509250929050565b60008060408385031215613c8b57600080fd5b8235613c9681613a30565b91506020830135613c6d81613a30565b600060208284031215613cb857600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6001600160601b038616815265ffffffffffff8516602082015263ffffffff8416604082015262ffffff8316606082015260a0810160038310613d2857634e487b7160e01b600052602160045260246000fd5b8260808301529695505050505050565b60008060006102408486031215613d4e57600080fd5b83359250613bf78560208601613b9b565b60008060208385031215613d7257600080fd5b823567ffffffffffffffff80821115613d8a57600080fd5b818501915085601f830112613d9e57600080fd5b813581811115613dad57600080fd5b8660208260051b8501011115613dc257600080fd5b60209290920196919550909350505050565b60005b83811015613def578181015183820152602001613dd7565b50506000910152565b60008151808452613e10816020860160208601613dd4565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613e7957603f19888603018452613e67858351613df8565b94509285019290850190600101613e4b565b5092979650505050505050565b602081526000610ddb6020830184613df8565b60008060408385031215613eac57600080fd5b8235613eb781613a30565b9150613ec560208401613b38565b90509250929050565b6000806102208385031215613ee257600080fd5b613eec8484613b9b565b9150613ec5846101208501613bb4565b600060208284031215613f0e57600080fd5b8151613c2481613a30565b634e487b7160e01b600052601160045260246000fd5b80820180821115610dde57610dde613f19565b600060208284031215613f5457600080fd5b81518015158114613c2457600080fd5b600060208284031215613f7657600080fd5b813566ffffffffffffff81168114613c2457600080fd5b600060208284031215613f9f57600080fd5b813562ffffff81168114613c2457600080fd5b600060208284031215613fc457600080fd5b813563ffffffff81168114613c2457600080fd5b600060208284031215613fea57600080fd5b813565ffffffffffff81168114613c2457600080fd5b60006020828403121561401257600080fd5b610ddb82613b38565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000808335601e1984360301811261405e57600080fd5b83018035915067ffffffffffffffff82111561407957600080fd5b602001915036819003821315612c1e57600080fd5b6000600182016140a0576140a0613f19565b5060010190565b6001600160601b038181168382160190808211156112df576112df613f19565b62ffffff8181168382160190808211156112df576112df613f19565b928352602083019190915260a01b6001600160a01b0319166040820152604c0190565b600061010080838503121561411a57600080fd5b6040519081019067ffffffffffffffff8211818310171561414b57634e487b7160e01b600052604160045260246000fd5b81604052833581526020840135602082015260408401356040820152606084013560608201526080840135608082015260a084013560a082015260c084013560c082015260e084013560e0820152809250505092915050565b65ffffffffffff8181168382160190808211156112df576112df613f19565b6001600160601b038281168282160390808211156112df576112df613f19565b60208082526030908201527f6368616e6e656c206d7573742068617665207374617465204f50454e206f722060408201526f50454e44494e475f544f5f434c4f534560801b606082015260800190565b63ffffffff8181168382160190808211156112df576112df613f19565b81810381811115610dde57610dde613f19565b60008251614275818460208701613dd4565b9190910192915050565b60008261429c57634e487b7160e01b600052601260045260246000fd5b50069056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c65645fa17246d3a5d68d42baa94cde33042180b783a399c02bf63ac2076e0f708738ceeab2eef998c17fe96f30f83fbf3c55fc5047f6e40c55a0cf72d236e9d2ba72a26469706673582212202343980d92998edaee11a6676235eb75899e111708ed0a2a33545ccdcb0e050364736f6c63430008130033
2024    /// ```
2025    #[rustfmt::skip]
2026    #[allow(clippy::all)]
2027    pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
2028        b"`\x80`@R4\x80\x15a\0\x10W`\0\x80\xFD[P`\x046\x10a\x01\xE4W`\x005`\xE0\x1C\x80c|\x8E(\xDA\x11a\x01\x0FW\x80c\xC9f\xC4\xFE\x11a\0\xA2W\x80c\xFC\x0CTj\x11a\0qW\x80c\xFC\x0CTj\x14a\x04\xD2W\x80c\xFCU0\x9A\x14a\x05\x11W\x80c\xFC\xB7yo\x14a\x05$W\x80c\xFF\xA1\xADt\x14a\x057W`\0\x80\xFD[\x80c\xC9f\xC4\xFE\x14a\x04\x87W\x80c\xDC\x96\xFDP\x14a\x04\x90W\x80c\xDD\xAD\x19\x02\x14a\x04\x98W\x80c\xF6\x98\xDA%\x14a\x04\xC9W`\0\x80\xFD[\x80c\xAC\x96P\xD8\x11a\0\xDEW\x80c\xAC\x96P\xD8\x14a\x04;W\x80c\xB9 \xDE\xED\x14a\x04[W\x80c\xBD\xA6_E\x14a\x04aW\x80c\xBE\x9B\xAB\xDC\x14a\x04tW`\0\x80\xFD[\x80c|\x8E(\xDA\x14a\x03\xC1W\x80c\x875-e\x14a\x03\xD4W\x80c\x89\xCC\xFE\x89\x14a\x04\x10W\x80c\x8C7\x10\xC9\x14a\x04\x18W`\0\x80\xFD[\x80c)9.2\x11a\x01\x87W\x80ce\x15\x14\xBF\x11a\x01VW\x80ce\x15\x14\xBF\x14a\x02\xEFW\x80crX\x1C\xC0\x14a\x03\x02W\x80cx\xD8\x01m\x14a\x03)W\x80cz~\xBD{\x14a\x03PW`\0\x80\xFD[\x80c)9.2\x14a\x02\x83W\x80cD\xDA\xE6\xF8\x14a\x02\xA3W\x80cT\xA2\xED\xF5\x14a\x02\xCAW\x80c]/\x07\xC5\x14a\x02\xDDW`\0\x80\xFD[\x80c\x1A\x7F\xFEz\x11a\x01\xC3W\x80c\x1A\x7F\xFEz\x14a\x02$W\x80c#\xCB:\xC0\x14a\x027W\x80c$\x08l\xC2\x14a\x02JW\x80c$\x9C\xB3\xFA\x14a\x02pW`\0\x80\xFD[\x80b#\xDE)\x14a\x01\xE9W\x80c\n\xBE\xC5\x8F\x14a\x01\xFEW\x80c\x0C\xD8\x8Dr\x14a\x02\x11W[`\0\x80\xFD[a\x01\xFCa\x01\xF76`\x04a:\x87V[a\x05[V[\0[a\x01\xFCa\x02\x0C6`\x04a;TV[a\x08\x17V[a\x01\xFCa\x02\x1F6`\x04a;\xC7V[a\t\xAFV[a\x01\xFCa\x0226`\x04a<\x07V[a\n\x80V[a\x01\xFCa\x02E6`\x04a<\x07V[a\x0BPV[a\x02]a\x02X6`\x04a<+V[a\x0C\x1DV[`@Q\x90\x81R` \x01[`@Q\x80\x91\x03\x90\xF3[a\x02]a\x02~6`\x04a<HV[a\r\x8AV[a\x02\x8B`\x01\x81V[`@Q`\x01`\x01``\x1B\x03\x90\x91\x16\x81R` \x01a\x02gV[a\x02]\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[a\x01\xFCa\x02\xD86`\x04a<xV[a\r\xE4V[a\x02\x8Bj\x08E\x95\x16\x14\x01HJ\0\0\0\x81V[a\x01\xFCa\x02\xFD6`\x04a<xV[a\x0E\xB9V[a\x02]\x7F\xB2\x81\xFC\x8C\x12\x95M\"TM\xB4]\xE3\x15\x9A9'(\x95\xB1i\xA8R\xB3\x14\xF9\xCCv.D\xC5;\x81V[a\x02]\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[a\x03\xB0a\x03^6`\x04a<\xA6V[`\x06` R`\0\x90\x81R`@\x90 T`\x01`\x01``\x1B\x03\x81\x16\x90`\x01``\x1B\x81\x04e\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90`\x01`\x90\x1B\x81\x04c\xFF\xFF\xFF\xFF\x16\x90`\x01`\xB0\x1B\x81\x04b\xFF\xFF\xFF\x16\x90`\x01`\xC8\x1B\x90\x04`\xFF\x16\x85V[`@Qa\x02g\x95\x94\x93\x92\x91\x90a<\xD5V[a\x01\xFCa\x03\xCF6`\x04a<\x07V[a\x0F\x89V[a\x03\xFB\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[`@Qc\xFF\xFF\xFF\xFF\x90\x91\x16\x81R` \x01a\x02gV[a\x01\xFCa\x10VV[a\x04+a\x04&6`\x04a=8V[a\x11oV[`@Q\x90\x15\x15\x81R` \x01a\x02gV[a\x04Na\x04I6`\x04a=_V[a\x11\xF1V[`@Qa\x02g\x91\x90a>$V[Ba\x03\xFBV[a\x01\xFCa\x04o6`\x04a<xV[a\x12\xE6V[a\x02]a\x04\x826`\x04a<xV[a\x13\xB6V[a\x02]`\x03T\x81V[a\x01\xFCa\x13\xFBV[a\x04\xBC`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01d\x03\x12\xE3\x02\xE3`\xDC\x1B\x81RP\x81V[`@Qa\x02g\x91\x90a>\x86V[a\x02]`\x05T\x81V[a\x04\xF9\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x81V[`@Q`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x81R` \x01a\x02gV[a\x01\xFCa\x05\x1F6`\x04a>\x99V[a\x15\tV[a\x01\xFCa\x0526`\x04a>\xCEV[a\x16\x9CV[a\x04\xBC`@Q\x80`@\x01`@R\x80`\x05\x81R` \x01d\x03\"\xE3\x02\xE3`\xDC\x1B\x81RP\x81V[3`\x01`\x01`\xA0\x1B\x03\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x14a\x05\xA4W`@QcPy\xFFu`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x86\x160\x14a\x05\xCDW`@Qc\x178\x92!`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x82\x15a\x08\rW\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83\x03a\x07.W`\x01`\x01``\x1B\x03\x85\x11\x15a\x06\"W`@Qc)<\xEE\xF9`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R\x865``\x90\x81\x1C\x93\x82\x01\x84\x90R`\x14\x88\x015\x90\x1C\x91`\0\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x06}W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x06\xA1\x91\x90a>\xFCV[\x90P\x82`\x01`\x01`\xA0\x1B\x03\x16\x8A`\x01`\x01`\xA0\x1B\x03\x16\x03a\x06\xE9W`\x01`\x01`\xA0\x1B\x03\x81\x16\x15a\x06\xE4W`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x07\x1BV[\x89`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x14a\x07\x1BW`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x07&\x83\x83\x8Aa\x17jV[PPPa\x08\rV[\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x83\x03a\x07\xF4W\x835``\x90\x81\x1C\x90`\x14\x86\x015`\xA0\x90\x81\x1C\x91` \x88\x015\x90\x1C\x90`4\x88\x015\x90\x1C\x88\x15\x80a\x07\x99WPa\x07\x95`\x01`\x01``\x1B\x03\x80\x83\x16\x90\x85\x16a?/V[\x89\x14\x15[\x15a\x07\xB7W`@Qc\xC5.>\xFF`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01``\x1B\x03\x83\x16\x15a\x07\xD1Wa\x07\xD1\x84\x83\x85a\x17jV[`\x01`\x01``\x1B\x03\x81\x16\x15a\x07\xEBWa\x07\xEB\x82\x85\x83a\x17jV[PPPPa\x08\rV[`@Qc\r=\xCD\xE5`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPPPPV[`\x04T\x83\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16a\x08CW`@Qc\x08\xA9D\x19`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x81\x16\x93\x82\x01\x93\x90\x93R3\x92\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x08\x92W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x08\xB6\x91\x90a>\xFCV[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x08\xDDW`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x08\xE8\x84\x84\x84a\x17jV[`@Qc#\xB8r\xDD`\xE0\x1B\x81R3`\x04\x82\x01R0`$\x82\x01R`\x01`\x01``\x1B\x03\x83\x16`D\x82\x01R\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xA0\x1B\x03\x16\x90c#\xB8r\xDD\x90`d\x01` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\tcW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\t\x87\x91\x90a?BV[\x15\x15`\x01\x14a\t\xA9W`@Qc\x02.%\x81`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPV[`\x04T\x83\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16a\t\xDBW`@Qc\x08\xA9D\x19`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x81\x16\x93\x82\x01\x93\x90\x93R3\x92\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\n*W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\nN\x91\x90a>\xFCV[`\x01`\x01`\xA0\x1B\x03\x16\x14a\nuW`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\t\xA9\x84\x84\x84a\x1B\x16V[`\x04T`\x01`\xA0\x1B\x90\x04`\xFF\x16a\n\xAAW`@Qc\x08\xA9D\x19`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R3\x92\x81\x01\x92\x90\x92R`\0\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\n\xF8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0B\x1C\x91\x90a>\xFCV[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x0BCW`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0BM3\x82a\"\x13V[PV[`\x04T`\x01`\xA0\x1B\x90\x04`\xFF\x16a\x0BzW`@Qc\x08\xA9D\x19`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R3\x92\x81\x01\x92\x90\x92R`\0\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0B\xC8W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0B\xEC\x91\x90a>\xFCV[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x0C\x13W`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0BM3\x82a#\x8FV[`\0\x80a\x0C.\x83a\x01\0\x015a%\x13V[\x90P`\0a\x0CB`\xC0\x85\x01`\xA0\x86\x01a?dV[f\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x16`8a\x0C]`\xA0\x87\x01`\x80\x88\x01a?\x8DV[b\xFF\xFF\xFF\x16\x90\x1B`Pa\x0Cv`\x80\x88\x01``\x89\x01a?\xB2V[c\xFF\xFF\xFF\xFF\x16\x90\x1B`pa\x0C\x90``\x89\x01`@\x8A\x01a?\xD8V[e\xFF\xFF\xFF\xFF\xFF\xFF\x16\x90\x1B`\xA0a\x0C\xAC`@\x8A\x01` \x8B\x01a@\0V[`\x01`\x01``\x1B\x03\x16\x90\x1B\x17\x17\x17\x17\x90P`\0c\xFC\xB7yo`\xE0\x1B\x85`\0\x01`\0\x015\x83\x85`@Q` \x01a\r\x01\x93\x92\x91\x90\x92\x83R` \x83\x01\x91\x90\x91R``\x1B`\x01`\x01``\x1B\x03\x19\x16`@\x82\x01R`T\x01\x90V[`@\x80Q\x80\x83\x03`\x1F\x19\x01\x81R\x82\x82R\x80Q` \x91\x82\x01 `\x01`\x01`\xE0\x1B\x03\x19\x94\x90\x94\x16\x81\x84\x01R\x82\x82\x01\x93\x90\x93R\x80Q\x80\x83\x03\x82\x01\x81R``\x83\x01\x82R\x80Q\x90\x84\x01 `\x05T`\x19`\xF8\x1B`\x80\x85\x01R`\x01`\xF8\x1B`\x81\x85\x01R`\x82\x84\x01R`\xA2\x80\x84\x01\x91\x90\x91R\x81Q\x80\x84\x03\x90\x91\x01\x81R`\xC2\x90\x92\x01\x90R\x80Q\x91\x01 \x95\x94PPPPPV[`\0\x82\x81R` \x81\x81R`@\x80\x83 `\x01`\x01`\xA0\x1B\x03\x85\x16\x84R\x90\x91R\x81 T`\xFF\x16a\r\xB9W`\0a\r\xDBV[\x7F\xA2\xEFF\0\xD7B\x02-S-GG\xCB5GGFg\xD6\xF18\x04\x90%\x13\xB2\xEC\x01\xC8H\xF4\xB4[\x90P[\x92\x91PPV[`\x04T\x82\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16a\x0E\x10W`@Qc\x08\xA9D\x19`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x81\x16\x93\x82\x01\x93\x90\x93R3\x92\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0E_W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0E\x83\x91\x90a>\xFCV[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x0E\xAAW`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0E\xB4\x83\x83a\"\x13V[PPPV[`\x04T\x82\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16a\x0E\xE5W`@Qc\x08\xA9D\x19`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x81\x16\x93\x82\x01\x93\x90\x93R3\x92\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x0F4W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x0FX\x91\x90a>\xFCV[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x0F\x7FW`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0E\xB4\x83\x83a#\x8FV[`\x04T`\x01`\xA0\x1B\x90\x04`\xFF\x16a\x0F\xB3W`@Qc\x08\xA9D\x19`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R3\x92\x81\x01\x92\x90\x92R`\0\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x10\x01W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x10%\x91\x90a>\xFCV[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x10LW`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0BM3\x82a%\xD0V[`@\x80Q\x80\x82\x01\x82R`\x0C\x81RkHoprChannels`\xA0\x1B` \x91\x82\x01R\x81Q\x80\x83\x01\x83R`\x05\x81Rd\x03\"\xE3\x02\xE3`\xDC\x1B\x90\x82\x01R\x81Q\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0F\x91\x81\x01\x91\x90\x91R\x7F\x84\xE6\x90\x8F46\x01\xD9\xCE\x9F\xB6\r\x82P9N\xB8\xA5\x1CV\xF1\x87k\xC1\xE0\x17\xC9z\xCDeg\xF2\x91\x81\x01\x91\x90\x91R\x7F\xB4\xBC\xB1T\xE3\x86\x01\xC3\x899o\xA9\x181M\xA4-F&\xF1>\xF6\xD0\xCE\xB0~_]&\xB2\xFB\xC3``\x82\x01RF`\x80\x82\x01R0`\xA0\x82\x01R`\0\x90`\xC0\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P`\x05T\x81\x14a\x0BMW`\x05\x81\x90U`@Q\x81\x90\x7Fw\x1FR@\xAE_\xD8\xA7d\r?\xB8/\xA7\n\xAB/\xB1\xDB\xF3_.\xF4d\xF8P\x99Fqvd\xC5\x90`\0\x90\xA2PV[`@\x80Q` \x80\x82\x01\x86\x90R\x835\x82\x84\x01R\x83\x81\x015``\x83\x01Ra\x01\0\x85\x015`\x80\x83\x01R`\xC0\x80\x86\x01\x805`\xA0\x80\x86\x01\x91\x90\x91R`\xE0\x80\x89\x015\x84\x87\x01R\x86Q\x80\x87\x03\x90\x94\x01\x84R\x90\x94\x01\x90\x94R\x80Q\x91\x01 `\0\x92`\xC8\x91\x90\x91\x1C\x91a\x11\xDA\x91\x90\x86\x01a?dV[f\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x90\x81\x16\x91\x16\x11\x15\x94\x93PPPPV[``\x81g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a\x12\x0CWa\x12\x0Ca@\x1BV[`@Q\x90\x80\x82R\x80` \x02` \x01\x82\x01`@R\x80\x15a\x12?W\x81` \x01[``\x81R` \x01\x90`\x01\x90\x03\x90\x81a\x12*W\x90P[P\x90P`\0[\x82\x81\x10\x15a\x12\xDFWa\x12\xAF0\x85\x85\x84\x81\x81\x10a\x12cWa\x12ca@1V[\x90P` \x02\x81\x01\x90a\x12u\x91\x90a@GV[\x80\x80`\x1F\x01` \x80\x91\x04\x02` \x01`@Q\x90\x81\x01`@R\x80\x93\x92\x91\x90\x81\x81R` \x01\x83\x83\x80\x82\x847`\0\x92\x01\x91\x90\x91RPa' \x92PPPV[\x82\x82\x81Q\x81\x10a\x12\xC1Wa\x12\xC1a@1V[` \x02` \x01\x01\x81\x90RP\x80\x80a\x12\xD7\x90a@\x8EV[\x91PPa\x12EV[P\x92\x91PPV[`\x04T\x82\x90`\x01`\xA0\x1B\x90\x04`\xFF\x16a\x13\x12W`@Qc\x08\xA9D\x19`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x84\x81\x16\x93\x82\x01\x93\x90\x93R3\x92\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x13aW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x13\x85\x91\x90a>\xFCV[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x13\xACW`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0E\xB4\x83\x83a%\xD0V[`@Q`\x01`\x01``\x1B\x03\x19``\x84\x81\x1B\x82\x16` \x84\x01R\x83\x90\x1B\x16`4\x82\x01R`\0\x90`H\x01`@Q` \x81\x83\x03\x03\x81R\x90`@R\x80Q\x90` \x01 \x90P\x92\x91PPV[`@\x80Q\x80\x82\x01\x82R`\n\x81Ri$7\xB89&2\xB23\xB2\xB9`\xB1\x1B` \x91\x82\x01R\x81Q\x80\x83\x01\x83R`\x05\x81Rd\x03\x12\xE3\x02\xE3`\xDC\x1B\x90\x82\x01R\x81Q\x7F\x8Bs\xC3\xC6\x9B\xB8\xFE=Q.\xCCL\xF7Y\xCCy#\x9F{\x17\x9B\x0F\xFA\xCA\xA9\xA7]R+9@\x0F\x81\x83\x01R\x7Fl\xD6\x81y\x0Cx\xC2 Q{\t\x9As\x7F\x8E\x85\xF6\x9Eyz\xBEN)\x10\xFB\x18\x9Ba\xDBK\xF2\xCD\x81\x84\x01R\x7F\x06\xC0\x15\xBD\"\xB4\xC6\x96\x90\x93<\x10X\x87\x8E\xBD\xFE\xF3\x1F\x9A\xAA\xE4\x0B\xBE\x86\xD8\xA0\x9F\xE1\xB2\x97,``\x82\x01RF`\x80\x82\x01R0`\xA0\x80\x83\x01\x91\x90\x91R\x83Q\x80\x83\x03\x90\x91\x01\x81R`\xC0\x90\x91\x01\x90\x92R\x81Q\x91\x01 `\x03T\x81\x14a\x0BMW`\x03\x81\x90U`@Q\x81\x90\x7F\xA4?\xAD\x83\x92\x0F\xD0\x94E\x85^\x85Ns\xC9\xC52\xE1t\x02\xC9\xCE\xB0\x99\x93\xA29(C\xA5\xBD\xB9\x90`\0\x90\xA2PV[`\x04T`\x01`\xA0\x1B\x90\x04`\xFF\x16a\x153W`@Qc\x08\xA9D\x19`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R3\x92\x81\x01\x92\x90\x92R`\0\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x15\x81W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x15\xA5\x91\x90a>\xFCV[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x15\xCCW`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x15\xD73\x83\x83a\x17jV[`@Qc#\xB8r\xDD`\xE0\x1B\x81R3`\x04\x82\x01R0`$\x82\x01R`\x01`\x01``\x1B\x03\x82\x16`D\x82\x01R\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xA0\x1B\x03\x16\x90c#\xB8r\xDD\x90`d\x01` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a\x16RW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x16v\x91\x90a?BV[\x15\x15`\x01\x14a\x16\x98W`@Qc\x02.%\x81`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPV[`\x04T`\x01`\xA0\x1B\x90\x04`\xFF\x16a\x16\xC6W`@Qc\x08\xA9D\x19`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x04\x80T`@Qc\x02&^1`\xE6\x1B\x81R3\x92\x81\x01\x92\x90\x92R`\0\x91`\x01`\x01`\xA0\x1B\x03\x90\x91\x16\x90c\x89\x97\x8C@\x90`$\x01` `@Q\x80\x83\x03\x81\x86Z\xFA\x15\x80\x15a\x17\x14W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a\x178\x91\x90a>\xFCV[`\x01`\x01`\xA0\x1B\x03\x16\x14a\x17_W`@Qc\xAC\xD5\xA8#`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x16\x983\x83\x83a\x1B\x16V[\x80`\x01`\x01`\x01``\x1B\x03\x82\x16\x10\x15a\x17\x96W`@Qc\xC5.>\xFF`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[j\x08E\x95\x16\x14\x01HJ\0\0\0`\x01`\x01``\x1B\x03\x82\x16\x11\x15a\x17\xCBW`@Qc)<\xEE\xF9`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x83\x83\x80`\x01`\x01`\xA0\x1B\x03\x16\x82`\x01`\x01`\xA0\x1B\x03\x16\x03a\x17\xFFW`@QcK\xD1\xD7i`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x82\x16a\x18[W`@Qc\xEA\xC0\xD3\x89`\xE0\x1B\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7Fsource must not be empty\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01[`@Q\x80\x91\x03\x90\xFD[`\x01`\x01`\xA0\x1B\x03\x81\x16a\x18\xB2W`@Qc\xEA\xC0\xD3\x89`\xE0\x1B\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7Fdestination must not be empty\0\0\0`D\x82\x01R`d\x01a\x18RV[`\0a\x18\xBE\x87\x87a\x13\xB6V[`\0\x81\x81R`\x06` R`@\x90 \x90\x91P`\x02\x81T`\x01`\xC8\x1B\x90\x04`\xFF\x16`\x02\x81\x11\x15a\x18\xEEWa\x18\xEEa<\xBFV[\x03a\x19OW`@QcI\x94c\xC1`\xE0\x1B\x81R` `\x04\x82\x01R`*`$\x82\x01R\x7Fcannot fund a channel that will `D\x82\x01Ri1\xB67\xB9\xB2\x909\xB7\xB7\xB7`\xB1\x1B`d\x82\x01R`\x84\x01a\x18RV[\x80Ta\x19e\x90\x87\x90`\x01`\x01``\x1B\x03\x16a@\xA7V[\x81T`\x01`\x01``\x1B\x03\x19\x16`\x01`\x01``\x1B\x03\x91\x90\x91\x16\x17\x81U`\0\x81T`\x01`\xC8\x1B\x90\x04`\xFF\x16`\x02\x81\x11\x15a\x19\x9FWa\x19\x9Fa<\xBFV[\x03a\x1A\xAAW\x80Ta\x19\xBD\x90`\x01`\xB0\x1B\x90\x04b\xFF\xFF\xFF\x16`\x01a@\xC7V[\x81Tb\xFF\xFF\xFF\x91\x90\x91\x16`\x01`\xB0\x1B\x02m\xFF\0\0\0\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF``\x1B\x19\x16m\xFF\xFF\xFF\xFF\0\0\0\0\xFF\xFF\xFF\xFF\xFF\xFF``\x1B\x19\x90\x91\x16\x17`\x01`\xC8\x1B\x17\x81U`@\x80Q\x7F\xDD\x90\xF98#\x035\xE5\x9D\xC9%\xC5~\xCB\x0E'\xA2\x8C-\x875n1\xF0\x0C\xD5UJ\xBDl\x1B-` \x82\x01R``\x8A\x81\x1B`\x01`\x01``\x1B\x03\x19\x90\x81\x16\x93\x83\x01\x93\x90\x93R\x89\x90\x1B\x90\x91\x16`T\x82\x01Ra\x1Ai\x90`h\x01[`@Q` \x81\x83\x03\x03\x81R\x90`@Ra'EV[\x86`\x01`\x01`\xA0\x1B\x03\x16\x88`\x01`\x01`\xA0\x1B\x03\x16\x7F\xDD\x90\xF98#\x035\xE5\x9D\xC9%\xC5~\xCB\x0E'\xA2\x8C-\x875n1\xF0\x0C\xD5UJ\xBDl\x1B-`@Q`@Q\x80\x91\x03\x90\xA3[\x80T`@Qa\x1A\xDD\x91a\x1AU\x91`\0\x80Q` aB\xC9\x839\x81Q\x91R\x91\x86\x91`\x01`\x01``\x1B\x03\x90\x91\x16\x90` \x01a@\xE3V[\x80T`@Q`\x01`\x01``\x1B\x03\x90\x91\x16\x81R\x82\x90`\0\x80Q` aB\xC9\x839\x81Q\x91R\x90` \x01`@Q\x80\x91\x03\x90\xA2PPPPPPPPV[a\x1B&`@\x83\x01` \x84\x01a@\0V[`\x01`\x01`\x01``\x1B\x03\x82\x16\x10\x15a\x1BQW`@Qc\xC5.>\xFF`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[j\x08E\x95\x16\x14\x01HJ\0\0\0`\x01`\x01``\x1B\x03\x82\x16\x11\x15a\x1B\x86W`@Qc)<\xEE\xF9`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x82a\x01\0\x015a\x1B\x95\x81a(+V[a\x1B\xB2W`@Qc:\xE4\xEDk`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x835`\0\x90\x81R`\x06` R`@\x90 `\x01\x81T`\x01`\xC8\x1B\x90\x04`\xFF\x16`\x02\x81\x11\x15a\x1B\xE1Wa\x1B\xE1a<\xBFV[\x14\x15\x80\x15a\x1C\x0CWP`\x02\x81T`\x01`\xC8\x1B\x90\x04`\xFF\x16`\x02\x81\x11\x15a\x1C\tWa\x1C\ta<\xBFV[\x14\x15[\x15a\x1CtW`@QcI\x94c\xC1`\xE0\x1B\x81R` `\x04\x82\x01R`1`$\x82\x01R\x7Fspending channel must be OPEN or`D\x82\x01Rp PENDING_TO_CLOSE`x\x1B`d\x82\x01R`\x84\x01a\x18RV[a\x1C\x84`\xA0\x86\x01`\x80\x87\x01a?\x8DV[\x81T`\x01`\xB0\x1B\x90\x04b\xFF\xFF\xFF\x90\x81\x16\x91\x16\x14a\x1C\xE4W`@QcI\x94c\xC1`\xE0\x1B\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7Fchannel epoch must match\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x18RV[`\0a\x1C\xF6``\x87\x01`@\x88\x01a?\xD8V[\x90P`\0a\x1D\n`\x80\x88\x01``\x89\x01a?\xB2V[\x83T\x90\x91P`\x01``\x1B\x90\x04e\xFF\xFF\xFF\xFF\xFF\xFF\x16`\x01c\xFF\xFF\xFF\xFF\x83\x16\x10\x80a\x1DBWP\x80e\xFF\xFF\xFF\xFF\xFF\xFF\x16\x83e\xFF\xFF\xFF\xFF\xFF\xFF\x16\x10[\x15a\x1D`W`@Qchn\x1E\x0F`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x1Dp`@\x89\x01` \x8A\x01a@\0V[\x84T`\x01`\x01``\x1B\x03\x91\x82\x16\x91\x16\x10\x15a\x1D\x9EW`@Qc,Q\xD8\xDB`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\x1D\xA9\x89a\x0C\x1DV[\x90Pa\x1D\xB6\x81\x8A\x8Aa\x11oV[a\x1D\xD3W`@Qc\xEE\x83\\\x89`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0`@Q\x80``\x01`@R\x80\x83\x81R` \x01\x8C`\x01`\x01`\xA0\x1B\x03\x16\x81R` \x01`\x05T`@Q` \x01a\x1E\n\x91\x81R` \x01\x90V[`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x90R\x90Pa\x1E6a\x1E06\x8B\x90\x03\x8B\x01\x8BaA\x06V[\x82a(MV[a\x1ESW`@Qc\x12\xBF\xB7\xB7`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a\x1Eh\x83`\xC0\x8D\x015`\xE0\x8E\x015a*\xD6V[\x90P\x8A5a\x1Ev\x82\x8Ea\x13\xB6V[\x14a\x1E\x94W`@Qcf\xEE\xA9\xAB`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x1E\xA4c\xFF\xFF\xFF\xFF\x86\x16\x87aA\xA4V[\x87Te\xFF\xFF\xFF\xFF\xFF\xFF\x91\x90\x91\x16`\x01``\x1B\x02e\xFF\xFF\xFF\xFF\xFF\xFF``\x1B\x19\x90\x91\x16\x17\x87Ua\x1E\xD8`@\x8C\x01` \x8D\x01a@\0V[\x87Ta\x1E\xED\x91\x90`\x01`\x01``\x1B\x03\x16aA\xC3V[\x87T`\x01`\x01``\x1B\x03\x19\x16`\x01`\x01``\x1B\x03\x91\x90\x91\x16\x90\x81\x17\x88U`@Qa\x1FB\x91a\x1AU\x91\x7F\"\xE2\xA4\"\xA8\x86\x06V\xA3\xA3<\xFA\x1D\xAFw\x1Evy\x8C\xE5d\x97G\x95r5\x02]\xE1.\x0B$\x91\x8F5\x91` \x01a@\xE3V[\x86T`@Q`\x01`\x01``\x1B\x03\x90\x91\x16\x81R\x8B5\x90\x7F\"\xE2\xA4\"\xA8\x86\x06V\xA3\xA3<\xFA\x1D\xAFw\x1Evy\x8C\xE5d\x97G\x95r5\x02]\xE1.\x0B$\x90` \x01`@Q\x80\x91\x03\x90\xA2`\0a\x1F\x90\x8D\x83a\x13\xB6V[\x90P`\0`\x06`\0\x83\x81R` \x01\x90\x81R` \x01`\0 \x90Pa \x1C\x7Fqe\xE2\xEB\xC7\xCE5\xCC\x98\xCBvf\xF9\x94[6\x17\xF3\xF3c&\xB7m\x18\x93{\xA5\xFE\xCF\x18s\x9A\x8E`\0\x01`\0\x015\x8B`\0\x01`\x0C\x90T\x90a\x01\0\n\x90\x04e\xFF\xFF\xFF\xFF\xFF\xFF\x16`@Q` \x01a\x1AU\x93\x92\x91\x90\x92\x83R` \x83\x01\x91\x90\x91R`\xD0\x1B`\x01`\x01`\xD0\x1B\x03\x19\x16`@\x82\x01R`F\x01\x90V[\x88T`@Q`\x01``\x1B\x90\x91\x04e\xFF\xFF\xFF\xFF\xFF\xFF\x16\x81R\x8D5\x90\x7Fqe\xE2\xEB\xC7\xCE5\xCC\x98\xCBvf\xF9\x94[6\x17\xF3\xF3c&\xB7m\x18\x93{\xA5\xFE\xCF\x18s\x9A\x90` \x01`@Q\x80\x91\x03\x90\xA2`\0\x81T`\x01`\xC8\x1B\x90\x04`\xFF\x16`\x02\x81\x11\x15a \x82Wa \x82a<\xBFV[\x03a!lW\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xA0\x1B\x03\x16c\xA9\x05\x9C\xBB3\x8F`\0\x01` \x01` \x81\x01\x90a \xCD\x91\x90a@\0V[`@Q`\x01`\x01`\xE0\x1B\x03\x19`\xE0\x85\x90\x1B\x16\x81R`\x01`\x01`\xA0\x1B\x03\x90\x92\x16`\x04\x83\x01R`\x01`\x01``\x1B\x03\x16`$\x82\x01R`D\x01` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a!!W=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a!E\x91\x90a?BV[\x15\x15`\x01\x14a!gW`@Qc\x02.%\x81`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\"\x03V[a!|`@\x8E\x01` \x8F\x01a@\0V[\x81Ta!\x91\x91\x90`\x01`\x01``\x1B\x03\x16a@\xA7V[\x81T`\x01`\x01``\x1B\x03\x19\x16`\x01`\x01``\x1B\x03\x91\x90\x91\x16\x90\x81\x17\x82U`@Qa!\xD3\x91a\x1AU\x91`\0\x80Q` aB\xC9\x839\x81Q\x91R\x91\x86\x91` \x01a@\xE3V[\x80T`@Q`\x01`\x01``\x1B\x03\x90\x91\x16\x81R\x82\x90`\0\x80Q` aB\xC9\x839\x81Q\x91R\x90` \x01`@Q\x80\x91\x03\x90\xA2[PPPPPPPPPPPPPPV[`\0a\"\x1F\x82\x84a\x13\xB6V[`\0\x81\x81R`\x06` R`@\x81 \x91\x92P\x81T`\x01`\xC8\x1B\x90\x04`\xFF\x16`\x02\x81\x11\x15a\"MWa\"Ma<\xBFV[\x03a\"kW`@QcI\x94c\xC1`\xE0\x1B\x81R`\x04\x01a\x18R\x90aA\xE3V[\x80T`\x01c\xFF\0\0\x01`\xB0\x1B\x03\x19\x81\x16\x82U`@\x80Q`\0\x80Q` aB\xE9\x839\x81Q\x91R` \x82\x01R\x90\x81\x01\x84\x90R`\x01`\x01``\x1B\x03\x90\x91\x16\x90a\"\xB3\x90``\x01a\x1AUV[`@Q\x83\x90`\0\x80Q` aB\xE9\x839\x81Q\x91R\x90`\0\x90\xA2\x80\x15a#\x88W`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R`\x01`\x01`\xA0\x1B\x03\x85\x81\x16`\x04\x83\x01R`$\x82\x01\x83\x90R\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x16\x90c\xA9\x05\x9C\xBB\x90`D\x01[` `@Q\x80\x83\x03\x81`\0\x87Z\xF1\x15\x80\x15a#BW=`\0\x80>=`\0\xFD[PPPP`@Q=`\x1F\x19`\x1F\x82\x01\x16\x82\x01\x80`@RP\x81\x01\x90a#f\x91\x90a?BV[\x15\x15`\x01\x14a#\x88W`@Qc\x02.%\x81`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPPPV[`\0a#\x9B\x83\x83a\x13\xB6V[`\0\x81\x81R`\x06` R`@\x90 \x90\x91P`\x02\x81T`\x01`\xC8\x1B\x90\x04`\xFF\x16`\x02\x81\x11\x15a#\xCBWa#\xCBa<\xBFV[\x14a$(W`@QcI\x94c\xC1`\xE0\x1B\x81R` `\x04\x82\x01R`&`$\x82\x01R\x7Fchannel state must be PENDING_TO`D\x82\x01Re_CLOSE`\xD0\x1B`d\x82\x01R`\x84\x01a\x18RV[\x80Tc\xFF\xFF\xFF\xFFB\x81\x16`\x01`\x90\x1B\x90\x92\x04\x16\x10a$YW`@Qc8\xB2\x01\x95`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[\x80T`\x01c\xFF\0\0\x01`\xB0\x1B\x03\x19\x81\x16\x82U`@\x80Q`\0\x80Q` aB\xE9\x839\x81Q\x91R` \x82\x01R\x90\x81\x01\x84\x90R`\x01`\x01``\x1B\x03\x90\x91\x16\x90a$\xA1\x90``\x01a\x1AUV[`@Q\x83\x90`\0\x80Q` aB\xE9\x839\x81Q\x91R\x90`\0\x90\xA2\x80\x15a#\x88W`@Qc\xA9\x05\x9C\xBB`\xE0\x1B\x81R3`\x04\x82\x01R`$\x81\x01\x82\x90R\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0`\x01`\x01`\xA0\x1B\x03\x16\x90c\xA9\x05\x9C\xBB\x90`D\x01a##V[`\0`\x01\x81`\x1B\x7Fy\xBEf~\xF9\xDC\xBB\xACU\xA0b\x95\xCE\x87\x0B\x07\x02\x9B\xFC\xDB-\xCE(\xD9Y\xF2\x81[\x16\xF8\x17\x98p\x01EQ#\x19P\xB7_\xC4@-\xA1s/\xC9\xBE\xBE\x19\x7Fy\xBEf~\xF9\xDC\xBB\xACU\xA0b\x95\xCE\x87\x0B\x07\x02\x9B\xFC\xDB-\xCE(\xD9Y\xF2\x81[\x16\xF8\x17\x98\x87\t`@\x80Q`\0\x81R` \x81\x01\x80\x83R\x95\x90\x95R`\xFF\x90\x93\x16\x92\x84\x01\x92\x90\x92R``\x83\x01R`\x80\x82\x01R`\xA0\x01` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15a%\xBFW=`\0\x80>=`\0\xFD[PP`@Q`\x1F\x19\x01Q\x93\x92PPPV[`\0a%\xDC\x83\x83a\x13\xB6V[`\0\x81\x81R`\x06` R`@\x81 \x91\x92P\x81T`\x01`\xC8\x1B\x90\x04`\xFF\x16`\x02\x81\x11\x15a&\nWa&\na<\xBFV[\x03a&(W`@QcI\x94c\xC1`\xE0\x1B\x81R`\x04\x01a\x18R\x90aA\xE3V[a&R\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0BaB3V[\x81T`\x01`\xC9\x1Bg\xFF\0\0\0\xFF\xFF\xFF\xFF`\x90\x1B\x19\x90\x91\x16`\xFF`\xC8\x1B\x19`\x01`\x90\x1Bc\xFF\xFF\xFF\xFF\x94\x90\x94\x16\x84\x02\x16\x17\x17\x80\x83U`@\x80Q\x7F\x07\xB5\xC9PY\x7F\xC3\xBE\xD9.*\xD3\x7F\xA8Op\x16U\xAC\xB3r\x98.Ho_\xAD6\x07\xF0J\\` \x82\x01R\x90\x81\x01\x85\x90R\x91\x90\x04`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16``\x82\x01Ra&\xD6\x90`d\x01a\x1AUV[\x80T`@Q`\x01`\x90\x1B\x90\x91\x04c\xFF\xFF\xFF\xFF\x16\x81R\x82\x90\x7F\x07\xB5\xC9PY\x7F\xC3\xBE\xD9.*\xD3\x7F\xA8Op\x16U\xAC\xB3r\x98.Ho_\xAD6\x07\xF0J\\\x90` \x01`@Q\x80\x91\x03\x90\xA2PPPPV[``a\r\xDB\x83\x83`@Q\x80``\x01`@R\x80`'\x81R` \x01aB\xA2`'\x919a*\xFCV[`\x01T`\0\x90a'\x83\x90\x7F\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x90`\x01`\xE0\x1B\x90\x04c\xFF\xFF\xFF\xFF\x16a?/V[B\x11\x15a'\x8EWP`\x01[`\x03T`\x01T\x83Q` \x80\x86\x01\x91\x90\x91 `@\x80Q\x80\x84\x01\x95\x90\x95RC`\xE0\x1B`\x01`\x01`\xE0\x1B\x03\x19\x16\x90\x85\x01R\x91\x90\x1Bc\xFF\xFF\xFF\xFF\x19\x16`D\x83\x01R``\x82\x01R`\x80\x01`@\x80Q`\x1F\x19\x81\x84\x03\x01\x81R\x91\x90R\x80Q` \x91\x82\x01 c\xFF\xFF\xFF\xFFB\x16`\x01`\xE0\x1B\x02\x91\x1C\x17`\x01U\x80\x15a\x16\x98WPP`\x01T`\x01`\x01`\xE0\x1B\x03\x81\x16`\x01`\xE0\x1B\x91\x82\x90\x04c\xFF\xFF\xFF\xFF\x16\x90\x91\x02\x17`\x02UV[`\0\x81\x15\x80a\r\xDEWPPp\x01EQ#\x19P\xB7_\xC4@-\xA1s/\xC9\xBE\xBE\x19\x11\x90V[`\0d\x01\0\0\x03\xD0\x19\x83``\x01Q\x10\x15\x80a(rWPd\x01\0\0\x03\xD0\x19\x83`@\x01Q\x10\x15[\x15a(\x90W`@Qc:\xE4\xEDk`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a(\xA2\x83`\0\x01Q\x84` \x01Qa+tV[a(\xBFW`@Qc9\"\xA5A`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x80a)\x11\x84` \x01Q\x85`\0\x01Q`@Q` \x01a(\xF8\x92\x91\x90``\x92\x90\x92\x1B`\x01`\x01``\x1B\x03\x19\x16\x82R`\x14\x82\x01R`4\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x85`@\x01Qa+\x9FV[\x91P\x91P`\0a)&\x86`@\x01Q\x84\x84a,%V[\x90Pa)a\x86`\x80\x01Q\x87`\xA0\x01Q`@\x80Q` \x80\x82\x01\x94\x90\x94R\x80\x82\x01\x92\x90\x92R\x80Q\x80\x83\x03\x82\x01\x81R``\x90\x92\x01\x90R\x80Q\x91\x01 \x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x14a)\x92W`@Qc\x1D\xBF\xB9\xB3`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0a)\xAB\x87``\x01Q\x88`\0\x01Q\x89` \x01Qa,%V[\x90Pa)\xE6\x87`\xC0\x01Q\x88`\xE0\x01Q`@\x80Q` \x80\x82\x01\x94\x90\x94R\x80\x82\x01\x92\x90\x92R\x80Q\x80\x83\x03\x82\x01\x81R``\x90\x92\x01\x90R\x80Q\x91\x01 \x90V[`\x01`\x01`\xA0\x1B\x03\x16\x81`\x01`\x01`\xA0\x1B\x03\x16\x14a*\x17W`@Qc\x1D\xBF\xB9\xB3`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`\0\x80a*I\x89`\x80\x01Q\x8A`\xA0\x01Q\x8B`\xC0\x01Q\x8C`\xE0\x01Qd\x01\0\0\x03\xD0\x19a*B\x91\x90aBPV[`\0a,\xC4V[` \x80\x8B\x01Q\x8CQ\x8D\x83\x01Q\x8DQ`@Q\x96\x98P\x94\x96P`\0\x95a*\xC1\x95a*\xA8\x95\x8A\x92\x8A\x92\x91\x01``\x96\x90\x96\x1B`\x01`\x01``\x1B\x03\x19\x16\x86R`\x14\x86\x01\x94\x90\x94R`4\x85\x01\x92\x90\x92R`T\x84\x01R`t\x83\x01R`\x94\x82\x01R`\xB4\x01\x90V[`@Q` \x81\x83\x03\x03\x81R\x90`@R\x8A`@\x01Qa.KV[``\x8B\x01Q\x14\x97PPPPPPPP\x92\x91PPV[`\0\x80`\0a*\xE6\x86\x86\x86a.\xBCV[\x91P\x91Pa*\xF3\x81a.\xF5V[P\x94\x93PPPPV[```\0\x80\x85`\x01`\x01`\xA0\x1B\x03\x16\x85`@Qa+\x19\x91\x90aBcV[`\0`@Q\x80\x83\x03\x81\x85Z\xF4\x91PP=\x80`\0\x81\x14a+TW`@Q\x91P`\x1F\x19`?=\x01\x16\x82\x01`@R=\x82R=`\0` \x84\x01>a+YV[``\x91P[P\x91P\x91Pa+j\x86\x83\x83\x87a0?V[\x96\x95PPPPPPV[`\0d\x01\0\0\x03\xD0\x19\x80\x84d\x01\0\0\x03\xD0\x19\x86\x87\t\t`\x07\x08d\x01\0\0\x03\xD0\x19\x83\x84\t\x14\x93\x92PPPV[`\0\x80`\0\x80a+\xAF\x86\x86a0\xC0V[\x91P\x91P`\0\x80a+\xBF\x84a1|V[\x91P\x91P`\0\x80a+\xCF\x85a1|V[\x91P\x91P`\0\x80a,\x03\x86\x86\x86\x86\x7F?\x871\xAB\xDDf\x1A\xDC\xA0\x8AUX\xF0\xF5\xD2r\xE9S\xD3c\xCBo\x0E]@TG\xC0\x1ADE3a,\xC4V[\x91P\x91Pa,\x11\x82\x82a4>V[\x99P\x99PPPPPPPPP[\x92P\x92\x90PV[`\0\x80a,3`\x02\x84aB\x7FV[`\0\x03a,BWP`\x1Ba,FV[P`\x1C[`\x01`\0\x82\x86p\x01EQ#\x19P\xB7_\xC4@-\xA1s/\xC9\xBE\xBE\x19\x88\x8A\t`@\x80Q`\0\x81R` \x81\x01\x80\x83R\x95\x90\x95R`\xFF\x90\x93\x16\x92\x84\x01\x92\x90\x92R``\x83\x01R`\x80\x82\x01R`\xA0\x01` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15a,\xB0W=`\0\x80>=`\0\xFD[PP`@Q`\x1F\x19\x01Q\x96\x95PPPPPPV[`\0\x80\x83\x86\x14\x19\x85\x88\x14\x16\x15a,\xD9W`\0\x80\xFD[`\0\x80\x85\x88\x14\x87\x8A\x14\x16`\x01\x81\x14a,\xF6W\x80\x15a-sWa-\xEEV[d\x01\0\0\x03\xD0\x19\x86d\x01\0\0\x03\xD0\x19\x8B`\x02\t\x08\x91P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x82``\x82\x01Rd\x01\0\0\x03\xD2\x19`\x80\x82\x01Rd\x01\0\0\x03\xD0\x19`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa-SW`\0\x80\xFD[d\x01\0\0\x03\xD0\x19\x81Qd\x01\0\0\x03\xD0\x19\x80\x8E\x8F\t`\x03\t\t\x93PPa-\xEEV[d\x01\0\0\x03\xD0\x19\x8Ad\x01\0\0\x03\xD0\x19\x03\x89\x08\x91P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x82``\x82\x01Rd\x01\0\0\x03\xD2\x19`\x80\x82\x01Rd\x01\0\0\x03\xD0\x19`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa-\xCEW`\0\x80\xFD[d\x01\0\0\x03\xD0\x19\x81Qd\x01\0\0\x03\xD0\x19\x8Cd\x01\0\0\x03\xD0\x19\x03\x8B\x08\t\x93PP[PPd\x01\0\0\x03\xD0\x19\x80\x89d\x01\0\0\x03\xD0\x19\x03\x88d\x01\0\0\x03\xD0\x19\x03\x08d\x01\0\0\x03\xD0\x19\x83\x84\t\x08\x92Pd\x01\0\0\x03\xD0\x19\x87d\x01\0\0\x03\xD0\x19\x03d\x01\0\0\x03\xD0\x19\x80\x86d\x01\0\0\x03\xD0\x19\x03\x8C\x08\x84\t\x08\x91PP\x95P\x95\x93PPPPV[`\0\x80`\0a.Z\x85\x85a7+V[\x91P\x91P`@Q`0\x81R` \x80\x82\x01R` `@\x82\x01R\x82``\x82\x01R\x81`\x80\x82\x01R`\x01`\x90\x82\x01Rp\x01EQ#\x19P\xB7_\xC4@-\xA1s/\xC9\xBE\xBE\x19`\xB0\x82\x01R` \x81`\xD0\x83`\x05`\0\x19\xFAa.\xB2W`\0\x80\xFD[Q\x95\x94PPPPPV[`\0\x80`\x01`\x01`\xFF\x1B\x03\x83\x16\x81a.\xD9`\xFF\x86\x90\x1C`\x1Ba?/V[\x90Pa.\xE7\x87\x82\x88\x85a8+V[\x93P\x93PPP\x93P\x93\x91PPV[`\0\x81`\x04\x81\x11\x15a/\tWa/\ta<\xBFV[\x03a/\x11WPV[`\x01\x81`\x04\x81\x11\x15a/%Wa/%a<\xBFV[\x03a/rW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x18`$\x82\x01R\x7FECDSA: invalid signature\0\0\0\0\0\0\0\0`D\x82\x01R`d\x01a\x18RV[`\x02\x81`\x04\x81\x11\x15a/\x86Wa/\x86a<\xBFV[\x03a/\xD3W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1F`$\x82\x01R\x7FECDSA: invalid signature length\0`D\x82\x01R`d\x01a\x18RV[`\x03\x81`\x04\x81\x11\x15a/\xE7Wa/\xE7a<\xBFV[\x03a\x0BMW`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\"`$\x82\x01R\x7FECDSA: invalid signature 's' val`D\x82\x01Raue`\xF0\x1B`d\x82\x01R`\x84\x01a\x18RV[``\x83\x15a0\xAEW\x82Q`\0\x03a0\xA7W`\x01`\x01`\xA0\x1B\x03\x85\x16;a0\xA7W`@QbF\x1B\xCD`\xE5\x1B\x81R` `\x04\x82\x01R`\x1D`$\x82\x01R\x7FAddress: call to non-contract\0\0\0`D\x82\x01R`d\x01a\x18RV[P\x81a0\xB8V[a0\xB8\x83\x83a8\xEFV[\x94\x93PPPPV[`\0\x80`\0\x80`\0a0\xD2\x87\x87a9\x19V[\x92P\x92P\x92P`@Q`0\x81R` \x80\x82\x01R` `@\x82\x01R\x83``\x82\x01R\x82`\x80\x82\x01R`\x01`\x90\x82\x01Rd\x01\0\0\x03\xD0\x19`\xB0\x82\x01R` \x81`\xD0\x83`\x05`\0\x19\xFAa1 W`\0\x80\xFD[\x80Q\x95PP`@Q`0\x81R` \x80\x82\x01R\x82`P\x82\x01R` `@\x82\x01R\x81`p\x82\x01R`\x01`\x90\x82\x01Rd\x01\0\0\x03\xD0\x19`\xB0\x82\x01R` \x81`\xD0\x83`\x05`\0\x19\xFAa1mW`\0\x80\xFD[\x80Q\x94PPPPP\x92P\x92\x90PV[`\0\x80d\x01\0\0\x03\xD0\x19\x83\x84\td\x01\0\0\x03\xD0\x19\x81d\x01\0\0\x03\xDB\x19\t\x90Pd\x01\0\0\x03\xD0\x19\x81\x82\td\x01\0\0\x03\xD0\x19\x82\x82\x08\x90Pd\x01\0\0\x03\xD0\x19`\x01\x82\x08d\x01\0\0\x03\xD0\x19a\x06\xEB\x82\t\x90P`\0\x82\x15`\x01\x81\x14a1\xE1W\x80\x15a1\xEFWa1\xFBV[d\x01\0\0\x03\xDB\x19\x91Pa1\xFBV[\x83d\x01\0\0\x03\xD0\x19\x03\x91P[Pd\x01\0\0\x03\xD0\x19\x81\x7F?\x871\xAB\xDDf\x1A\xDC\xA0\x8AUX\xF0\xF5\xD2r\xE9S\xD3c\xCBo\x0E]@TG\xC0\x1ADE3\t\x90Pd\x01\0\0\x03\xD0\x19\x82\x83\t\x92Pd\x01\0\0\x03\xD0\x19\x81\x82\td\x01\0\0\x03\xD0\x19\x81\x7F?\x871\xAB\xDDf\x1A\xDC\xA0\x8AUX\xF0\xF5\xD2r\xE9S\xD3c\xCBo\x0E]@TG\xC0\x1ADE3\td\x01\0\0\x03\xD0\x19\x81\x86\x08\x94Pd\x01\0\0\x03\xD0\x19\x84\x86\t\x94Pd\x01\0\0\x03\xD0\x19\x83\x83\t\x91Pd\x01\0\0\x03\xD0\x19\x82a\x06\xEB\t\x90Pd\x01\0\0\x03\xD0\x19\x81\x86\x08\x94PPd\x01\0\0\x03\xD0\x19\x83\x86\t\x96P`\0\x80d\x01\0\0\x03\xD0\x19\x83\x84\td\x01\0\0\x03\xD0\x19\x84\x88\td\x01\0\0\x03\xD0\x19\x81\x83\t\x91P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x82``\x82\x01Rc@\0\0\xF5`\x01`\xFE\x1B\x03`\x80\x82\x01Rd\x01\0\0\x03\xD0\x19`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa3!W`\0\x80\xFD[d\x01\0\0\x03\xD0\x19\x82\x82Q\t\x92PPPd\x01\0\0\x03\xD0\x19\x7F1\xFD\xF3\x02r@\x13\xE5z\xD1?\xB3\x8F\x84*\xFE\xEC\x18O\0\xA7G\x89\xDD(g)\xC80<JY\x82\td\x01\0\0\x03\xD0\x19\x82\x83\td\x01\0\0\x03\xD0\x19\x86\x82\t\x90P\x88\x81\x14`\x01\x81\x14a3\x86W\x80\x15a3\x92Wa3\x9AV[`\x01\x94P\x83\x95Pa3\x9AV[`\0\x94P\x82\x95P[PPPPd\x01\0\0\x03\xD0\x19\x8A\x88\t\x97Pd\x01\0\0\x03\xD0\x19\x82\x89\t\x97P\x80\x15a3\xC3W\x84\x98P\x81\x97P[PPP`\x02\x85\x06`\x02\x88\x06\x14a3\xDFW\x84d\x01\0\0\x03\xD0\x19\x03\x94P[`@Q\x93P` \x84R` \x80\x85\x01R` `@\x85\x01R\x80``\x85\x01RPPPd\x01\0\0\x03\xD2\x19`\x80\x82\x01Rd\x01\0\0\x03\xD0\x19`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa4+W`\0\x80\xFD[d\x01\0\0\x03\xD0\x19\x81Q\x84\t\x92PP\x91P\x91V[`\0\x80d\x01\0\0\x03\xD0\x19\x84\x85\td\x01\0\0\x03\xD0\x19\x81\x86\td\x01\0\0\x03\xD0\x19\x80\x7F\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8D\xAA\xAA\xA8\xC7d\x01\0\0\x03\xD0\x19\x89\x7F\x07\xD3\xD4\xC8\x0B\xC3!\xD5\xB9\xF3\x15\xCE\xA7\xFDD\xC5\xD5\x95\xD2\xFC\x0B\xF6;\x92\xDF\xFF\x10D\xF1|e\x81\t\x08d\x01\0\0\x03\xD0\x19\x80\x85\x7FSL2\x8D#\xF24\xE6\xE2\xA4\x13\xDE\xCA%\xCA\xEC\xE4PaD\x03|@1N\xCB\xD0\xB5=\x9D\xD2b\td\x01\0\0\x03\xD0\x19\x85\x7F\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8E8\xE3\x8D\xAA\xAA\xA8\x8C\t\x08\x08d\x01\0\0\x03\xD0\x19\x7F\xD3Wq\x19=\x94\x91\x8A\x9C\xA3L\xCB\xB7\xB6@\xDD\x86\xCD@\x95B\xF8H}\x9F\xE6\xB7Ex\x1E\xB4\x9Bd\x01\0\0\x03\xD0\x19\x80\x8A\x7F\xED\xAD\xC6\xF6C\x83\xDC\x1D\xF7\xC4\xB2\xD5\x1BT\"T\x06\xD3kd\x1F^A\xBB\xC5*Va*\x8Cm\x14\t\x86\x08\x08`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x81``\x82\x01Rd\x01\0\0\x03\xD2\x19`\x80\x82\x01Rd\x01\0\0\x03\xD0\x19`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa5\x9DW`\0\x80\xFD[\x80Q\x91Pd\x01\0\0\x03\xD0\x19\x82\x84\t\x96Pd\x01\0\0\x03\xD0\x19\x80\x7FK\xDA\x12\xF6\x84\xBD\xA1/hK\xDA\x12\xF6\x84\xBD\xA1/hK\xDA\x12\xF6\x84\xBD\xA1/hK\x8E8\xE2<d\x01\0\0\x03\xD0\x19\x8C\x7F\xC7^\x0C2\xD5\xCB|\x0F\xA9\xD0\xA5K\x12\xA0\xA6\xD5dz\xB0F\xD6\x86\xDAo\xDF\xFC\x90\xFC \x1Dq\xA3\t\x08d\x01\0\0\x03\xD0\x19\x80\x88\x7F)\xA6\x19F\x91\xF9\x1AsqR\t\xEFe\x12\xE5vr(0\xA2\x01\xBE \x18\xA7e\xE8Z\x9E\xCE\xE91\td\x01\0\0\x03\xD0\x19\x88\x7F/hK\xDA\x12\xF6\x84\xBD\xA1/hK\xDA\x12\xF6\x84\xBD\xA1/hK\xDA\x12\xF6\x84\xBD\xA1/8\xE3\x8D\x84\t\x08\x08\x92Pd\x01\0\0\x03\xD0\x19\x80d\x01\0\0\x06\xC4\x19d\x01\0\0\x03\xD0\x19\x8C\x7Fz\x06SK\xB8\xBD\xB4\x9F\xD5\xE9\xE6c'\"\xC2\x98\x94g\xC1\xBF\xC8\xE8\xD9x\xDF\xB4%\xD2h\\%s\t\x08d\x01\0\0\x03\xD0\x19\x80\x88\x7Fd\x84\xAAqeE\xCA,\xF3\xA7\x0C?\xA8\xFE3~\n=!\x16/\rb\x99\xA7\xBF\x81\x92\xBF\xD2\xA7o\t\x87\x08\x08\x94P`@Q\x90P` \x81R` \x80\x82\x01R` `@\x82\x01R\x84``\x82\x01Rd\x01\0\0\x03\xD2\x19`\x80\x82\x01Rd\x01\0\0\x03\xD0\x19`\xA0\x82\x01R` \x81`\xC0\x83`\x05`\0\x19\xFAa7\rW`\0\x80\xFD[Q\x93Pd\x01\0\0\x03\xD0\x19\x90P\x83\x81\x83\x89\t\t\x93PPPP\x92P\x92\x90PV[`\0\x80`\xFF\x83Q\x11\x15a7=W`\0\x80\xFD[`\0`@Q`\x88` `\0[\x88Q\x81\x10\x15a7jW\x88\x82\x01Q\x84\x84\x01R` \x92\x83\x01\x92\x91\x82\x01\x91\x01a7IV[PP`\x89\x87Q\x01\x90P`0\x81\x83\x01S`\x02\x01` `\0[\x87Q\x81\x10\x15a7\xA2W\x87\x82\x01Q\x84\x84\x01R` \x92\x83\x01\x92\x91\x82\x01\x91\x01a7\x81V[PP`\x8B\x86Q\x88Q\x01\x01\x90P\x85Q\x81\x83\x01SP\x85Q\x85Q\x01`\x8C\x01\x81 \x91PP`@Q\x81\x81R`\x01` \x82\x01S`!` `\0[\x87Q\x81\x10\x15a7\xF7W\x87\x82\x01Q\x84\x84\x01R` \x92\x83\x01\x92\x91\x82\x01\x91\x01a7\xD6V[PPP\x84Q\x85Q`!\x01\x82\x01S\x84Q`\"\x01\x81 \x93P\x83\x82\x18\x81R`\x02` \x82\x01S\x84Q`\"\x01\x81 \x92PPP\x92P\x92\x90PV[`\0\x80\x7F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF]WnsW\xA4P\x1D\xDF\xE9/Fh\x1B \xA0\x83\x11\x15a8bWP`\0\x90P`\x03a8\xE6V[`@\x80Q`\0\x80\x82R` \x82\x01\x80\x84R\x89\x90R`\xFF\x88\x16\x92\x82\x01\x92\x90\x92R``\x81\x01\x86\x90R`\x80\x81\x01\x85\x90R`\x01\x90`\xA0\x01` `@Q` \x81\x03\x90\x80\x84\x03\x90\x85Z\xFA\x15\x80\x15a8\xB6W=`\0\x80>=`\0\xFD[PP`@Q`\x1F\x19\x01Q\x91PP`\x01`\x01`\xA0\x1B\x03\x81\x16a8\xDFW`\0`\x01\x92P\x92PPa8\xE6V[\x91P`\0\x90P[\x94P\x94\x92PPPV[\x81Q\x15a8\xFFW\x81Q\x80\x83` \x01\xFD[\x80`@QbF\x1B\xCD`\xE5\x1B\x81R`\x04\x01a\x18R\x91\x90a>\x86V[`\0\x80`\0`\xFF\x84Q\x11\x15a9-W`\0\x80\xFD[`\0`@Q`\x88` `\0[\x89Q\x81\x10\x15a9ZW\x89\x82\x01Q\x84\x84\x01R` \x92\x83\x01\x92\x91\x82\x01\x91\x01a99V[PP`\x89\x88Q\x01\x90P``\x81\x83\x01S`\x02\x01` `\0[\x88Q\x81\x10\x15a9\x92W\x88\x82\x01Q\x84\x84\x01R` \x92\x83\x01\x92\x91\x82\x01\x91\x01a9qV[PP`\x8B\x87Q\x89Q\x01\x01\x90P\x86Q\x81\x83\x01SP\x86Q\x86Q\x01`\x8C\x01\x81 \x91PP`@Q\x81\x81R`\x01` \x82\x01S`!` `\0[\x88Q\x81\x10\x15a9\xE7W\x88\x82\x01Q\x84\x84\x01R` \x92\x83\x01\x92\x91\x82\x01\x91\x01a9\xC6V[PPP\x85Q\x86Q`!\x01\x82\x01S\x85Q`\"\x01\x81 \x94P\x84\x82\x18\x81R`\x02` \x82\x01S\x85Q`\"\x01\x81 \x93P\x83\x82\x18\x81R`\x03` \x82\x01S\x85Q`\"\x01\x81 \x92PPP\x92P\x92P\x92V[`\x01`\x01`\xA0\x1B\x03\x81\x16\x81\x14a\x0BMW`\0\x80\xFD[`\0\x80\x83`\x1F\x84\x01\x12a:WW`\0\x80\xFD[P\x815g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x15a:oW`\0\x80\xFD[` \x83\x01\x91P\x83` \x82\x85\x01\x01\x11\x15a,\x1EW`\0\x80\xFD[`\0\x80`\0\x80`\0\x80`\0\x80`\xC0\x89\x8B\x03\x12\x15a:\xA3W`\0\x80\xFD[\x885a:\xAE\x81a:0V[\x97P` \x89\x015a:\xBE\x81a:0V[\x96P`@\x89\x015a:\xCE\x81a:0V[\x95P``\x89\x015\x94P`\x80\x89\x015g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a:\xF2W`\0\x80\xFD[a:\xFE\x8C\x83\x8D\x01a:EV[\x90\x96P\x94P`\xA0\x8B\x015\x91P\x80\x82\x11\x15a;\x17W`\0\x80\xFD[Pa;$\x8B\x82\x8C\x01a:EV[\x99\x9C\x98\x9BP\x96\x99P\x94\x97\x93\x96\x92\x95\x94PPPV[\x805`\x01`\x01``\x1B\x03\x81\x16\x81\x14a;OW`\0\x80\xFD[\x91\x90PV[`\0\x80`\0``\x84\x86\x03\x12\x15a;iW`\0\x80\xFD[\x835a;t\x81a:0V[\x92P` \x84\x015a;\x84\x81a:0V[\x91Pa;\x92`@\x85\x01a;8V[\x90P\x92P\x92P\x92V[`\0a\x01 \x82\x84\x03\x12\x15a;\xAEW`\0\x80\xFD[P\x91\x90PV[`\0a\x01\0\x82\x84\x03\x12\x15a;\xAEW`\0\x80\xFD[`\0\x80`\0a\x02@\x84\x86\x03\x12\x15a;\xDDW`\0\x80\xFD[\x835a;\xE8\x81a:0V[\x92Pa;\xF7\x85` \x86\x01a;\x9BV[\x91Pa;\x92\x85a\x01@\x86\x01a;\xB4V[`\0` \x82\x84\x03\x12\x15a<\x19W`\0\x80\xFD[\x815a<$\x81a:0V[\x93\x92PPPV[`\0a\x01 \x82\x84\x03\x12\x15a<>W`\0\x80\xFD[a\r\xDB\x83\x83a;\x9BV[`\0\x80`@\x83\x85\x03\x12\x15a<[W`\0\x80\xFD[\x825\x91P` \x83\x015a<m\x81a:0V[\x80\x91PP\x92P\x92\x90PV[`\0\x80`@\x83\x85\x03\x12\x15a<\x8BW`\0\x80\xFD[\x825a<\x96\x81a:0V[\x91P` \x83\x015a<m\x81a:0V[`\0` \x82\x84\x03\x12\x15a<\xB8W`\0\x80\xFD[P5\x91\x90PV[cNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[`\x01`\x01``\x1B\x03\x86\x16\x81Re\xFF\xFF\xFF\xFF\xFF\xFF\x85\x16` \x82\x01Rc\xFF\xFF\xFF\xFF\x84\x16`@\x82\x01Rb\xFF\xFF\xFF\x83\x16``\x82\x01R`\xA0\x81\x01`\x03\x83\x10a=(WcNH{q`\xE0\x1B`\0R`!`\x04R`$`\0\xFD[\x82`\x80\x83\x01R\x96\x95PPPPPPV[`\0\x80`\0a\x02@\x84\x86\x03\x12\x15a=NW`\0\x80\xFD[\x835\x92Pa;\xF7\x85` \x86\x01a;\x9BV[`\0\x80` \x83\x85\x03\x12\x15a=rW`\0\x80\xFD[\x825g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x80\x82\x11\x15a=\x8AW`\0\x80\xFD[\x81\x85\x01\x91P\x85`\x1F\x83\x01\x12a=\x9EW`\0\x80\xFD[\x815\x81\x81\x11\x15a=\xADW`\0\x80\xFD[\x86` \x82`\x05\x1B\x85\x01\x01\x11\x15a=\xC2W`\0\x80\xFD[` \x92\x90\x92\x01\x96\x91\x95P\x90\x93PPPPV[`\0[\x83\x81\x10\x15a=\xEFW\x81\x81\x01Q\x83\x82\x01R` \x01a=\xD7V[PP`\0\x91\x01RV[`\0\x81Q\x80\x84Ra>\x10\x81` \x86\x01` \x86\x01a=\xD4V[`\x1F\x01`\x1F\x19\x16\x92\x90\x92\x01` \x01\x92\x91PPV[`\0` \x80\x83\x01\x81\x84R\x80\x85Q\x80\x83R`@\x86\x01\x91P`@\x81`\x05\x1B\x87\x01\x01\x92P\x83\x87\x01`\0[\x82\x81\x10\x15a>yW`?\x19\x88\x86\x03\x01\x84Ra>g\x85\x83Qa=\xF8V[\x94P\x92\x85\x01\x92\x90\x85\x01\x90`\x01\x01a>KV[P\x92\x97\x96PPPPPPPV[` \x81R`\0a\r\xDB` \x83\x01\x84a=\xF8V[`\0\x80`@\x83\x85\x03\x12\x15a>\xACW`\0\x80\xFD[\x825a>\xB7\x81a:0V[\x91Pa>\xC5` \x84\x01a;8V[\x90P\x92P\x92\x90PV[`\0\x80a\x02 \x83\x85\x03\x12\x15a>\xE2W`\0\x80\xFD[a>\xEC\x84\x84a;\x9BV[\x91Pa>\xC5\x84a\x01 \x85\x01a;\xB4V[`\0` \x82\x84\x03\x12\x15a?\x0EW`\0\x80\xFD[\x81Qa<$\x81a:0V[cNH{q`\xE0\x1B`\0R`\x11`\x04R`$`\0\xFD[\x80\x82\x01\x80\x82\x11\x15a\r\xDEWa\r\xDEa?\x19V[`\0` \x82\x84\x03\x12\x15a?TW`\0\x80\xFD[\x81Q\x80\x15\x15\x81\x14a<$W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a?vW`\0\x80\xFD[\x815f\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x14a<$W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a?\x9FW`\0\x80\xFD[\x815b\xFF\xFF\xFF\x81\x16\x81\x14a<$W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a?\xC4W`\0\x80\xFD[\x815c\xFF\xFF\xFF\xFF\x81\x16\x81\x14a<$W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a?\xEAW`\0\x80\xFD[\x815e\xFF\xFF\xFF\xFF\xFF\xFF\x81\x16\x81\x14a<$W`\0\x80\xFD[`\0` \x82\x84\x03\x12\x15a@\x12W`\0\x80\xFD[a\r\xDB\x82a;8V[cNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[cNH{q`\xE0\x1B`\0R`2`\x04R`$`\0\xFD[`\0\x80\x835`\x1E\x19\x846\x03\x01\x81\x12a@^W`\0\x80\xFD[\x83\x01\x805\x91Pg\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x15a@yW`\0\x80\xFD[` \x01\x91P6\x81\x90\x03\x82\x13\x15a,\x1EW`\0\x80\xFD[`\0`\x01\x82\x01a@\xA0Wa@\xA0a?\x19V[P`\x01\x01\x90V[`\x01`\x01``\x1B\x03\x81\x81\x16\x83\x82\x16\x01\x90\x80\x82\x11\x15a\x12\xDFWa\x12\xDFa?\x19V[b\xFF\xFF\xFF\x81\x81\x16\x83\x82\x16\x01\x90\x80\x82\x11\x15a\x12\xDFWa\x12\xDFa?\x19V[\x92\x83R` \x83\x01\x91\x90\x91R`\xA0\x1B`\x01`\x01`\xA0\x1B\x03\x19\x16`@\x82\x01R`L\x01\x90V[`\0a\x01\0\x80\x83\x85\x03\x12\x15aA\x1AW`\0\x80\xFD[`@Q\x90\x81\x01\x90g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x82\x11\x81\x83\x10\x17\x15aAKWcNH{q`\xE0\x1B`\0R`A`\x04R`$`\0\xFD[\x81`@R\x835\x81R` \x84\x015` \x82\x01R`@\x84\x015`@\x82\x01R``\x84\x015``\x82\x01R`\x80\x84\x015`\x80\x82\x01R`\xA0\x84\x015`\xA0\x82\x01R`\xC0\x84\x015`\xC0\x82\x01R`\xE0\x84\x015`\xE0\x82\x01R\x80\x92PPP\x92\x91PPV[e\xFF\xFF\xFF\xFF\xFF\xFF\x81\x81\x16\x83\x82\x16\x01\x90\x80\x82\x11\x15a\x12\xDFWa\x12\xDFa?\x19V[`\x01`\x01``\x1B\x03\x82\x81\x16\x82\x82\x16\x03\x90\x80\x82\x11\x15a\x12\xDFWa\x12\xDFa?\x19V[` \x80\x82R`0\x90\x82\x01R\x7Fchannel must have state OPEN or `@\x82\x01RoPENDING_TO_CLOSE`\x80\x1B``\x82\x01R`\x80\x01\x90V[c\xFF\xFF\xFF\xFF\x81\x81\x16\x83\x82\x16\x01\x90\x80\x82\x11\x15a\x12\xDFWa\x12\xDFa?\x19V[\x81\x81\x03\x81\x81\x11\x15a\r\xDEWa\r\xDEa?\x19V[`\0\x82QaBu\x81\x84` \x87\x01a=\xD4V[\x91\x90\x91\x01\x92\x91PPV[`\0\x82aB\x9CWcNH{q`\xE0\x1B`\0R`\x12`\x04R`$`\0\xFD[P\x06\x90V\xFEAddress: low-level delegate call failed_\xA1rF\xD3\xA5\xD6\x8DB\xBA\xA9L\xDE3\x04!\x80\xB7\x83\xA3\x99\xC0+\xF6:\xC2\x07n\x0Fp\x878\xCE\xEA\xB2\xEE\xF9\x98\xC1\x7F\xE9o0\xF8?\xBF<U\xFCPG\xF6\xE4\x0CU\xA0\xCFr\xD26\xE9\xD2\xBAr\xA2dipfsX\"\x12 #C\x98\r\x92\x99\x8E\xDA\xEE\x11\xA6gb5\xEBu\x89\x9E\x11\x17\x08\xED\n*3T\\\xCD\xCB\x0E\x05\x03dsolcC\0\x08\x13\x003",
2029    );
2030    #[derive(serde::Serialize, serde::Deserialize)]
2031    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2032    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2033    #[derive(Clone)]
2034    pub struct ChannelStatus(u8);
2035    const _: () = {
2036        use alloy::sol_types as alloy_sol_types;
2037        #[automatically_derived]
2038        impl alloy_sol_types::private::SolTypeValue<ChannelStatus> for u8 {
2039            #[inline]
2040            fn stv_to_tokens(
2041                &self,
2042            ) -> <alloy::sol_types::sol_data::Uint<
2043                8,
2044            > as alloy_sol_types::SolType>::Token<'_> {
2045                alloy_sol_types::private::SolTypeValue::<
2046                    alloy::sol_types::sol_data::Uint<8>,
2047                >::stv_to_tokens(self)
2048            }
2049            #[inline]
2050            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
2051                <alloy::sol_types::sol_data::Uint<
2052                    8,
2053                > as alloy_sol_types::SolType>::tokenize(self)
2054                    .0
2055            }
2056            #[inline]
2057            fn stv_abi_encode_packed_to(
2058                &self,
2059                out: &mut alloy_sol_types::private::Vec<u8>,
2060            ) {
2061                <alloy::sol_types::sol_data::Uint<
2062                    8,
2063                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
2064            }
2065            #[inline]
2066            fn stv_abi_packed_encoded_size(&self) -> usize {
2067                <alloy::sol_types::sol_data::Uint<
2068                    8,
2069                > as alloy_sol_types::SolType>::abi_encoded_size(self)
2070            }
2071        }
2072        #[automatically_derived]
2073        impl ChannelStatus {
2074            /// The Solidity type name.
2075            pub const NAME: &'static str = stringify!(@ name);
2076            /// Convert from the underlying value type.
2077            #[inline]
2078            pub const fn from_underlying(value: u8) -> Self {
2079                Self(value)
2080            }
2081            /// Return the underlying value.
2082            #[inline]
2083            pub const fn into_underlying(self) -> u8 {
2084                self.0
2085            }
2086            /// Return the single encoding of this value, delegating to the
2087            /// underlying type.
2088            #[inline]
2089            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
2090                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
2091            }
2092            /// Return the packed encoding of this value, delegating to the
2093            /// underlying type.
2094            #[inline]
2095            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
2096                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
2097            }
2098        }
2099        #[automatically_derived]
2100        impl From<u8> for ChannelStatus {
2101            fn from(value: u8) -> Self {
2102                Self::from_underlying(value)
2103            }
2104        }
2105        #[automatically_derived]
2106        impl From<ChannelStatus> for u8 {
2107            fn from(value: ChannelStatus) -> Self {
2108                value.into_underlying()
2109            }
2110        }
2111        #[automatically_derived]
2112        impl alloy_sol_types::SolType for ChannelStatus {
2113            type RustType = u8;
2114            type Token<'a> = <alloy::sol_types::sol_data::Uint<
2115                8,
2116            > as alloy_sol_types::SolType>::Token<'a>;
2117            const SOL_NAME: &'static str = Self::NAME;
2118            const ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
2119                8,
2120            > as alloy_sol_types::SolType>::ENCODED_SIZE;
2121            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
2122                8,
2123            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
2124            #[inline]
2125            fn valid_token(token: &Self::Token<'_>) -> bool {
2126                Self::type_check(token).is_ok()
2127            }
2128            #[inline]
2129            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
2130                <alloy::sol_types::sol_data::Uint<
2131                    8,
2132                > as alloy_sol_types::SolType>::type_check(token)
2133            }
2134            #[inline]
2135            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
2136                <alloy::sol_types::sol_data::Uint<
2137                    8,
2138                > as alloy_sol_types::SolType>::detokenize(token)
2139            }
2140        }
2141        #[automatically_derived]
2142        impl alloy_sol_types::EventTopic for ChannelStatus {
2143            #[inline]
2144            fn topic_preimage_length(rust: &Self::RustType) -> usize {
2145                <alloy::sol_types::sol_data::Uint<
2146                    8,
2147                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
2148            }
2149            #[inline]
2150            fn encode_topic_preimage(
2151                rust: &Self::RustType,
2152                out: &mut alloy_sol_types::private::Vec<u8>,
2153            ) {
2154                <alloy::sol_types::sol_data::Uint<
2155                    8,
2156                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
2157            }
2158            #[inline]
2159            fn encode_topic(
2160                rust: &Self::RustType,
2161            ) -> alloy_sol_types::abi::token::WordToken {
2162                <alloy::sol_types::sol_data::Uint<
2163                    8,
2164                > as alloy_sol_types::EventTopic>::encode_topic(rust)
2165            }
2166        }
2167    };
2168    #[derive(serde::Serialize, serde::Deserialize)]
2169    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2170    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2171    #[derive(Clone)]
2172    pub struct Balance(alloy::sol_types::private::primitives::aliases::U96);
2173    const _: () = {
2174        use alloy::sol_types as alloy_sol_types;
2175        #[automatically_derived]
2176        impl alloy_sol_types::private::SolTypeValue<Balance>
2177        for alloy::sol_types::private::primitives::aliases::U96 {
2178            #[inline]
2179            fn stv_to_tokens(
2180                &self,
2181            ) -> <alloy::sol_types::sol_data::Uint<
2182                96,
2183            > as alloy_sol_types::SolType>::Token<'_> {
2184                alloy_sol_types::private::SolTypeValue::<
2185                    alloy::sol_types::sol_data::Uint<96>,
2186                >::stv_to_tokens(self)
2187            }
2188            #[inline]
2189            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
2190                <alloy::sol_types::sol_data::Uint<
2191                    96,
2192                > as alloy_sol_types::SolType>::tokenize(self)
2193                    .0
2194            }
2195            #[inline]
2196            fn stv_abi_encode_packed_to(
2197                &self,
2198                out: &mut alloy_sol_types::private::Vec<u8>,
2199            ) {
2200                <alloy::sol_types::sol_data::Uint<
2201                    96,
2202                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
2203            }
2204            #[inline]
2205            fn stv_abi_packed_encoded_size(&self) -> usize {
2206                <alloy::sol_types::sol_data::Uint<
2207                    96,
2208                > as alloy_sol_types::SolType>::abi_encoded_size(self)
2209            }
2210        }
2211        #[automatically_derived]
2212        impl Balance {
2213            /// The Solidity type name.
2214            pub const NAME: &'static str = stringify!(@ name);
2215            /// Convert from the underlying value type.
2216            #[inline]
2217            pub const fn from_underlying(
2218                value: alloy::sol_types::private::primitives::aliases::U96,
2219            ) -> Self {
2220                Self(value)
2221            }
2222            /// Return the underlying value.
2223            #[inline]
2224            pub const fn into_underlying(
2225                self,
2226            ) -> alloy::sol_types::private::primitives::aliases::U96 {
2227                self.0
2228            }
2229            /// Return the single encoding of this value, delegating to the
2230            /// underlying type.
2231            #[inline]
2232            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
2233                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
2234            }
2235            /// Return the packed encoding of this value, delegating to the
2236            /// underlying type.
2237            #[inline]
2238            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
2239                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
2240            }
2241        }
2242        #[automatically_derived]
2243        impl From<alloy::sol_types::private::primitives::aliases::U96> for Balance {
2244            fn from(value: alloy::sol_types::private::primitives::aliases::U96) -> Self {
2245                Self::from_underlying(value)
2246            }
2247        }
2248        #[automatically_derived]
2249        impl From<Balance> for alloy::sol_types::private::primitives::aliases::U96 {
2250            fn from(value: Balance) -> Self {
2251                value.into_underlying()
2252            }
2253        }
2254        #[automatically_derived]
2255        impl alloy_sol_types::SolType for Balance {
2256            type RustType = alloy::sol_types::private::primitives::aliases::U96;
2257            type Token<'a> = <alloy::sol_types::sol_data::Uint<
2258                96,
2259            > as alloy_sol_types::SolType>::Token<'a>;
2260            const SOL_NAME: &'static str = Self::NAME;
2261            const ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
2262                96,
2263            > as alloy_sol_types::SolType>::ENCODED_SIZE;
2264            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
2265                96,
2266            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
2267            #[inline]
2268            fn valid_token(token: &Self::Token<'_>) -> bool {
2269                Self::type_check(token).is_ok()
2270            }
2271            #[inline]
2272            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
2273                <alloy::sol_types::sol_data::Uint<
2274                    96,
2275                > as alloy_sol_types::SolType>::type_check(token)
2276            }
2277            #[inline]
2278            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
2279                <alloy::sol_types::sol_data::Uint<
2280                    96,
2281                > as alloy_sol_types::SolType>::detokenize(token)
2282            }
2283        }
2284        #[automatically_derived]
2285        impl alloy_sol_types::EventTopic for Balance {
2286            #[inline]
2287            fn topic_preimage_length(rust: &Self::RustType) -> usize {
2288                <alloy::sol_types::sol_data::Uint<
2289                    96,
2290                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
2291            }
2292            #[inline]
2293            fn encode_topic_preimage(
2294                rust: &Self::RustType,
2295                out: &mut alloy_sol_types::private::Vec<u8>,
2296            ) {
2297                <alloy::sol_types::sol_data::Uint<
2298                    96,
2299                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
2300            }
2301            #[inline]
2302            fn encode_topic(
2303                rust: &Self::RustType,
2304            ) -> alloy_sol_types::abi::token::WordToken {
2305                <alloy::sol_types::sol_data::Uint<
2306                    96,
2307                > as alloy_sol_types::EventTopic>::encode_topic(rust)
2308            }
2309        }
2310    };
2311    #[derive(serde::Serialize, serde::Deserialize)]
2312    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2313    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2314    #[derive(Clone)]
2315    pub struct ChannelEpoch(alloy::sol_types::private::primitives::aliases::U24);
2316    const _: () = {
2317        use alloy::sol_types as alloy_sol_types;
2318        #[automatically_derived]
2319        impl alloy_sol_types::private::SolTypeValue<ChannelEpoch>
2320        for alloy::sol_types::private::primitives::aliases::U24 {
2321            #[inline]
2322            fn stv_to_tokens(
2323                &self,
2324            ) -> <alloy::sol_types::sol_data::Uint<
2325                24,
2326            > as alloy_sol_types::SolType>::Token<'_> {
2327                alloy_sol_types::private::SolTypeValue::<
2328                    alloy::sol_types::sol_data::Uint<24>,
2329                >::stv_to_tokens(self)
2330            }
2331            #[inline]
2332            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
2333                <alloy::sol_types::sol_data::Uint<
2334                    24,
2335                > as alloy_sol_types::SolType>::tokenize(self)
2336                    .0
2337            }
2338            #[inline]
2339            fn stv_abi_encode_packed_to(
2340                &self,
2341                out: &mut alloy_sol_types::private::Vec<u8>,
2342            ) {
2343                <alloy::sol_types::sol_data::Uint<
2344                    24,
2345                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
2346            }
2347            #[inline]
2348            fn stv_abi_packed_encoded_size(&self) -> usize {
2349                <alloy::sol_types::sol_data::Uint<
2350                    24,
2351                > as alloy_sol_types::SolType>::abi_encoded_size(self)
2352            }
2353        }
2354        #[automatically_derived]
2355        impl ChannelEpoch {
2356            /// The Solidity type name.
2357            pub const NAME: &'static str = stringify!(@ name);
2358            /// Convert from the underlying value type.
2359            #[inline]
2360            pub const fn from_underlying(
2361                value: alloy::sol_types::private::primitives::aliases::U24,
2362            ) -> Self {
2363                Self(value)
2364            }
2365            /// Return the underlying value.
2366            #[inline]
2367            pub const fn into_underlying(
2368                self,
2369            ) -> alloy::sol_types::private::primitives::aliases::U24 {
2370                self.0
2371            }
2372            /// Return the single encoding of this value, delegating to the
2373            /// underlying type.
2374            #[inline]
2375            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
2376                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
2377            }
2378            /// Return the packed encoding of this value, delegating to the
2379            /// underlying type.
2380            #[inline]
2381            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
2382                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
2383            }
2384        }
2385        #[automatically_derived]
2386        impl From<alloy::sol_types::private::primitives::aliases::U24> for ChannelEpoch {
2387            fn from(value: alloy::sol_types::private::primitives::aliases::U24) -> Self {
2388                Self::from_underlying(value)
2389            }
2390        }
2391        #[automatically_derived]
2392        impl From<ChannelEpoch> for alloy::sol_types::private::primitives::aliases::U24 {
2393            fn from(value: ChannelEpoch) -> Self {
2394                value.into_underlying()
2395            }
2396        }
2397        #[automatically_derived]
2398        impl alloy_sol_types::SolType for ChannelEpoch {
2399            type RustType = alloy::sol_types::private::primitives::aliases::U24;
2400            type Token<'a> = <alloy::sol_types::sol_data::Uint<
2401                24,
2402            > as alloy_sol_types::SolType>::Token<'a>;
2403            const SOL_NAME: &'static str = Self::NAME;
2404            const ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
2405                24,
2406            > as alloy_sol_types::SolType>::ENCODED_SIZE;
2407            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
2408                24,
2409            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
2410            #[inline]
2411            fn valid_token(token: &Self::Token<'_>) -> bool {
2412                Self::type_check(token).is_ok()
2413            }
2414            #[inline]
2415            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
2416                <alloy::sol_types::sol_data::Uint<
2417                    24,
2418                > as alloy_sol_types::SolType>::type_check(token)
2419            }
2420            #[inline]
2421            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
2422                <alloy::sol_types::sol_data::Uint<
2423                    24,
2424                > as alloy_sol_types::SolType>::detokenize(token)
2425            }
2426        }
2427        #[automatically_derived]
2428        impl alloy_sol_types::EventTopic for ChannelEpoch {
2429            #[inline]
2430            fn topic_preimage_length(rust: &Self::RustType) -> usize {
2431                <alloy::sol_types::sol_data::Uint<
2432                    24,
2433                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
2434            }
2435            #[inline]
2436            fn encode_topic_preimage(
2437                rust: &Self::RustType,
2438                out: &mut alloy_sol_types::private::Vec<u8>,
2439            ) {
2440                <alloy::sol_types::sol_data::Uint<
2441                    24,
2442                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
2443            }
2444            #[inline]
2445            fn encode_topic(
2446                rust: &Self::RustType,
2447            ) -> alloy_sol_types::abi::token::WordToken {
2448                <alloy::sol_types::sol_data::Uint<
2449                    24,
2450                > as alloy_sol_types::EventTopic>::encode_topic(rust)
2451            }
2452        }
2453    };
2454    #[derive(serde::Serialize, serde::Deserialize)]
2455    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2456    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2457    #[derive(Clone)]
2458    pub struct TicketIndex(alloy::sol_types::private::primitives::aliases::U48);
2459    const _: () = {
2460        use alloy::sol_types as alloy_sol_types;
2461        #[automatically_derived]
2462        impl alloy_sol_types::private::SolTypeValue<TicketIndex>
2463        for alloy::sol_types::private::primitives::aliases::U48 {
2464            #[inline]
2465            fn stv_to_tokens(
2466                &self,
2467            ) -> <alloy::sol_types::sol_data::Uint<
2468                48,
2469            > as alloy_sol_types::SolType>::Token<'_> {
2470                alloy_sol_types::private::SolTypeValue::<
2471                    alloy::sol_types::sol_data::Uint<48>,
2472                >::stv_to_tokens(self)
2473            }
2474            #[inline]
2475            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
2476                <alloy::sol_types::sol_data::Uint<
2477                    48,
2478                > as alloy_sol_types::SolType>::tokenize(self)
2479                    .0
2480            }
2481            #[inline]
2482            fn stv_abi_encode_packed_to(
2483                &self,
2484                out: &mut alloy_sol_types::private::Vec<u8>,
2485            ) {
2486                <alloy::sol_types::sol_data::Uint<
2487                    48,
2488                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
2489            }
2490            #[inline]
2491            fn stv_abi_packed_encoded_size(&self) -> usize {
2492                <alloy::sol_types::sol_data::Uint<
2493                    48,
2494                > as alloy_sol_types::SolType>::abi_encoded_size(self)
2495            }
2496        }
2497        #[automatically_derived]
2498        impl TicketIndex {
2499            /// The Solidity type name.
2500            pub const NAME: &'static str = stringify!(@ name);
2501            /// Convert from the underlying value type.
2502            #[inline]
2503            pub const fn from_underlying(
2504                value: alloy::sol_types::private::primitives::aliases::U48,
2505            ) -> Self {
2506                Self(value)
2507            }
2508            /// Return the underlying value.
2509            #[inline]
2510            pub const fn into_underlying(
2511                self,
2512            ) -> alloy::sol_types::private::primitives::aliases::U48 {
2513                self.0
2514            }
2515            /// Return the single encoding of this value, delegating to the
2516            /// underlying type.
2517            #[inline]
2518            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
2519                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
2520            }
2521            /// Return the packed encoding of this value, delegating to the
2522            /// underlying type.
2523            #[inline]
2524            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
2525                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
2526            }
2527        }
2528        #[automatically_derived]
2529        impl From<alloy::sol_types::private::primitives::aliases::U48> for TicketIndex {
2530            fn from(value: alloy::sol_types::private::primitives::aliases::U48) -> Self {
2531                Self::from_underlying(value)
2532            }
2533        }
2534        #[automatically_derived]
2535        impl From<TicketIndex> for alloy::sol_types::private::primitives::aliases::U48 {
2536            fn from(value: TicketIndex) -> Self {
2537                value.into_underlying()
2538            }
2539        }
2540        #[automatically_derived]
2541        impl alloy_sol_types::SolType for TicketIndex {
2542            type RustType = alloy::sol_types::private::primitives::aliases::U48;
2543            type Token<'a> = <alloy::sol_types::sol_data::Uint<
2544                48,
2545            > as alloy_sol_types::SolType>::Token<'a>;
2546            const SOL_NAME: &'static str = Self::NAME;
2547            const ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
2548                48,
2549            > as alloy_sol_types::SolType>::ENCODED_SIZE;
2550            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
2551                48,
2552            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
2553            #[inline]
2554            fn valid_token(token: &Self::Token<'_>) -> bool {
2555                Self::type_check(token).is_ok()
2556            }
2557            #[inline]
2558            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
2559                <alloy::sol_types::sol_data::Uint<
2560                    48,
2561                > as alloy_sol_types::SolType>::type_check(token)
2562            }
2563            #[inline]
2564            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
2565                <alloy::sol_types::sol_data::Uint<
2566                    48,
2567                > as alloy_sol_types::SolType>::detokenize(token)
2568            }
2569        }
2570        #[automatically_derived]
2571        impl alloy_sol_types::EventTopic for TicketIndex {
2572            #[inline]
2573            fn topic_preimage_length(rust: &Self::RustType) -> usize {
2574                <alloy::sol_types::sol_data::Uint<
2575                    48,
2576                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
2577            }
2578            #[inline]
2579            fn encode_topic_preimage(
2580                rust: &Self::RustType,
2581                out: &mut alloy_sol_types::private::Vec<u8>,
2582            ) {
2583                <alloy::sol_types::sol_data::Uint<
2584                    48,
2585                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
2586            }
2587            #[inline]
2588            fn encode_topic(
2589                rust: &Self::RustType,
2590            ) -> alloy_sol_types::abi::token::WordToken {
2591                <alloy::sol_types::sol_data::Uint<
2592                    48,
2593                > as alloy_sol_types::EventTopic>::encode_topic(rust)
2594            }
2595        }
2596    };
2597    #[derive(serde::Serialize, serde::Deserialize)]
2598    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2599    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2600    #[derive(Clone)]
2601    pub struct TicketIndexOffset(u32);
2602    const _: () = {
2603        use alloy::sol_types as alloy_sol_types;
2604        #[automatically_derived]
2605        impl alloy_sol_types::private::SolTypeValue<TicketIndexOffset> for u32 {
2606            #[inline]
2607            fn stv_to_tokens(
2608                &self,
2609            ) -> <alloy::sol_types::sol_data::Uint<
2610                32,
2611            > as alloy_sol_types::SolType>::Token<'_> {
2612                alloy_sol_types::private::SolTypeValue::<
2613                    alloy::sol_types::sol_data::Uint<32>,
2614                >::stv_to_tokens(self)
2615            }
2616            #[inline]
2617            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
2618                <alloy::sol_types::sol_data::Uint<
2619                    32,
2620                > as alloy_sol_types::SolType>::tokenize(self)
2621                    .0
2622            }
2623            #[inline]
2624            fn stv_abi_encode_packed_to(
2625                &self,
2626                out: &mut alloy_sol_types::private::Vec<u8>,
2627            ) {
2628                <alloy::sol_types::sol_data::Uint<
2629                    32,
2630                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
2631            }
2632            #[inline]
2633            fn stv_abi_packed_encoded_size(&self) -> usize {
2634                <alloy::sol_types::sol_data::Uint<
2635                    32,
2636                > as alloy_sol_types::SolType>::abi_encoded_size(self)
2637            }
2638        }
2639        #[automatically_derived]
2640        impl TicketIndexOffset {
2641            /// The Solidity type name.
2642            pub const NAME: &'static str = stringify!(@ name);
2643            /// Convert from the underlying value type.
2644            #[inline]
2645            pub const fn from_underlying(value: u32) -> Self {
2646                Self(value)
2647            }
2648            /// Return the underlying value.
2649            #[inline]
2650            pub const fn into_underlying(self) -> u32 {
2651                self.0
2652            }
2653            /// Return the single encoding of this value, delegating to the
2654            /// underlying type.
2655            #[inline]
2656            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
2657                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
2658            }
2659            /// Return the packed encoding of this value, delegating to the
2660            /// underlying type.
2661            #[inline]
2662            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
2663                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
2664            }
2665        }
2666        #[automatically_derived]
2667        impl From<u32> for TicketIndexOffset {
2668            fn from(value: u32) -> Self {
2669                Self::from_underlying(value)
2670            }
2671        }
2672        #[automatically_derived]
2673        impl From<TicketIndexOffset> for u32 {
2674            fn from(value: TicketIndexOffset) -> Self {
2675                value.into_underlying()
2676            }
2677        }
2678        #[automatically_derived]
2679        impl alloy_sol_types::SolType for TicketIndexOffset {
2680            type RustType = u32;
2681            type Token<'a> = <alloy::sol_types::sol_data::Uint<
2682                32,
2683            > as alloy_sol_types::SolType>::Token<'a>;
2684            const SOL_NAME: &'static str = Self::NAME;
2685            const ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
2686                32,
2687            > as alloy_sol_types::SolType>::ENCODED_SIZE;
2688            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
2689                32,
2690            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
2691            #[inline]
2692            fn valid_token(token: &Self::Token<'_>) -> bool {
2693                Self::type_check(token).is_ok()
2694            }
2695            #[inline]
2696            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
2697                <alloy::sol_types::sol_data::Uint<
2698                    32,
2699                > as alloy_sol_types::SolType>::type_check(token)
2700            }
2701            #[inline]
2702            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
2703                <alloy::sol_types::sol_data::Uint<
2704                    32,
2705                > as alloy_sol_types::SolType>::detokenize(token)
2706            }
2707        }
2708        #[automatically_derived]
2709        impl alloy_sol_types::EventTopic for TicketIndexOffset {
2710            #[inline]
2711            fn topic_preimage_length(rust: &Self::RustType) -> usize {
2712                <alloy::sol_types::sol_data::Uint<
2713                    32,
2714                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
2715            }
2716            #[inline]
2717            fn encode_topic_preimage(
2718                rust: &Self::RustType,
2719                out: &mut alloy_sol_types::private::Vec<u8>,
2720            ) {
2721                <alloy::sol_types::sol_data::Uint<
2722                    32,
2723                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
2724            }
2725            #[inline]
2726            fn encode_topic(
2727                rust: &Self::RustType,
2728            ) -> alloy_sol_types::abi::token::WordToken {
2729                <alloy::sol_types::sol_data::Uint<
2730                    32,
2731                > as alloy_sol_types::EventTopic>::encode_topic(rust)
2732            }
2733        }
2734    };
2735    #[derive(serde::Serialize, serde::Deserialize)]
2736    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2737    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2738    #[derive(Clone)]
2739    pub struct Timestamp(u32);
2740    const _: () = {
2741        use alloy::sol_types as alloy_sol_types;
2742        #[automatically_derived]
2743        impl alloy_sol_types::private::SolTypeValue<Timestamp> for u32 {
2744            #[inline]
2745            fn stv_to_tokens(
2746                &self,
2747            ) -> <alloy::sol_types::sol_data::Uint<
2748                32,
2749            > as alloy_sol_types::SolType>::Token<'_> {
2750                alloy_sol_types::private::SolTypeValue::<
2751                    alloy::sol_types::sol_data::Uint<32>,
2752                >::stv_to_tokens(self)
2753            }
2754            #[inline]
2755            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
2756                <alloy::sol_types::sol_data::Uint<
2757                    32,
2758                > as alloy_sol_types::SolType>::tokenize(self)
2759                    .0
2760            }
2761            #[inline]
2762            fn stv_abi_encode_packed_to(
2763                &self,
2764                out: &mut alloy_sol_types::private::Vec<u8>,
2765            ) {
2766                <alloy::sol_types::sol_data::Uint<
2767                    32,
2768                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
2769            }
2770            #[inline]
2771            fn stv_abi_packed_encoded_size(&self) -> usize {
2772                <alloy::sol_types::sol_data::Uint<
2773                    32,
2774                > as alloy_sol_types::SolType>::abi_encoded_size(self)
2775            }
2776        }
2777        #[automatically_derived]
2778        impl Timestamp {
2779            /// The Solidity type name.
2780            pub const NAME: &'static str = stringify!(@ name);
2781            /// Convert from the underlying value type.
2782            #[inline]
2783            pub const fn from_underlying(value: u32) -> Self {
2784                Self(value)
2785            }
2786            /// Return the underlying value.
2787            #[inline]
2788            pub const fn into_underlying(self) -> u32 {
2789                self.0
2790            }
2791            /// Return the single encoding of this value, delegating to the
2792            /// underlying type.
2793            #[inline]
2794            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
2795                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
2796            }
2797            /// Return the packed encoding of this value, delegating to the
2798            /// underlying type.
2799            #[inline]
2800            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
2801                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
2802            }
2803        }
2804        #[automatically_derived]
2805        impl From<u32> for Timestamp {
2806            fn from(value: u32) -> Self {
2807                Self::from_underlying(value)
2808            }
2809        }
2810        #[automatically_derived]
2811        impl From<Timestamp> for u32 {
2812            fn from(value: Timestamp) -> Self {
2813                value.into_underlying()
2814            }
2815        }
2816        #[automatically_derived]
2817        impl alloy_sol_types::SolType for Timestamp {
2818            type RustType = u32;
2819            type Token<'a> = <alloy::sol_types::sol_data::Uint<
2820                32,
2821            > as alloy_sol_types::SolType>::Token<'a>;
2822            const SOL_NAME: &'static str = Self::NAME;
2823            const ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
2824                32,
2825            > as alloy_sol_types::SolType>::ENCODED_SIZE;
2826            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
2827                32,
2828            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
2829            #[inline]
2830            fn valid_token(token: &Self::Token<'_>) -> bool {
2831                Self::type_check(token).is_ok()
2832            }
2833            #[inline]
2834            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
2835                <alloy::sol_types::sol_data::Uint<
2836                    32,
2837                > as alloy_sol_types::SolType>::type_check(token)
2838            }
2839            #[inline]
2840            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
2841                <alloy::sol_types::sol_data::Uint<
2842                    32,
2843                > as alloy_sol_types::SolType>::detokenize(token)
2844            }
2845        }
2846        #[automatically_derived]
2847        impl alloy_sol_types::EventTopic for Timestamp {
2848            #[inline]
2849            fn topic_preimage_length(rust: &Self::RustType) -> usize {
2850                <alloy::sol_types::sol_data::Uint<
2851                    32,
2852                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
2853            }
2854            #[inline]
2855            fn encode_topic_preimage(
2856                rust: &Self::RustType,
2857                out: &mut alloy_sol_types::private::Vec<u8>,
2858            ) {
2859                <alloy::sol_types::sol_data::Uint<
2860                    32,
2861                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
2862            }
2863            #[inline]
2864            fn encode_topic(
2865                rust: &Self::RustType,
2866            ) -> alloy_sol_types::abi::token::WordToken {
2867                <alloy::sol_types::sol_data::Uint<
2868                    32,
2869                > as alloy_sol_types::EventTopic>::encode_topic(rust)
2870            }
2871        }
2872    };
2873    #[derive(serde::Serialize, serde::Deserialize)]
2874    #[derive(Default, Debug, PartialEq, Eq, Hash)]
2875    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
2876    #[derive(Clone)]
2877    pub struct WinProb(alloy::sol_types::private::primitives::aliases::U56);
2878    const _: () = {
2879        use alloy::sol_types as alloy_sol_types;
2880        #[automatically_derived]
2881        impl alloy_sol_types::private::SolTypeValue<WinProb>
2882        for alloy::sol_types::private::primitives::aliases::U56 {
2883            #[inline]
2884            fn stv_to_tokens(
2885                &self,
2886            ) -> <alloy::sol_types::sol_data::Uint<
2887                56,
2888            > as alloy_sol_types::SolType>::Token<'_> {
2889                alloy_sol_types::private::SolTypeValue::<
2890                    alloy::sol_types::sol_data::Uint<56>,
2891                >::stv_to_tokens(self)
2892            }
2893            #[inline]
2894            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
2895                <alloy::sol_types::sol_data::Uint<
2896                    56,
2897                > as alloy_sol_types::SolType>::tokenize(self)
2898                    .0
2899            }
2900            #[inline]
2901            fn stv_abi_encode_packed_to(
2902                &self,
2903                out: &mut alloy_sol_types::private::Vec<u8>,
2904            ) {
2905                <alloy::sol_types::sol_data::Uint<
2906                    56,
2907                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
2908            }
2909            #[inline]
2910            fn stv_abi_packed_encoded_size(&self) -> usize {
2911                <alloy::sol_types::sol_data::Uint<
2912                    56,
2913                > as alloy_sol_types::SolType>::abi_encoded_size(self)
2914            }
2915        }
2916        #[automatically_derived]
2917        impl WinProb {
2918            /// The Solidity type name.
2919            pub const NAME: &'static str = stringify!(@ name);
2920            /// Convert from the underlying value type.
2921            #[inline]
2922            pub const fn from_underlying(
2923                value: alloy::sol_types::private::primitives::aliases::U56,
2924            ) -> Self {
2925                Self(value)
2926            }
2927            /// Return the underlying value.
2928            #[inline]
2929            pub const fn into_underlying(
2930                self,
2931            ) -> alloy::sol_types::private::primitives::aliases::U56 {
2932                self.0
2933            }
2934            /// Return the single encoding of this value, delegating to the
2935            /// underlying type.
2936            #[inline]
2937            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
2938                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
2939            }
2940            /// Return the packed encoding of this value, delegating to the
2941            /// underlying type.
2942            #[inline]
2943            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
2944                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
2945            }
2946        }
2947        #[automatically_derived]
2948        impl From<alloy::sol_types::private::primitives::aliases::U56> for WinProb {
2949            fn from(value: alloy::sol_types::private::primitives::aliases::U56) -> Self {
2950                Self::from_underlying(value)
2951            }
2952        }
2953        #[automatically_derived]
2954        impl From<WinProb> for alloy::sol_types::private::primitives::aliases::U56 {
2955            fn from(value: WinProb) -> Self {
2956                value.into_underlying()
2957            }
2958        }
2959        #[automatically_derived]
2960        impl alloy_sol_types::SolType for WinProb {
2961            type RustType = alloy::sol_types::private::primitives::aliases::U56;
2962            type Token<'a> = <alloy::sol_types::sol_data::Uint<
2963                56,
2964            > as alloy_sol_types::SolType>::Token<'a>;
2965            const SOL_NAME: &'static str = Self::NAME;
2966            const ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
2967                56,
2968            > as alloy_sol_types::SolType>::ENCODED_SIZE;
2969            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
2970                56,
2971            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
2972            #[inline]
2973            fn valid_token(token: &Self::Token<'_>) -> bool {
2974                Self::type_check(token).is_ok()
2975            }
2976            #[inline]
2977            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
2978                <alloy::sol_types::sol_data::Uint<
2979                    56,
2980                > as alloy_sol_types::SolType>::type_check(token)
2981            }
2982            #[inline]
2983            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
2984                <alloy::sol_types::sol_data::Uint<
2985                    56,
2986                > as alloy_sol_types::SolType>::detokenize(token)
2987            }
2988        }
2989        #[automatically_derived]
2990        impl alloy_sol_types::EventTopic for WinProb {
2991            #[inline]
2992            fn topic_preimage_length(rust: &Self::RustType) -> usize {
2993                <alloy::sol_types::sol_data::Uint<
2994                    56,
2995                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
2996            }
2997            #[inline]
2998            fn encode_topic_preimage(
2999                rust: &Self::RustType,
3000                out: &mut alloy_sol_types::private::Vec<u8>,
3001            ) {
3002                <alloy::sol_types::sol_data::Uint<
3003                    56,
3004                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
3005            }
3006            #[inline]
3007            fn encode_topic(
3008                rust: &Self::RustType,
3009            ) -> alloy_sol_types::abi::token::WordToken {
3010                <alloy::sol_types::sol_data::Uint<
3011                    56,
3012                > as alloy_sol_types::EventTopic>::encode_topic(rust)
3013            }
3014        }
3015    };
3016    #[derive(serde::Serialize, serde::Deserialize)]
3017    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3018    /**```solidity
3019struct RedeemableTicket { TicketData data; HoprCrypto.CompactSignature signature; uint256 porSecret; }
3020```*/
3021    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3022    #[derive(Clone)]
3023    pub struct RedeemableTicket {
3024        #[allow(missing_docs)]
3025        pub data: <TicketData as alloy::sol_types::SolType>::RustType,
3026        #[allow(missing_docs)]
3027        pub signature: <HoprCrypto::CompactSignature as alloy::sol_types::SolType>::RustType,
3028        #[allow(missing_docs)]
3029        pub porSecret: alloy::sol_types::private::primitives::aliases::U256,
3030    }
3031    #[allow(
3032        non_camel_case_types,
3033        non_snake_case,
3034        clippy::pub_underscore_fields,
3035        clippy::style
3036    )]
3037    const _: () = {
3038        use alloy::sol_types as alloy_sol_types;
3039        #[doc(hidden)]
3040        type UnderlyingSolTuple<'a> = (
3041            TicketData,
3042            HoprCrypto::CompactSignature,
3043            alloy::sol_types::sol_data::Uint<256>,
3044        );
3045        #[doc(hidden)]
3046        type UnderlyingRustTuple<'a> = (
3047            <TicketData as alloy::sol_types::SolType>::RustType,
3048            <HoprCrypto::CompactSignature as alloy::sol_types::SolType>::RustType,
3049            alloy::sol_types::private::primitives::aliases::U256,
3050        );
3051        #[cfg(test)]
3052        #[allow(dead_code, unreachable_patterns)]
3053        fn _type_assertion(
3054            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3055        ) {
3056            match _t {
3057                alloy_sol_types::private::AssertTypeEq::<
3058                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3059                >(_) => {}
3060            }
3061        }
3062        #[automatically_derived]
3063        #[doc(hidden)]
3064        impl ::core::convert::From<RedeemableTicket> for UnderlyingRustTuple<'_> {
3065            fn from(value: RedeemableTicket) -> Self {
3066                (value.data, value.signature, value.porSecret)
3067            }
3068        }
3069        #[automatically_derived]
3070        #[doc(hidden)]
3071        impl ::core::convert::From<UnderlyingRustTuple<'_>> for RedeemableTicket {
3072            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3073                Self {
3074                    data: tuple.0,
3075                    signature: tuple.1,
3076                    porSecret: tuple.2,
3077                }
3078            }
3079        }
3080        #[automatically_derived]
3081        impl alloy_sol_types::SolValue for RedeemableTicket {
3082            type SolType = Self;
3083        }
3084        #[automatically_derived]
3085        impl alloy_sol_types::private::SolTypeValue<Self> for RedeemableTicket {
3086            #[inline]
3087            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
3088                (
3089                    <TicketData as alloy_sol_types::SolType>::tokenize(&self.data),
3090                    <HoprCrypto::CompactSignature as alloy_sol_types::SolType>::tokenize(
3091                        &self.signature,
3092                    ),
3093                    <alloy::sol_types::sol_data::Uint<
3094                        256,
3095                    > as alloy_sol_types::SolType>::tokenize(&self.porSecret),
3096                )
3097            }
3098            #[inline]
3099            fn stv_abi_encoded_size(&self) -> usize {
3100                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
3101                    return size;
3102                }
3103                let tuple = <UnderlyingRustTuple<
3104                    '_,
3105                > as ::core::convert::From<Self>>::from(self.clone());
3106                <UnderlyingSolTuple<
3107                    '_,
3108                > as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
3109            }
3110            #[inline]
3111            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
3112                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
3113            }
3114            #[inline]
3115            fn stv_abi_encode_packed_to(
3116                &self,
3117                out: &mut alloy_sol_types::private::Vec<u8>,
3118            ) {
3119                let tuple = <UnderlyingRustTuple<
3120                    '_,
3121                > as ::core::convert::From<Self>>::from(self.clone());
3122                <UnderlyingSolTuple<
3123                    '_,
3124                > as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out)
3125            }
3126            #[inline]
3127            fn stv_abi_packed_encoded_size(&self) -> usize {
3128                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
3129                    return size;
3130                }
3131                let tuple = <UnderlyingRustTuple<
3132                    '_,
3133                > as ::core::convert::From<Self>>::from(self.clone());
3134                <UnderlyingSolTuple<
3135                    '_,
3136                > as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple)
3137            }
3138        }
3139        #[automatically_derived]
3140        impl alloy_sol_types::SolType for RedeemableTicket {
3141            type RustType = Self;
3142            type Token<'a> = <UnderlyingSolTuple<
3143                'a,
3144            > as alloy_sol_types::SolType>::Token<'a>;
3145            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
3146            const ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
3147                '_,
3148            > as alloy_sol_types::SolType>::ENCODED_SIZE;
3149            const PACKED_ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
3150                '_,
3151            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
3152            #[inline]
3153            fn valid_token(token: &Self::Token<'_>) -> bool {
3154                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
3155            }
3156            #[inline]
3157            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
3158                let tuple = <UnderlyingSolTuple<
3159                    '_,
3160                > as alloy_sol_types::SolType>::detokenize(token);
3161                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
3162            }
3163        }
3164        #[automatically_derived]
3165        impl alloy_sol_types::SolStruct for RedeemableTicket {
3166            const NAME: &'static str = "RedeemableTicket";
3167            #[inline]
3168            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
3169                alloy_sol_types::private::Cow::Borrowed(
3170                    "RedeemableTicket(TicketData data,HoprCrypto.CompactSignature signature,uint256 porSecret)",
3171                )
3172            }
3173            #[inline]
3174            fn eip712_components() -> alloy_sol_types::private::Vec<
3175                alloy_sol_types::private::Cow<'static, str>,
3176            > {
3177                let mut components = alloy_sol_types::private::Vec::with_capacity(2);
3178                components
3179                    .push(
3180                        <TicketData as alloy_sol_types::SolStruct>::eip712_root_type(),
3181                    );
3182                components
3183                    .extend(
3184                        <TicketData as alloy_sol_types::SolStruct>::eip712_components(),
3185                    );
3186                components
3187                    .push(
3188                        <HoprCrypto::CompactSignature as alloy_sol_types::SolStruct>::eip712_root_type(),
3189                    );
3190                components
3191                    .extend(
3192                        <HoprCrypto::CompactSignature as alloy_sol_types::SolStruct>::eip712_components(),
3193                    );
3194                components
3195            }
3196            #[inline]
3197            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
3198                [
3199                    <TicketData as alloy_sol_types::SolType>::eip712_data_word(
3200                            &self.data,
3201                        )
3202                        .0,
3203                    <HoprCrypto::CompactSignature as alloy_sol_types::SolType>::eip712_data_word(
3204                            &self.signature,
3205                        )
3206                        .0,
3207                    <alloy::sol_types::sol_data::Uint<
3208                        256,
3209                    > as alloy_sol_types::SolType>::eip712_data_word(&self.porSecret)
3210                        .0,
3211                ]
3212                    .concat()
3213            }
3214        }
3215        #[automatically_derived]
3216        impl alloy_sol_types::EventTopic for RedeemableTicket {
3217            #[inline]
3218            fn topic_preimage_length(rust: &Self::RustType) -> usize {
3219                0usize
3220                    + <TicketData as alloy_sol_types::EventTopic>::topic_preimage_length(
3221                        &rust.data,
3222                    )
3223                    + <HoprCrypto::CompactSignature as alloy_sol_types::EventTopic>::topic_preimage_length(
3224                        &rust.signature,
3225                    )
3226                    + <alloy::sol_types::sol_data::Uint<
3227                        256,
3228                    > as alloy_sol_types::EventTopic>::topic_preimage_length(
3229                        &rust.porSecret,
3230                    )
3231            }
3232            #[inline]
3233            fn encode_topic_preimage(
3234                rust: &Self::RustType,
3235                out: &mut alloy_sol_types::private::Vec<u8>,
3236            ) {
3237                out.reserve(
3238                    <Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust),
3239                );
3240                <TicketData as alloy_sol_types::EventTopic>::encode_topic_preimage(
3241                    &rust.data,
3242                    out,
3243                );
3244                <HoprCrypto::CompactSignature as alloy_sol_types::EventTopic>::encode_topic_preimage(
3245                    &rust.signature,
3246                    out,
3247                );
3248                <alloy::sol_types::sol_data::Uint<
3249                    256,
3250                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
3251                    &rust.porSecret,
3252                    out,
3253                );
3254            }
3255            #[inline]
3256            fn encode_topic(
3257                rust: &Self::RustType,
3258            ) -> alloy_sol_types::abi::token::WordToken {
3259                let mut out = alloy_sol_types::private::Vec::new();
3260                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(
3261                    rust,
3262                    &mut out,
3263                );
3264                alloy_sol_types::abi::token::WordToken(
3265                    alloy_sol_types::private::keccak256(out),
3266                )
3267            }
3268        }
3269    };
3270    #[derive(serde::Serialize, serde::Deserialize)]
3271    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3272    /**```solidity
3273struct TicketData { bytes32 channelId; Balance amount; TicketIndex ticketIndex; TicketIndexOffset indexOffset; ChannelEpoch epoch; WinProb winProb; }
3274```*/
3275    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3276    #[derive(Clone)]
3277    pub struct TicketData {
3278        #[allow(missing_docs)]
3279        pub channelId: alloy::sol_types::private::FixedBytes<32>,
3280        #[allow(missing_docs)]
3281        pub amount: <Balance as alloy::sol_types::SolType>::RustType,
3282        #[allow(missing_docs)]
3283        pub ticketIndex: <TicketIndex as alloy::sol_types::SolType>::RustType,
3284        #[allow(missing_docs)]
3285        pub indexOffset: <TicketIndexOffset as alloy::sol_types::SolType>::RustType,
3286        #[allow(missing_docs)]
3287        pub epoch: <ChannelEpoch as alloy::sol_types::SolType>::RustType,
3288        #[allow(missing_docs)]
3289        pub winProb: <WinProb as alloy::sol_types::SolType>::RustType,
3290    }
3291    #[allow(
3292        non_camel_case_types,
3293        non_snake_case,
3294        clippy::pub_underscore_fields,
3295        clippy::style
3296    )]
3297    const _: () = {
3298        use alloy::sol_types as alloy_sol_types;
3299        #[doc(hidden)]
3300        type UnderlyingSolTuple<'a> = (
3301            alloy::sol_types::sol_data::FixedBytes<32>,
3302            Balance,
3303            TicketIndex,
3304            TicketIndexOffset,
3305            ChannelEpoch,
3306            WinProb,
3307        );
3308        #[doc(hidden)]
3309        type UnderlyingRustTuple<'a> = (
3310            alloy::sol_types::private::FixedBytes<32>,
3311            <Balance as alloy::sol_types::SolType>::RustType,
3312            <TicketIndex as alloy::sol_types::SolType>::RustType,
3313            <TicketIndexOffset as alloy::sol_types::SolType>::RustType,
3314            <ChannelEpoch as alloy::sol_types::SolType>::RustType,
3315            <WinProb as alloy::sol_types::SolType>::RustType,
3316        );
3317        #[cfg(test)]
3318        #[allow(dead_code, unreachable_patterns)]
3319        fn _type_assertion(
3320            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3321        ) {
3322            match _t {
3323                alloy_sol_types::private::AssertTypeEq::<
3324                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3325                >(_) => {}
3326            }
3327        }
3328        #[automatically_derived]
3329        #[doc(hidden)]
3330        impl ::core::convert::From<TicketData> for UnderlyingRustTuple<'_> {
3331            fn from(value: TicketData) -> Self {
3332                (
3333                    value.channelId,
3334                    value.amount,
3335                    value.ticketIndex,
3336                    value.indexOffset,
3337                    value.epoch,
3338                    value.winProb,
3339                )
3340            }
3341        }
3342        #[automatically_derived]
3343        #[doc(hidden)]
3344        impl ::core::convert::From<UnderlyingRustTuple<'_>> for TicketData {
3345            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3346                Self {
3347                    channelId: tuple.0,
3348                    amount: tuple.1,
3349                    ticketIndex: tuple.2,
3350                    indexOffset: tuple.3,
3351                    epoch: tuple.4,
3352                    winProb: tuple.5,
3353                }
3354            }
3355        }
3356        #[automatically_derived]
3357        impl alloy_sol_types::SolValue for TicketData {
3358            type SolType = Self;
3359        }
3360        #[automatically_derived]
3361        impl alloy_sol_types::private::SolTypeValue<Self> for TicketData {
3362            #[inline]
3363            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
3364                (
3365                    <alloy::sol_types::sol_data::FixedBytes<
3366                        32,
3367                    > as alloy_sol_types::SolType>::tokenize(&self.channelId),
3368                    <Balance as alloy_sol_types::SolType>::tokenize(&self.amount),
3369                    <TicketIndex as alloy_sol_types::SolType>::tokenize(
3370                        &self.ticketIndex,
3371                    ),
3372                    <TicketIndexOffset as alloy_sol_types::SolType>::tokenize(
3373                        &self.indexOffset,
3374                    ),
3375                    <ChannelEpoch as alloy_sol_types::SolType>::tokenize(&self.epoch),
3376                    <WinProb as alloy_sol_types::SolType>::tokenize(&self.winProb),
3377                )
3378            }
3379            #[inline]
3380            fn stv_abi_encoded_size(&self) -> usize {
3381                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
3382                    return size;
3383                }
3384                let tuple = <UnderlyingRustTuple<
3385                    '_,
3386                > as ::core::convert::From<Self>>::from(self.clone());
3387                <UnderlyingSolTuple<
3388                    '_,
3389                > as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
3390            }
3391            #[inline]
3392            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
3393                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
3394            }
3395            #[inline]
3396            fn stv_abi_encode_packed_to(
3397                &self,
3398                out: &mut alloy_sol_types::private::Vec<u8>,
3399            ) {
3400                let tuple = <UnderlyingRustTuple<
3401                    '_,
3402                > as ::core::convert::From<Self>>::from(self.clone());
3403                <UnderlyingSolTuple<
3404                    '_,
3405                > as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out)
3406            }
3407            #[inline]
3408            fn stv_abi_packed_encoded_size(&self) -> usize {
3409                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
3410                    return size;
3411                }
3412                let tuple = <UnderlyingRustTuple<
3413                    '_,
3414                > as ::core::convert::From<Self>>::from(self.clone());
3415                <UnderlyingSolTuple<
3416                    '_,
3417                > as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple)
3418            }
3419        }
3420        #[automatically_derived]
3421        impl alloy_sol_types::SolType for TicketData {
3422            type RustType = Self;
3423            type Token<'a> = <UnderlyingSolTuple<
3424                'a,
3425            > as alloy_sol_types::SolType>::Token<'a>;
3426            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
3427            const ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
3428                '_,
3429            > as alloy_sol_types::SolType>::ENCODED_SIZE;
3430            const PACKED_ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
3431                '_,
3432            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
3433            #[inline]
3434            fn valid_token(token: &Self::Token<'_>) -> bool {
3435                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
3436            }
3437            #[inline]
3438            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
3439                let tuple = <UnderlyingSolTuple<
3440                    '_,
3441                > as alloy_sol_types::SolType>::detokenize(token);
3442                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
3443            }
3444        }
3445        #[automatically_derived]
3446        impl alloy_sol_types::SolStruct for TicketData {
3447            const NAME: &'static str = "TicketData";
3448            #[inline]
3449            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
3450                alloy_sol_types::private::Cow::Borrowed(
3451                    "TicketData(bytes32 channelId,uint96 amount,uint48 ticketIndex,uint32 indexOffset,uint24 epoch,uint56 winProb)",
3452                )
3453            }
3454            #[inline]
3455            fn eip712_components() -> alloy_sol_types::private::Vec<
3456                alloy_sol_types::private::Cow<'static, str>,
3457            > {
3458                alloy_sol_types::private::Vec::new()
3459            }
3460            #[inline]
3461            fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> {
3462                <Self as alloy_sol_types::SolStruct>::eip712_root_type()
3463            }
3464            #[inline]
3465            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
3466                [
3467                    <alloy::sol_types::sol_data::FixedBytes<
3468                        32,
3469                    > as alloy_sol_types::SolType>::eip712_data_word(&self.channelId)
3470                        .0,
3471                    <Balance as alloy_sol_types::SolType>::eip712_data_word(&self.amount)
3472                        .0,
3473                    <TicketIndex as alloy_sol_types::SolType>::eip712_data_word(
3474                            &self.ticketIndex,
3475                        )
3476                        .0,
3477                    <TicketIndexOffset as alloy_sol_types::SolType>::eip712_data_word(
3478                            &self.indexOffset,
3479                        )
3480                        .0,
3481                    <ChannelEpoch as alloy_sol_types::SolType>::eip712_data_word(
3482                            &self.epoch,
3483                        )
3484                        .0,
3485                    <WinProb as alloy_sol_types::SolType>::eip712_data_word(
3486                            &self.winProb,
3487                        )
3488                        .0,
3489                ]
3490                    .concat()
3491            }
3492        }
3493        #[automatically_derived]
3494        impl alloy_sol_types::EventTopic for TicketData {
3495            #[inline]
3496            fn topic_preimage_length(rust: &Self::RustType) -> usize {
3497                0usize
3498                    + <alloy::sol_types::sol_data::FixedBytes<
3499                        32,
3500                    > as alloy_sol_types::EventTopic>::topic_preimage_length(
3501                        &rust.channelId,
3502                    )
3503                    + <Balance as alloy_sol_types::EventTopic>::topic_preimage_length(
3504                        &rust.amount,
3505                    )
3506                    + <TicketIndex as alloy_sol_types::EventTopic>::topic_preimage_length(
3507                        &rust.ticketIndex,
3508                    )
3509                    + <TicketIndexOffset as alloy_sol_types::EventTopic>::topic_preimage_length(
3510                        &rust.indexOffset,
3511                    )
3512                    + <ChannelEpoch as alloy_sol_types::EventTopic>::topic_preimage_length(
3513                        &rust.epoch,
3514                    )
3515                    + <WinProb as alloy_sol_types::EventTopic>::topic_preimage_length(
3516                        &rust.winProb,
3517                    )
3518            }
3519            #[inline]
3520            fn encode_topic_preimage(
3521                rust: &Self::RustType,
3522                out: &mut alloy_sol_types::private::Vec<u8>,
3523            ) {
3524                out.reserve(
3525                    <Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust),
3526                );
3527                <alloy::sol_types::sol_data::FixedBytes<
3528                    32,
3529                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
3530                    &rust.channelId,
3531                    out,
3532                );
3533                <Balance as alloy_sol_types::EventTopic>::encode_topic_preimage(
3534                    &rust.amount,
3535                    out,
3536                );
3537                <TicketIndex as alloy_sol_types::EventTopic>::encode_topic_preimage(
3538                    &rust.ticketIndex,
3539                    out,
3540                );
3541                <TicketIndexOffset as alloy_sol_types::EventTopic>::encode_topic_preimage(
3542                    &rust.indexOffset,
3543                    out,
3544                );
3545                <ChannelEpoch as alloy_sol_types::EventTopic>::encode_topic_preimage(
3546                    &rust.epoch,
3547                    out,
3548                );
3549                <WinProb as alloy_sol_types::EventTopic>::encode_topic_preimage(
3550                    &rust.winProb,
3551                    out,
3552                );
3553            }
3554            #[inline]
3555            fn encode_topic(
3556                rust: &Self::RustType,
3557            ) -> alloy_sol_types::abi::token::WordToken {
3558                let mut out = alloy_sol_types::private::Vec::new();
3559                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(
3560                    rust,
3561                    &mut out,
3562                );
3563                alloy_sol_types::abi::token::WordToken(
3564                    alloy_sol_types::private::keccak256(out),
3565                )
3566            }
3567        }
3568    };
3569    #[derive(serde::Serialize, serde::Deserialize)]
3570    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3571    /**Custom error with signature `AlreadyInitialized()` and selector `0x0dc149f0`.
3572```solidity
3573error AlreadyInitialized();
3574```*/
3575    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3576    #[derive(Clone)]
3577    pub struct AlreadyInitialized;
3578    #[allow(
3579        non_camel_case_types,
3580        non_snake_case,
3581        clippy::pub_underscore_fields,
3582        clippy::style
3583    )]
3584    const _: () = {
3585        use alloy::sol_types as alloy_sol_types;
3586        #[doc(hidden)]
3587        type UnderlyingSolTuple<'a> = ();
3588        #[doc(hidden)]
3589        type UnderlyingRustTuple<'a> = ();
3590        #[cfg(test)]
3591        #[allow(dead_code, unreachable_patterns)]
3592        fn _type_assertion(
3593            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3594        ) {
3595            match _t {
3596                alloy_sol_types::private::AssertTypeEq::<
3597                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3598                >(_) => {}
3599            }
3600        }
3601        #[automatically_derived]
3602        #[doc(hidden)]
3603        impl ::core::convert::From<AlreadyInitialized> for UnderlyingRustTuple<'_> {
3604            fn from(value: AlreadyInitialized) -> Self {
3605                ()
3606            }
3607        }
3608        #[automatically_derived]
3609        #[doc(hidden)]
3610        impl ::core::convert::From<UnderlyingRustTuple<'_>> for AlreadyInitialized {
3611            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3612                Self
3613            }
3614        }
3615        #[automatically_derived]
3616        impl alloy_sol_types::SolError for AlreadyInitialized {
3617            type Parameters<'a> = UnderlyingSolTuple<'a>;
3618            type Token<'a> = <Self::Parameters<
3619                'a,
3620            > as alloy_sol_types::SolType>::Token<'a>;
3621            const SIGNATURE: &'static str = "AlreadyInitialized()";
3622            const SELECTOR: [u8; 4] = [13u8, 193u8, 73u8, 240u8];
3623            #[inline]
3624            fn new<'a>(
3625                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3626            ) -> Self {
3627                tuple.into()
3628            }
3629            #[inline]
3630            fn tokenize(&self) -> Self::Token<'_> {
3631                ()
3632            }
3633            #[inline]
3634            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3635                <Self::Parameters<
3636                    '_,
3637                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3638                    .map(Self::new)
3639            }
3640        }
3641    };
3642    #[derive(serde::Serialize, serde::Deserialize)]
3643    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3644    /**Custom error with signature `BalanceExceedsGlobalPerChannelAllowance()` and selector `0xa4f3bbe4`.
3645```solidity
3646error BalanceExceedsGlobalPerChannelAllowance();
3647```*/
3648    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3649    #[derive(Clone)]
3650    pub struct BalanceExceedsGlobalPerChannelAllowance;
3651    #[allow(
3652        non_camel_case_types,
3653        non_snake_case,
3654        clippy::pub_underscore_fields,
3655        clippy::style
3656    )]
3657    const _: () = {
3658        use alloy::sol_types as alloy_sol_types;
3659        #[doc(hidden)]
3660        type UnderlyingSolTuple<'a> = ();
3661        #[doc(hidden)]
3662        type UnderlyingRustTuple<'a> = ();
3663        #[cfg(test)]
3664        #[allow(dead_code, unreachable_patterns)]
3665        fn _type_assertion(
3666            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3667        ) {
3668            match _t {
3669                alloy_sol_types::private::AssertTypeEq::<
3670                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3671                >(_) => {}
3672            }
3673        }
3674        #[automatically_derived]
3675        #[doc(hidden)]
3676        impl ::core::convert::From<BalanceExceedsGlobalPerChannelAllowance>
3677        for UnderlyingRustTuple<'_> {
3678            fn from(value: BalanceExceedsGlobalPerChannelAllowance) -> Self {
3679                ()
3680            }
3681        }
3682        #[automatically_derived]
3683        #[doc(hidden)]
3684        impl ::core::convert::From<UnderlyingRustTuple<'_>>
3685        for BalanceExceedsGlobalPerChannelAllowance {
3686            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3687                Self
3688            }
3689        }
3690        #[automatically_derived]
3691        impl alloy_sol_types::SolError for BalanceExceedsGlobalPerChannelAllowance {
3692            type Parameters<'a> = UnderlyingSolTuple<'a>;
3693            type Token<'a> = <Self::Parameters<
3694                'a,
3695            > as alloy_sol_types::SolType>::Token<'a>;
3696            const SIGNATURE: &'static str = "BalanceExceedsGlobalPerChannelAllowance()";
3697            const SELECTOR: [u8; 4] = [164u8, 243u8, 187u8, 228u8];
3698            #[inline]
3699            fn new<'a>(
3700                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3701            ) -> Self {
3702                tuple.into()
3703            }
3704            #[inline]
3705            fn tokenize(&self) -> Self::Token<'_> {
3706                ()
3707            }
3708            #[inline]
3709            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3710                <Self::Parameters<
3711                    '_,
3712                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3713                    .map(Self::new)
3714            }
3715        }
3716    };
3717    #[derive(serde::Serialize, serde::Deserialize)]
3718    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3719    /**Custom error with signature `ContractNotResponsible()` and selector `0xacd5a823`.
3720```solidity
3721error ContractNotResponsible();
3722```*/
3723    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3724    #[derive(Clone)]
3725    pub struct ContractNotResponsible;
3726    #[allow(
3727        non_camel_case_types,
3728        non_snake_case,
3729        clippy::pub_underscore_fields,
3730        clippy::style
3731    )]
3732    const _: () = {
3733        use alloy::sol_types as alloy_sol_types;
3734        #[doc(hidden)]
3735        type UnderlyingSolTuple<'a> = ();
3736        #[doc(hidden)]
3737        type UnderlyingRustTuple<'a> = ();
3738        #[cfg(test)]
3739        #[allow(dead_code, unreachable_patterns)]
3740        fn _type_assertion(
3741            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3742        ) {
3743            match _t {
3744                alloy_sol_types::private::AssertTypeEq::<
3745                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3746                >(_) => {}
3747            }
3748        }
3749        #[automatically_derived]
3750        #[doc(hidden)]
3751        impl ::core::convert::From<ContractNotResponsible> for UnderlyingRustTuple<'_> {
3752            fn from(value: ContractNotResponsible) -> Self {
3753                ()
3754            }
3755        }
3756        #[automatically_derived]
3757        #[doc(hidden)]
3758        impl ::core::convert::From<UnderlyingRustTuple<'_>> for ContractNotResponsible {
3759            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3760                Self
3761            }
3762        }
3763        #[automatically_derived]
3764        impl alloy_sol_types::SolError for ContractNotResponsible {
3765            type Parameters<'a> = UnderlyingSolTuple<'a>;
3766            type Token<'a> = <Self::Parameters<
3767                'a,
3768            > as alloy_sol_types::SolType>::Token<'a>;
3769            const SIGNATURE: &'static str = "ContractNotResponsible()";
3770            const SELECTOR: [u8; 4] = [172u8, 213u8, 168u8, 35u8];
3771            #[inline]
3772            fn new<'a>(
3773                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3774            ) -> Self {
3775                tuple.into()
3776            }
3777            #[inline]
3778            fn tokenize(&self) -> Self::Token<'_> {
3779                ()
3780            }
3781            #[inline]
3782            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3783                <Self::Parameters<
3784                    '_,
3785                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3786                    .map(Self::new)
3787            }
3788        }
3789    };
3790    #[derive(serde::Serialize, serde::Deserialize)]
3791    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3792    /**Custom error with signature `InsufficientChannelBalance()` and selector `0xb147636c`.
3793```solidity
3794error InsufficientChannelBalance();
3795```*/
3796    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3797    #[derive(Clone)]
3798    pub struct InsufficientChannelBalance;
3799    #[allow(
3800        non_camel_case_types,
3801        non_snake_case,
3802        clippy::pub_underscore_fields,
3803        clippy::style
3804    )]
3805    const _: () = {
3806        use alloy::sol_types as alloy_sol_types;
3807        #[doc(hidden)]
3808        type UnderlyingSolTuple<'a> = ();
3809        #[doc(hidden)]
3810        type UnderlyingRustTuple<'a> = ();
3811        #[cfg(test)]
3812        #[allow(dead_code, unreachable_patterns)]
3813        fn _type_assertion(
3814            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3815        ) {
3816            match _t {
3817                alloy_sol_types::private::AssertTypeEq::<
3818                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3819                >(_) => {}
3820            }
3821        }
3822        #[automatically_derived]
3823        #[doc(hidden)]
3824        impl ::core::convert::From<InsufficientChannelBalance>
3825        for UnderlyingRustTuple<'_> {
3826            fn from(value: InsufficientChannelBalance) -> Self {
3827                ()
3828            }
3829        }
3830        #[automatically_derived]
3831        #[doc(hidden)]
3832        impl ::core::convert::From<UnderlyingRustTuple<'_>>
3833        for InsufficientChannelBalance {
3834            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3835                Self
3836            }
3837        }
3838        #[automatically_derived]
3839        impl alloy_sol_types::SolError for InsufficientChannelBalance {
3840            type Parameters<'a> = UnderlyingSolTuple<'a>;
3841            type Token<'a> = <Self::Parameters<
3842                'a,
3843            > as alloy_sol_types::SolType>::Token<'a>;
3844            const SIGNATURE: &'static str = "InsufficientChannelBalance()";
3845            const SELECTOR: [u8; 4] = [177u8, 71u8, 99u8, 108u8];
3846            #[inline]
3847            fn new<'a>(
3848                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3849            ) -> Self {
3850                tuple.into()
3851            }
3852            #[inline]
3853            fn tokenize(&self) -> Self::Token<'_> {
3854                ()
3855            }
3856            #[inline]
3857            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3858                <Self::Parameters<
3859                    '_,
3860                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3861                    .map(Self::new)
3862            }
3863        }
3864    };
3865    #[derive(serde::Serialize, serde::Deserialize)]
3866    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3867    /**Custom error with signature `InvalidAggregatedTicketInterval()` and selector `0xd0dc3c1e`.
3868```solidity
3869error InvalidAggregatedTicketInterval();
3870```*/
3871    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3872    #[derive(Clone)]
3873    pub struct InvalidAggregatedTicketInterval;
3874    #[allow(
3875        non_camel_case_types,
3876        non_snake_case,
3877        clippy::pub_underscore_fields,
3878        clippy::style
3879    )]
3880    const _: () = {
3881        use alloy::sol_types as alloy_sol_types;
3882        #[doc(hidden)]
3883        type UnderlyingSolTuple<'a> = ();
3884        #[doc(hidden)]
3885        type UnderlyingRustTuple<'a> = ();
3886        #[cfg(test)]
3887        #[allow(dead_code, unreachable_patterns)]
3888        fn _type_assertion(
3889            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3890        ) {
3891            match _t {
3892                alloy_sol_types::private::AssertTypeEq::<
3893                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3894                >(_) => {}
3895            }
3896        }
3897        #[automatically_derived]
3898        #[doc(hidden)]
3899        impl ::core::convert::From<InvalidAggregatedTicketInterval>
3900        for UnderlyingRustTuple<'_> {
3901            fn from(value: InvalidAggregatedTicketInterval) -> Self {
3902                ()
3903            }
3904        }
3905        #[automatically_derived]
3906        #[doc(hidden)]
3907        impl ::core::convert::From<UnderlyingRustTuple<'_>>
3908        for InvalidAggregatedTicketInterval {
3909            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3910                Self
3911            }
3912        }
3913        #[automatically_derived]
3914        impl alloy_sol_types::SolError for InvalidAggregatedTicketInterval {
3915            type Parameters<'a> = UnderlyingSolTuple<'a>;
3916            type Token<'a> = <Self::Parameters<
3917                'a,
3918            > as alloy_sol_types::SolType>::Token<'a>;
3919            const SIGNATURE: &'static str = "InvalidAggregatedTicketInterval()";
3920            const SELECTOR: [u8; 4] = [208u8, 220u8, 60u8, 30u8];
3921            #[inline]
3922            fn new<'a>(
3923                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3924            ) -> Self {
3925                tuple.into()
3926            }
3927            #[inline]
3928            fn tokenize(&self) -> Self::Token<'_> {
3929                ()
3930            }
3931            #[inline]
3932            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3933                <Self::Parameters<
3934                    '_,
3935                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
3936                    .map(Self::new)
3937            }
3938        }
3939    };
3940    #[derive(serde::Serialize, serde::Deserialize)]
3941    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3942    /**Custom error with signature `InvalidBalance()` and selector `0xc52e3eff`.
3943```solidity
3944error InvalidBalance();
3945```*/
3946    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3947    #[derive(Clone)]
3948    pub struct InvalidBalance;
3949    #[allow(
3950        non_camel_case_types,
3951        non_snake_case,
3952        clippy::pub_underscore_fields,
3953        clippy::style
3954    )]
3955    const _: () = {
3956        use alloy::sol_types as alloy_sol_types;
3957        #[doc(hidden)]
3958        type UnderlyingSolTuple<'a> = ();
3959        #[doc(hidden)]
3960        type UnderlyingRustTuple<'a> = ();
3961        #[cfg(test)]
3962        #[allow(dead_code, unreachable_patterns)]
3963        fn _type_assertion(
3964            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3965        ) {
3966            match _t {
3967                alloy_sol_types::private::AssertTypeEq::<
3968                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3969                >(_) => {}
3970            }
3971        }
3972        #[automatically_derived]
3973        #[doc(hidden)]
3974        impl ::core::convert::From<InvalidBalance> for UnderlyingRustTuple<'_> {
3975            fn from(value: InvalidBalance) -> Self {
3976                ()
3977            }
3978        }
3979        #[automatically_derived]
3980        #[doc(hidden)]
3981        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidBalance {
3982            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3983                Self
3984            }
3985        }
3986        #[automatically_derived]
3987        impl alloy_sol_types::SolError for InvalidBalance {
3988            type Parameters<'a> = UnderlyingSolTuple<'a>;
3989            type Token<'a> = <Self::Parameters<
3990                'a,
3991            > as alloy_sol_types::SolType>::Token<'a>;
3992            const SIGNATURE: &'static str = "InvalidBalance()";
3993            const SELECTOR: [u8; 4] = [197u8, 46u8, 62u8, 255u8];
3994            #[inline]
3995            fn new<'a>(
3996                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3997            ) -> Self {
3998                tuple.into()
3999            }
4000            #[inline]
4001            fn tokenize(&self) -> Self::Token<'_> {
4002                ()
4003            }
4004            #[inline]
4005            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
4006                <Self::Parameters<
4007                    '_,
4008                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4009                    .map(Self::new)
4010            }
4011        }
4012    };
4013    #[derive(serde::Serialize, serde::Deserialize)]
4014    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4015    /**Custom error with signature `InvalidCurvePoint()` and selector `0x72454a82`.
4016```solidity
4017error InvalidCurvePoint();
4018```*/
4019    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4020    #[derive(Clone)]
4021    pub struct InvalidCurvePoint;
4022    #[allow(
4023        non_camel_case_types,
4024        non_snake_case,
4025        clippy::pub_underscore_fields,
4026        clippy::style
4027    )]
4028    const _: () = {
4029        use alloy::sol_types as alloy_sol_types;
4030        #[doc(hidden)]
4031        type UnderlyingSolTuple<'a> = ();
4032        #[doc(hidden)]
4033        type UnderlyingRustTuple<'a> = ();
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<InvalidCurvePoint> for UnderlyingRustTuple<'_> {
4048            fn from(value: InvalidCurvePoint) -> Self {
4049                ()
4050            }
4051        }
4052        #[automatically_derived]
4053        #[doc(hidden)]
4054        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidCurvePoint {
4055            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4056                Self
4057            }
4058        }
4059        #[automatically_derived]
4060        impl alloy_sol_types::SolError for InvalidCurvePoint {
4061            type Parameters<'a> = UnderlyingSolTuple<'a>;
4062            type Token<'a> = <Self::Parameters<
4063                'a,
4064            > as alloy_sol_types::SolType>::Token<'a>;
4065            const SIGNATURE: &'static str = "InvalidCurvePoint()";
4066            const SELECTOR: [u8; 4] = [114u8, 69u8, 74u8, 130u8];
4067            #[inline]
4068            fn new<'a>(
4069                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4070            ) -> Self {
4071                tuple.into()
4072            }
4073            #[inline]
4074            fn tokenize(&self) -> Self::Token<'_> {
4075                ()
4076            }
4077            #[inline]
4078            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
4079                <Self::Parameters<
4080                    '_,
4081                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4082                    .map(Self::new)
4083            }
4084        }
4085    };
4086    #[derive(serde::Serialize, serde::Deserialize)]
4087    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4088    /**Custom error with signature `InvalidFieldElement()` and selector `0x3ae4ed6b`.
4089```solidity
4090error InvalidFieldElement();
4091```*/
4092    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4093    #[derive(Clone)]
4094    pub struct InvalidFieldElement;
4095    #[allow(
4096        non_camel_case_types,
4097        non_snake_case,
4098        clippy::pub_underscore_fields,
4099        clippy::style
4100    )]
4101    const _: () = {
4102        use alloy::sol_types as alloy_sol_types;
4103        #[doc(hidden)]
4104        type UnderlyingSolTuple<'a> = ();
4105        #[doc(hidden)]
4106        type UnderlyingRustTuple<'a> = ();
4107        #[cfg(test)]
4108        #[allow(dead_code, unreachable_patterns)]
4109        fn _type_assertion(
4110            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4111        ) {
4112            match _t {
4113                alloy_sol_types::private::AssertTypeEq::<
4114                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4115                >(_) => {}
4116            }
4117        }
4118        #[automatically_derived]
4119        #[doc(hidden)]
4120        impl ::core::convert::From<InvalidFieldElement> for UnderlyingRustTuple<'_> {
4121            fn from(value: InvalidFieldElement) -> Self {
4122                ()
4123            }
4124        }
4125        #[automatically_derived]
4126        #[doc(hidden)]
4127        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidFieldElement {
4128            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4129                Self
4130            }
4131        }
4132        #[automatically_derived]
4133        impl alloy_sol_types::SolError for InvalidFieldElement {
4134            type Parameters<'a> = UnderlyingSolTuple<'a>;
4135            type Token<'a> = <Self::Parameters<
4136                'a,
4137            > as alloy_sol_types::SolType>::Token<'a>;
4138            const SIGNATURE: &'static str = "InvalidFieldElement()";
4139            const SELECTOR: [u8; 4] = [58u8, 228u8, 237u8, 107u8];
4140            #[inline]
4141            fn new<'a>(
4142                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4143            ) -> Self {
4144                tuple.into()
4145            }
4146            #[inline]
4147            fn tokenize(&self) -> Self::Token<'_> {
4148                ()
4149            }
4150            #[inline]
4151            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
4152                <Self::Parameters<
4153                    '_,
4154                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4155                    .map(Self::new)
4156            }
4157        }
4158    };
4159    #[derive(serde::Serialize, serde::Deserialize)]
4160    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4161    /**Custom error with signature `InvalidNoticePeriod()` and selector `0xf9ee9107`.
4162```solidity
4163error InvalidNoticePeriod();
4164```*/
4165    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4166    #[derive(Clone)]
4167    pub struct InvalidNoticePeriod;
4168    #[allow(
4169        non_camel_case_types,
4170        non_snake_case,
4171        clippy::pub_underscore_fields,
4172        clippy::style
4173    )]
4174    const _: () = {
4175        use alloy::sol_types as alloy_sol_types;
4176        #[doc(hidden)]
4177        type UnderlyingSolTuple<'a> = ();
4178        #[doc(hidden)]
4179        type UnderlyingRustTuple<'a> = ();
4180        #[cfg(test)]
4181        #[allow(dead_code, unreachable_patterns)]
4182        fn _type_assertion(
4183            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4184        ) {
4185            match _t {
4186                alloy_sol_types::private::AssertTypeEq::<
4187                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4188                >(_) => {}
4189            }
4190        }
4191        #[automatically_derived]
4192        #[doc(hidden)]
4193        impl ::core::convert::From<InvalidNoticePeriod> for UnderlyingRustTuple<'_> {
4194            fn from(value: InvalidNoticePeriod) -> Self {
4195                ()
4196            }
4197        }
4198        #[automatically_derived]
4199        #[doc(hidden)]
4200        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidNoticePeriod {
4201            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4202                Self
4203            }
4204        }
4205        #[automatically_derived]
4206        impl alloy_sol_types::SolError for InvalidNoticePeriod {
4207            type Parameters<'a> = UnderlyingSolTuple<'a>;
4208            type Token<'a> = <Self::Parameters<
4209                'a,
4210            > as alloy_sol_types::SolType>::Token<'a>;
4211            const SIGNATURE: &'static str = "InvalidNoticePeriod()";
4212            const SELECTOR: [u8; 4] = [249u8, 238u8, 145u8, 7u8];
4213            #[inline]
4214            fn new<'a>(
4215                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4216            ) -> Self {
4217                tuple.into()
4218            }
4219            #[inline]
4220            fn tokenize(&self) -> Self::Token<'_> {
4221                ()
4222            }
4223            #[inline]
4224            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
4225                <Self::Parameters<
4226                    '_,
4227                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4228                    .map(Self::new)
4229            }
4230        }
4231    };
4232    #[derive(serde::Serialize, serde::Deserialize)]
4233    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4234    /**Custom error with signature `InvalidPointWitness()` and selector `0xedfdcd98`.
4235```solidity
4236error InvalidPointWitness();
4237```*/
4238    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4239    #[derive(Clone)]
4240    pub struct InvalidPointWitness;
4241    #[allow(
4242        non_camel_case_types,
4243        non_snake_case,
4244        clippy::pub_underscore_fields,
4245        clippy::style
4246    )]
4247    const _: () = {
4248        use alloy::sol_types as alloy_sol_types;
4249        #[doc(hidden)]
4250        type UnderlyingSolTuple<'a> = ();
4251        #[doc(hidden)]
4252        type UnderlyingRustTuple<'a> = ();
4253        #[cfg(test)]
4254        #[allow(dead_code, unreachable_patterns)]
4255        fn _type_assertion(
4256            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4257        ) {
4258            match _t {
4259                alloy_sol_types::private::AssertTypeEq::<
4260                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4261                >(_) => {}
4262            }
4263        }
4264        #[automatically_derived]
4265        #[doc(hidden)]
4266        impl ::core::convert::From<InvalidPointWitness> for UnderlyingRustTuple<'_> {
4267            fn from(value: InvalidPointWitness) -> Self {
4268                ()
4269            }
4270        }
4271        #[automatically_derived]
4272        #[doc(hidden)]
4273        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidPointWitness {
4274            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4275                Self
4276            }
4277        }
4278        #[automatically_derived]
4279        impl alloy_sol_types::SolError for InvalidPointWitness {
4280            type Parameters<'a> = UnderlyingSolTuple<'a>;
4281            type Token<'a> = <Self::Parameters<
4282                'a,
4283            > as alloy_sol_types::SolType>::Token<'a>;
4284            const SIGNATURE: &'static str = "InvalidPointWitness()";
4285            const SELECTOR: [u8; 4] = [237u8, 253u8, 205u8, 152u8];
4286            #[inline]
4287            fn new<'a>(
4288                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4289            ) -> Self {
4290                tuple.into()
4291            }
4292            #[inline]
4293            fn tokenize(&self) -> Self::Token<'_> {
4294                ()
4295            }
4296            #[inline]
4297            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
4298                <Self::Parameters<
4299                    '_,
4300                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4301                    .map(Self::new)
4302            }
4303        }
4304    };
4305    #[derive(serde::Serialize, serde::Deserialize)]
4306    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4307    /**Custom error with signature `InvalidSafeAddress()` and selector `0x8e9d7c5e`.
4308```solidity
4309error InvalidSafeAddress();
4310```*/
4311    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4312    #[derive(Clone)]
4313    pub struct InvalidSafeAddress;
4314    #[allow(
4315        non_camel_case_types,
4316        non_snake_case,
4317        clippy::pub_underscore_fields,
4318        clippy::style
4319    )]
4320    const _: () = {
4321        use alloy::sol_types as alloy_sol_types;
4322        #[doc(hidden)]
4323        type UnderlyingSolTuple<'a> = ();
4324        #[doc(hidden)]
4325        type UnderlyingRustTuple<'a> = ();
4326        #[cfg(test)]
4327        #[allow(dead_code, unreachable_patterns)]
4328        fn _type_assertion(
4329            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4330        ) {
4331            match _t {
4332                alloy_sol_types::private::AssertTypeEq::<
4333                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4334                >(_) => {}
4335            }
4336        }
4337        #[automatically_derived]
4338        #[doc(hidden)]
4339        impl ::core::convert::From<InvalidSafeAddress> for UnderlyingRustTuple<'_> {
4340            fn from(value: InvalidSafeAddress) -> Self {
4341                ()
4342            }
4343        }
4344        #[automatically_derived]
4345        #[doc(hidden)]
4346        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidSafeAddress {
4347            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4348                Self
4349            }
4350        }
4351        #[automatically_derived]
4352        impl alloy_sol_types::SolError for InvalidSafeAddress {
4353            type Parameters<'a> = UnderlyingSolTuple<'a>;
4354            type Token<'a> = <Self::Parameters<
4355                'a,
4356            > as alloy_sol_types::SolType>::Token<'a>;
4357            const SIGNATURE: &'static str = "InvalidSafeAddress()";
4358            const SELECTOR: [u8; 4] = [142u8, 157u8, 124u8, 94u8];
4359            #[inline]
4360            fn new<'a>(
4361                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4362            ) -> Self {
4363                tuple.into()
4364            }
4365            #[inline]
4366            fn tokenize(&self) -> Self::Token<'_> {
4367                ()
4368            }
4369            #[inline]
4370            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
4371                <Self::Parameters<
4372                    '_,
4373                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4374                    .map(Self::new)
4375            }
4376        }
4377    };
4378    #[derive(serde::Serialize, serde::Deserialize)]
4379    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4380    /**Custom error with signature `InvalidTicketSignature()` and selector `0xcddd5356`.
4381```solidity
4382error InvalidTicketSignature();
4383```*/
4384    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4385    #[derive(Clone)]
4386    pub struct InvalidTicketSignature;
4387    #[allow(
4388        non_camel_case_types,
4389        non_snake_case,
4390        clippy::pub_underscore_fields,
4391        clippy::style
4392    )]
4393    const _: () = {
4394        use alloy::sol_types as alloy_sol_types;
4395        #[doc(hidden)]
4396        type UnderlyingSolTuple<'a> = ();
4397        #[doc(hidden)]
4398        type UnderlyingRustTuple<'a> = ();
4399        #[cfg(test)]
4400        #[allow(dead_code, unreachable_patterns)]
4401        fn _type_assertion(
4402            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4403        ) {
4404            match _t {
4405                alloy_sol_types::private::AssertTypeEq::<
4406                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4407                >(_) => {}
4408            }
4409        }
4410        #[automatically_derived]
4411        #[doc(hidden)]
4412        impl ::core::convert::From<InvalidTicketSignature> for UnderlyingRustTuple<'_> {
4413            fn from(value: InvalidTicketSignature) -> Self {
4414                ()
4415            }
4416        }
4417        #[automatically_derived]
4418        #[doc(hidden)]
4419        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidTicketSignature {
4420            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4421                Self
4422            }
4423        }
4424        #[automatically_derived]
4425        impl alloy_sol_types::SolError for InvalidTicketSignature {
4426            type Parameters<'a> = UnderlyingSolTuple<'a>;
4427            type Token<'a> = <Self::Parameters<
4428                'a,
4429            > as alloy_sol_types::SolType>::Token<'a>;
4430            const SIGNATURE: &'static str = "InvalidTicketSignature()";
4431            const SELECTOR: [u8; 4] = [205u8, 221u8, 83u8, 86u8];
4432            #[inline]
4433            fn new<'a>(
4434                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4435            ) -> Self {
4436                tuple.into()
4437            }
4438            #[inline]
4439            fn tokenize(&self) -> Self::Token<'_> {
4440                ()
4441            }
4442            #[inline]
4443            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
4444                <Self::Parameters<
4445                    '_,
4446                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4447                    .map(Self::new)
4448            }
4449        }
4450    };
4451    #[derive(serde::Serialize, serde::Deserialize)]
4452    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4453    /**Custom error with signature `InvalidTokenRecipient()` and selector `0xb9c49108`.
4454```solidity
4455error InvalidTokenRecipient();
4456```*/
4457    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4458    #[derive(Clone)]
4459    pub struct InvalidTokenRecipient;
4460    #[allow(
4461        non_camel_case_types,
4462        non_snake_case,
4463        clippy::pub_underscore_fields,
4464        clippy::style
4465    )]
4466    const _: () = {
4467        use alloy::sol_types as alloy_sol_types;
4468        #[doc(hidden)]
4469        type UnderlyingSolTuple<'a> = ();
4470        #[doc(hidden)]
4471        type UnderlyingRustTuple<'a> = ();
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<InvalidTokenRecipient> for UnderlyingRustTuple<'_> {
4486            fn from(value: InvalidTokenRecipient) -> Self {
4487                ()
4488            }
4489        }
4490        #[automatically_derived]
4491        #[doc(hidden)]
4492        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidTokenRecipient {
4493            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4494                Self
4495            }
4496        }
4497        #[automatically_derived]
4498        impl alloy_sol_types::SolError for InvalidTokenRecipient {
4499            type Parameters<'a> = UnderlyingSolTuple<'a>;
4500            type Token<'a> = <Self::Parameters<
4501                'a,
4502            > as alloy_sol_types::SolType>::Token<'a>;
4503            const SIGNATURE: &'static str = "InvalidTokenRecipient()";
4504            const SELECTOR: [u8; 4] = [185u8, 196u8, 145u8, 8u8];
4505            #[inline]
4506            fn new<'a>(
4507                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4508            ) -> Self {
4509                tuple.into()
4510            }
4511            #[inline]
4512            fn tokenize(&self) -> Self::Token<'_> {
4513                ()
4514            }
4515            #[inline]
4516            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
4517                <Self::Parameters<
4518                    '_,
4519                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4520                    .map(Self::new)
4521            }
4522        }
4523    };
4524    #[derive(serde::Serialize, serde::Deserialize)]
4525    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4526    /**Custom error with signature `InvalidTokensReceivedUsage()` and selector `0x69ee6f28`.
4527```solidity
4528error InvalidTokensReceivedUsage();
4529```*/
4530    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4531    #[derive(Clone)]
4532    pub struct InvalidTokensReceivedUsage;
4533    #[allow(
4534        non_camel_case_types,
4535        non_snake_case,
4536        clippy::pub_underscore_fields,
4537        clippy::style
4538    )]
4539    const _: () = {
4540        use alloy::sol_types as alloy_sol_types;
4541        #[doc(hidden)]
4542        type UnderlyingSolTuple<'a> = ();
4543        #[doc(hidden)]
4544        type UnderlyingRustTuple<'a> = ();
4545        #[cfg(test)]
4546        #[allow(dead_code, unreachable_patterns)]
4547        fn _type_assertion(
4548            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4549        ) {
4550            match _t {
4551                alloy_sol_types::private::AssertTypeEq::<
4552                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4553                >(_) => {}
4554            }
4555        }
4556        #[automatically_derived]
4557        #[doc(hidden)]
4558        impl ::core::convert::From<InvalidTokensReceivedUsage>
4559        for UnderlyingRustTuple<'_> {
4560            fn from(value: InvalidTokensReceivedUsage) -> Self {
4561                ()
4562            }
4563        }
4564        #[automatically_derived]
4565        #[doc(hidden)]
4566        impl ::core::convert::From<UnderlyingRustTuple<'_>>
4567        for InvalidTokensReceivedUsage {
4568            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4569                Self
4570            }
4571        }
4572        #[automatically_derived]
4573        impl alloy_sol_types::SolError for InvalidTokensReceivedUsage {
4574            type Parameters<'a> = UnderlyingSolTuple<'a>;
4575            type Token<'a> = <Self::Parameters<
4576                'a,
4577            > as alloy_sol_types::SolType>::Token<'a>;
4578            const SIGNATURE: &'static str = "InvalidTokensReceivedUsage()";
4579            const SELECTOR: [u8; 4] = [105u8, 238u8, 111u8, 40u8];
4580            #[inline]
4581            fn new<'a>(
4582                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4583            ) -> Self {
4584                tuple.into()
4585            }
4586            #[inline]
4587            fn tokenize(&self) -> Self::Token<'_> {
4588                ()
4589            }
4590            #[inline]
4591            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
4592                <Self::Parameters<
4593                    '_,
4594                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4595                    .map(Self::new)
4596            }
4597        }
4598    };
4599    #[derive(serde::Serialize, serde::Deserialize)]
4600    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4601    /**Custom error with signature `InvalidVRFProof()` and selector `0x95fdbdb8`.
4602```solidity
4603error InvalidVRFProof();
4604```*/
4605    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4606    #[derive(Clone)]
4607    pub struct InvalidVRFProof;
4608    #[allow(
4609        non_camel_case_types,
4610        non_snake_case,
4611        clippy::pub_underscore_fields,
4612        clippy::style
4613    )]
4614    const _: () = {
4615        use alloy::sol_types as alloy_sol_types;
4616        #[doc(hidden)]
4617        type UnderlyingSolTuple<'a> = ();
4618        #[doc(hidden)]
4619        type UnderlyingRustTuple<'a> = ();
4620        #[cfg(test)]
4621        #[allow(dead_code, unreachable_patterns)]
4622        fn _type_assertion(
4623            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4624        ) {
4625            match _t {
4626                alloy_sol_types::private::AssertTypeEq::<
4627                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4628                >(_) => {}
4629            }
4630        }
4631        #[automatically_derived]
4632        #[doc(hidden)]
4633        impl ::core::convert::From<InvalidVRFProof> for UnderlyingRustTuple<'_> {
4634            fn from(value: InvalidVRFProof) -> Self {
4635                ()
4636            }
4637        }
4638        #[automatically_derived]
4639        #[doc(hidden)]
4640        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidVRFProof {
4641            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4642                Self
4643            }
4644        }
4645        #[automatically_derived]
4646        impl alloy_sol_types::SolError for InvalidVRFProof {
4647            type Parameters<'a> = UnderlyingSolTuple<'a>;
4648            type Token<'a> = <Self::Parameters<
4649                'a,
4650            > as alloy_sol_types::SolType>::Token<'a>;
4651            const SIGNATURE: &'static str = "InvalidVRFProof()";
4652            const SELECTOR: [u8; 4] = [149u8, 253u8, 189u8, 184u8];
4653            #[inline]
4654            fn new<'a>(
4655                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4656            ) -> Self {
4657                tuple.into()
4658            }
4659            #[inline]
4660            fn tokenize(&self) -> Self::Token<'_> {
4661                ()
4662            }
4663            #[inline]
4664            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
4665                <Self::Parameters<
4666                    '_,
4667                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4668                    .map(Self::new)
4669            }
4670        }
4671    };
4672    #[derive(serde::Serialize, serde::Deserialize)]
4673    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4674    /**Custom error with signature `MultiSigUninitialized()` and selector `0x454a20c8`.
4675```solidity
4676error MultiSigUninitialized();
4677```*/
4678    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4679    #[derive(Clone)]
4680    pub struct MultiSigUninitialized;
4681    #[allow(
4682        non_camel_case_types,
4683        non_snake_case,
4684        clippy::pub_underscore_fields,
4685        clippy::style
4686    )]
4687    const _: () = {
4688        use alloy::sol_types as alloy_sol_types;
4689        #[doc(hidden)]
4690        type UnderlyingSolTuple<'a> = ();
4691        #[doc(hidden)]
4692        type UnderlyingRustTuple<'a> = ();
4693        #[cfg(test)]
4694        #[allow(dead_code, unreachable_patterns)]
4695        fn _type_assertion(
4696            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4697        ) {
4698            match _t {
4699                alloy_sol_types::private::AssertTypeEq::<
4700                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4701                >(_) => {}
4702            }
4703        }
4704        #[automatically_derived]
4705        #[doc(hidden)]
4706        impl ::core::convert::From<MultiSigUninitialized> for UnderlyingRustTuple<'_> {
4707            fn from(value: MultiSigUninitialized) -> Self {
4708                ()
4709            }
4710        }
4711        #[automatically_derived]
4712        #[doc(hidden)]
4713        impl ::core::convert::From<UnderlyingRustTuple<'_>> for MultiSigUninitialized {
4714            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4715                Self
4716            }
4717        }
4718        #[automatically_derived]
4719        impl alloy_sol_types::SolError for MultiSigUninitialized {
4720            type Parameters<'a> = UnderlyingSolTuple<'a>;
4721            type Token<'a> = <Self::Parameters<
4722                'a,
4723            > as alloy_sol_types::SolType>::Token<'a>;
4724            const SIGNATURE: &'static str = "MultiSigUninitialized()";
4725            const SELECTOR: [u8; 4] = [69u8, 74u8, 32u8, 200u8];
4726            #[inline]
4727            fn new<'a>(
4728                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4729            ) -> Self {
4730                tuple.into()
4731            }
4732            #[inline]
4733            fn tokenize(&self) -> Self::Token<'_> {
4734                ()
4735            }
4736            #[inline]
4737            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
4738                <Self::Parameters<
4739                    '_,
4740                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4741                    .map(Self::new)
4742            }
4743        }
4744    };
4745    #[derive(serde::Serialize, serde::Deserialize)]
4746    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4747    /**Custom error with signature `NoticePeriodNotDue()` and selector `0x7164032a`.
4748```solidity
4749error NoticePeriodNotDue();
4750```*/
4751    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4752    #[derive(Clone)]
4753    pub struct NoticePeriodNotDue;
4754    #[allow(
4755        non_camel_case_types,
4756        non_snake_case,
4757        clippy::pub_underscore_fields,
4758        clippy::style
4759    )]
4760    const _: () = {
4761        use alloy::sol_types as alloy_sol_types;
4762        #[doc(hidden)]
4763        type UnderlyingSolTuple<'a> = ();
4764        #[doc(hidden)]
4765        type UnderlyingRustTuple<'a> = ();
4766        #[cfg(test)]
4767        #[allow(dead_code, unreachable_patterns)]
4768        fn _type_assertion(
4769            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4770        ) {
4771            match _t {
4772                alloy_sol_types::private::AssertTypeEq::<
4773                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4774                >(_) => {}
4775            }
4776        }
4777        #[automatically_derived]
4778        #[doc(hidden)]
4779        impl ::core::convert::From<NoticePeriodNotDue> for UnderlyingRustTuple<'_> {
4780            fn from(value: NoticePeriodNotDue) -> Self {
4781                ()
4782            }
4783        }
4784        #[automatically_derived]
4785        #[doc(hidden)]
4786        impl ::core::convert::From<UnderlyingRustTuple<'_>> for NoticePeriodNotDue {
4787            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4788                Self
4789            }
4790        }
4791        #[automatically_derived]
4792        impl alloy_sol_types::SolError for NoticePeriodNotDue {
4793            type Parameters<'a> = UnderlyingSolTuple<'a>;
4794            type Token<'a> = <Self::Parameters<
4795                'a,
4796            > as alloy_sol_types::SolType>::Token<'a>;
4797            const SIGNATURE: &'static str = "NoticePeriodNotDue()";
4798            const SELECTOR: [u8; 4] = [113u8, 100u8, 3u8, 42u8];
4799            #[inline]
4800            fn new<'a>(
4801                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4802            ) -> Self {
4803                tuple.into()
4804            }
4805            #[inline]
4806            fn tokenize(&self) -> Self::Token<'_> {
4807                ()
4808            }
4809            #[inline]
4810            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
4811                <Self::Parameters<
4812                    '_,
4813                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4814                    .map(Self::new)
4815            }
4816        }
4817    };
4818    #[derive(serde::Serialize, serde::Deserialize)]
4819    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4820    /**Custom error with signature `SourceEqualsDestination()` and selector `0x97a3aed2`.
4821```solidity
4822error SourceEqualsDestination();
4823```*/
4824    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4825    #[derive(Clone)]
4826    pub struct SourceEqualsDestination;
4827    #[allow(
4828        non_camel_case_types,
4829        non_snake_case,
4830        clippy::pub_underscore_fields,
4831        clippy::style
4832    )]
4833    const _: () = {
4834        use alloy::sol_types as alloy_sol_types;
4835        #[doc(hidden)]
4836        type UnderlyingSolTuple<'a> = ();
4837        #[doc(hidden)]
4838        type UnderlyingRustTuple<'a> = ();
4839        #[cfg(test)]
4840        #[allow(dead_code, unreachable_patterns)]
4841        fn _type_assertion(
4842            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4843        ) {
4844            match _t {
4845                alloy_sol_types::private::AssertTypeEq::<
4846                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4847                >(_) => {}
4848            }
4849        }
4850        #[automatically_derived]
4851        #[doc(hidden)]
4852        impl ::core::convert::From<SourceEqualsDestination> for UnderlyingRustTuple<'_> {
4853            fn from(value: SourceEqualsDestination) -> Self {
4854                ()
4855            }
4856        }
4857        #[automatically_derived]
4858        #[doc(hidden)]
4859        impl ::core::convert::From<UnderlyingRustTuple<'_>> for SourceEqualsDestination {
4860            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4861                Self
4862            }
4863        }
4864        #[automatically_derived]
4865        impl alloy_sol_types::SolError for SourceEqualsDestination {
4866            type Parameters<'a> = UnderlyingSolTuple<'a>;
4867            type Token<'a> = <Self::Parameters<
4868                'a,
4869            > as alloy_sol_types::SolType>::Token<'a>;
4870            const SIGNATURE: &'static str = "SourceEqualsDestination()";
4871            const SELECTOR: [u8; 4] = [151u8, 163u8, 174u8, 210u8];
4872            #[inline]
4873            fn new<'a>(
4874                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4875            ) -> Self {
4876                tuple.into()
4877            }
4878            #[inline]
4879            fn tokenize(&self) -> Self::Token<'_> {
4880                ()
4881            }
4882            #[inline]
4883            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
4884                <Self::Parameters<
4885                    '_,
4886                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4887                    .map(Self::new)
4888            }
4889        }
4890    };
4891    #[derive(serde::Serialize, serde::Deserialize)]
4892    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4893    /**Custom error with signature `TicketIsNotAWin()` and selector `0xee835c89`.
4894```solidity
4895error TicketIsNotAWin();
4896```*/
4897    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4898    #[derive(Clone)]
4899    pub struct TicketIsNotAWin;
4900    #[allow(
4901        non_camel_case_types,
4902        non_snake_case,
4903        clippy::pub_underscore_fields,
4904        clippy::style
4905    )]
4906    const _: () = {
4907        use alloy::sol_types as alloy_sol_types;
4908        #[doc(hidden)]
4909        type UnderlyingSolTuple<'a> = ();
4910        #[doc(hidden)]
4911        type UnderlyingRustTuple<'a> = ();
4912        #[cfg(test)]
4913        #[allow(dead_code, unreachable_patterns)]
4914        fn _type_assertion(
4915            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4916        ) {
4917            match _t {
4918                alloy_sol_types::private::AssertTypeEq::<
4919                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4920                >(_) => {}
4921            }
4922        }
4923        #[automatically_derived]
4924        #[doc(hidden)]
4925        impl ::core::convert::From<TicketIsNotAWin> for UnderlyingRustTuple<'_> {
4926            fn from(value: TicketIsNotAWin) -> Self {
4927                ()
4928            }
4929        }
4930        #[automatically_derived]
4931        #[doc(hidden)]
4932        impl ::core::convert::From<UnderlyingRustTuple<'_>> for TicketIsNotAWin {
4933            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
4934                Self
4935            }
4936        }
4937        #[automatically_derived]
4938        impl alloy_sol_types::SolError for TicketIsNotAWin {
4939            type Parameters<'a> = UnderlyingSolTuple<'a>;
4940            type Token<'a> = <Self::Parameters<
4941                'a,
4942            > as alloy_sol_types::SolType>::Token<'a>;
4943            const SIGNATURE: &'static str = "TicketIsNotAWin()";
4944            const SELECTOR: [u8; 4] = [238u8, 131u8, 92u8, 137u8];
4945            #[inline]
4946            fn new<'a>(
4947                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
4948            ) -> Self {
4949                tuple.into()
4950            }
4951            #[inline]
4952            fn tokenize(&self) -> Self::Token<'_> {
4953                ()
4954            }
4955            #[inline]
4956            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
4957                <Self::Parameters<
4958                    '_,
4959                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
4960                    .map(Self::new)
4961            }
4962        }
4963    };
4964    #[derive(serde::Serialize, serde::Deserialize)]
4965    #[derive(Default, Debug, PartialEq, Eq, Hash)]
4966    /**Custom error with signature `TokenTransferFailed()` and selector `0x045c4b02`.
4967```solidity
4968error TokenTransferFailed();
4969```*/
4970    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
4971    #[derive(Clone)]
4972    pub struct TokenTransferFailed;
4973    #[allow(
4974        non_camel_case_types,
4975        non_snake_case,
4976        clippy::pub_underscore_fields,
4977        clippy::style
4978    )]
4979    const _: () = {
4980        use alloy::sol_types as alloy_sol_types;
4981        #[doc(hidden)]
4982        type UnderlyingSolTuple<'a> = ();
4983        #[doc(hidden)]
4984        type UnderlyingRustTuple<'a> = ();
4985        #[cfg(test)]
4986        #[allow(dead_code, unreachable_patterns)]
4987        fn _type_assertion(
4988            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
4989        ) {
4990            match _t {
4991                alloy_sol_types::private::AssertTypeEq::<
4992                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
4993                >(_) => {}
4994            }
4995        }
4996        #[automatically_derived]
4997        #[doc(hidden)]
4998        impl ::core::convert::From<TokenTransferFailed> for UnderlyingRustTuple<'_> {
4999            fn from(value: TokenTransferFailed) -> Self {
5000                ()
5001            }
5002        }
5003        #[automatically_derived]
5004        #[doc(hidden)]
5005        impl ::core::convert::From<UnderlyingRustTuple<'_>> for TokenTransferFailed {
5006            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5007                Self
5008            }
5009        }
5010        #[automatically_derived]
5011        impl alloy_sol_types::SolError for TokenTransferFailed {
5012            type Parameters<'a> = UnderlyingSolTuple<'a>;
5013            type Token<'a> = <Self::Parameters<
5014                'a,
5015            > as alloy_sol_types::SolType>::Token<'a>;
5016            const SIGNATURE: &'static str = "TokenTransferFailed()";
5017            const SELECTOR: [u8; 4] = [4u8, 92u8, 75u8, 2u8];
5018            #[inline]
5019            fn new<'a>(
5020                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5021            ) -> Self {
5022                tuple.into()
5023            }
5024            #[inline]
5025            fn tokenize(&self) -> Self::Token<'_> {
5026                ()
5027            }
5028            #[inline]
5029            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
5030                <Self::Parameters<
5031                    '_,
5032                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5033                    .map(Self::new)
5034            }
5035        }
5036    };
5037    #[derive(serde::Serialize, serde::Deserialize)]
5038    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5039    /**Custom error with signature `WrongChannelState(string)` and selector `0x499463c1`.
5040```solidity
5041error WrongChannelState(string reason);
5042```*/
5043    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5044    #[derive(Clone)]
5045    pub struct WrongChannelState {
5046        #[allow(missing_docs)]
5047        pub reason: alloy::sol_types::private::String,
5048    }
5049    #[allow(
5050        non_camel_case_types,
5051        non_snake_case,
5052        clippy::pub_underscore_fields,
5053        clippy::style
5054    )]
5055    const _: () = {
5056        use alloy::sol_types as alloy_sol_types;
5057        #[doc(hidden)]
5058        type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,);
5059        #[doc(hidden)]
5060        type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,);
5061        #[cfg(test)]
5062        #[allow(dead_code, unreachable_patterns)]
5063        fn _type_assertion(
5064            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5065        ) {
5066            match _t {
5067                alloy_sol_types::private::AssertTypeEq::<
5068                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5069                >(_) => {}
5070            }
5071        }
5072        #[automatically_derived]
5073        #[doc(hidden)]
5074        impl ::core::convert::From<WrongChannelState> for UnderlyingRustTuple<'_> {
5075            fn from(value: WrongChannelState) -> Self {
5076                (value.reason,)
5077            }
5078        }
5079        #[automatically_derived]
5080        #[doc(hidden)]
5081        impl ::core::convert::From<UnderlyingRustTuple<'_>> for WrongChannelState {
5082            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5083                Self { reason: tuple.0 }
5084            }
5085        }
5086        #[automatically_derived]
5087        impl alloy_sol_types::SolError for WrongChannelState {
5088            type Parameters<'a> = UnderlyingSolTuple<'a>;
5089            type Token<'a> = <Self::Parameters<
5090                'a,
5091            > as alloy_sol_types::SolType>::Token<'a>;
5092            const SIGNATURE: &'static str = "WrongChannelState(string)";
5093            const SELECTOR: [u8; 4] = [73u8, 148u8, 99u8, 193u8];
5094            #[inline]
5095            fn new<'a>(
5096                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5097            ) -> Self {
5098                tuple.into()
5099            }
5100            #[inline]
5101            fn tokenize(&self) -> Self::Token<'_> {
5102                (
5103                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
5104                        &self.reason,
5105                    ),
5106                )
5107            }
5108            #[inline]
5109            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
5110                <Self::Parameters<
5111                    '_,
5112                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5113                    .map(Self::new)
5114            }
5115        }
5116    };
5117    #[derive(serde::Serialize, serde::Deserialize)]
5118    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5119    /**Custom error with signature `WrongToken()` and selector `0xa0f3feea`.
5120```solidity
5121error WrongToken();
5122```*/
5123    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5124    #[derive(Clone)]
5125    pub struct WrongToken;
5126    #[allow(
5127        non_camel_case_types,
5128        non_snake_case,
5129        clippy::pub_underscore_fields,
5130        clippy::style
5131    )]
5132    const _: () = {
5133        use alloy::sol_types as alloy_sol_types;
5134        #[doc(hidden)]
5135        type UnderlyingSolTuple<'a> = ();
5136        #[doc(hidden)]
5137        type UnderlyingRustTuple<'a> = ();
5138        #[cfg(test)]
5139        #[allow(dead_code, unreachable_patterns)]
5140        fn _type_assertion(
5141            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5142        ) {
5143            match _t {
5144                alloy_sol_types::private::AssertTypeEq::<
5145                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5146                >(_) => {}
5147            }
5148        }
5149        #[automatically_derived]
5150        #[doc(hidden)]
5151        impl ::core::convert::From<WrongToken> for UnderlyingRustTuple<'_> {
5152            fn from(value: WrongToken) -> Self {
5153                ()
5154            }
5155        }
5156        #[automatically_derived]
5157        #[doc(hidden)]
5158        impl ::core::convert::From<UnderlyingRustTuple<'_>> for WrongToken {
5159            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5160                Self
5161            }
5162        }
5163        #[automatically_derived]
5164        impl alloy_sol_types::SolError for WrongToken {
5165            type Parameters<'a> = UnderlyingSolTuple<'a>;
5166            type Token<'a> = <Self::Parameters<
5167                'a,
5168            > as alloy_sol_types::SolType>::Token<'a>;
5169            const SIGNATURE: &'static str = "WrongToken()";
5170            const SELECTOR: [u8; 4] = [160u8, 243u8, 254u8, 234u8];
5171            #[inline]
5172            fn new<'a>(
5173                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5174            ) -> Self {
5175                tuple.into()
5176            }
5177            #[inline]
5178            fn tokenize(&self) -> Self::Token<'_> {
5179                ()
5180            }
5181            #[inline]
5182            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
5183                <Self::Parameters<
5184                    '_,
5185                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5186                    .map(Self::new)
5187            }
5188        }
5189    };
5190    #[derive(serde::Serialize, serde::Deserialize)]
5191    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5192    /**Custom error with signature `ZeroAddress(string)` and selector `0xeac0d389`.
5193```solidity
5194error ZeroAddress(string reason);
5195```*/
5196    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
5197    #[derive(Clone)]
5198    pub struct ZeroAddress {
5199        #[allow(missing_docs)]
5200        pub reason: alloy::sol_types::private::String,
5201    }
5202    #[allow(
5203        non_camel_case_types,
5204        non_snake_case,
5205        clippy::pub_underscore_fields,
5206        clippy::style
5207    )]
5208    const _: () = {
5209        use alloy::sol_types as alloy_sol_types;
5210        #[doc(hidden)]
5211        type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,);
5212        #[doc(hidden)]
5213        type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,);
5214        #[cfg(test)]
5215        #[allow(dead_code, unreachable_patterns)]
5216        fn _type_assertion(
5217            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
5218        ) {
5219            match _t {
5220                alloy_sol_types::private::AssertTypeEq::<
5221                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
5222                >(_) => {}
5223            }
5224        }
5225        #[automatically_derived]
5226        #[doc(hidden)]
5227        impl ::core::convert::From<ZeroAddress> for UnderlyingRustTuple<'_> {
5228            fn from(value: ZeroAddress) -> Self {
5229                (value.reason,)
5230            }
5231        }
5232        #[automatically_derived]
5233        #[doc(hidden)]
5234        impl ::core::convert::From<UnderlyingRustTuple<'_>> for ZeroAddress {
5235            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
5236                Self { reason: tuple.0 }
5237            }
5238        }
5239        #[automatically_derived]
5240        impl alloy_sol_types::SolError for ZeroAddress {
5241            type Parameters<'a> = UnderlyingSolTuple<'a>;
5242            type Token<'a> = <Self::Parameters<
5243                'a,
5244            > as alloy_sol_types::SolType>::Token<'a>;
5245            const SIGNATURE: &'static str = "ZeroAddress(string)";
5246            const SELECTOR: [u8; 4] = [234u8, 192u8, 211u8, 137u8];
5247            #[inline]
5248            fn new<'a>(
5249                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
5250            ) -> Self {
5251                tuple.into()
5252            }
5253            #[inline]
5254            fn tokenize(&self) -> Self::Token<'_> {
5255                (
5256                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
5257                        &self.reason,
5258                    ),
5259                )
5260            }
5261            #[inline]
5262            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
5263                <Self::Parameters<
5264                    '_,
5265                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
5266                    .map(Self::new)
5267            }
5268        }
5269    };
5270    #[derive(serde::Serialize, serde::Deserialize)]
5271    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5272    /**Event with signature `ChannelBalanceDecreased(bytes32,uint96)` and selector `0x22e2a422a8860656a3a33cfa1daf771e76798ce5649747957235025de12e0b24`.
5273```solidity
5274event ChannelBalanceDecreased(bytes32 indexed channelId, Balance newBalance);
5275```*/
5276    #[allow(
5277        non_camel_case_types,
5278        non_snake_case,
5279        clippy::pub_underscore_fields,
5280        clippy::style
5281    )]
5282    #[derive(Clone)]
5283    pub struct ChannelBalanceDecreased {
5284        #[allow(missing_docs)]
5285        pub channelId: alloy::sol_types::private::FixedBytes<32>,
5286        #[allow(missing_docs)]
5287        pub newBalance: <Balance as alloy::sol_types::SolType>::RustType,
5288    }
5289    #[allow(
5290        non_camel_case_types,
5291        non_snake_case,
5292        clippy::pub_underscore_fields,
5293        clippy::style
5294    )]
5295    const _: () = {
5296        use alloy::sol_types as alloy_sol_types;
5297        #[automatically_derived]
5298        impl alloy_sol_types::SolEvent for ChannelBalanceDecreased {
5299            type DataTuple<'a> = (Balance,);
5300            type DataToken<'a> = <Self::DataTuple<
5301                'a,
5302            > as alloy_sol_types::SolType>::Token<'a>;
5303            type TopicList = (
5304                alloy_sol_types::sol_data::FixedBytes<32>,
5305                alloy::sol_types::sol_data::FixedBytes<32>,
5306            );
5307            const SIGNATURE: &'static str = "ChannelBalanceDecreased(bytes32,uint96)";
5308            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
5309                34u8, 226u8, 164u8, 34u8, 168u8, 134u8, 6u8, 86u8, 163u8, 163u8, 60u8,
5310                250u8, 29u8, 175u8, 119u8, 30u8, 118u8, 121u8, 140u8, 229u8, 100u8,
5311                151u8, 71u8, 149u8, 114u8, 53u8, 2u8, 93u8, 225u8, 46u8, 11u8, 36u8,
5312            ]);
5313            const ANONYMOUS: bool = false;
5314            #[allow(unused_variables)]
5315            #[inline]
5316            fn new(
5317                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
5318                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
5319            ) -> Self {
5320                Self {
5321                    channelId: topics.1,
5322                    newBalance: data.0,
5323                }
5324            }
5325            #[inline]
5326            fn check_signature(
5327                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
5328            ) -> alloy_sol_types::Result<()> {
5329                if topics.0 != Self::SIGNATURE_HASH {
5330                    return Err(
5331                        alloy_sol_types::Error::invalid_event_signature_hash(
5332                            Self::SIGNATURE,
5333                            topics.0,
5334                            Self::SIGNATURE_HASH,
5335                        ),
5336                    );
5337                }
5338                Ok(())
5339            }
5340            #[inline]
5341            fn tokenize_body(&self) -> Self::DataToken<'_> {
5342                (<Balance as alloy_sol_types::SolType>::tokenize(&self.newBalance),)
5343            }
5344            #[inline]
5345            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
5346                (Self::SIGNATURE_HASH.into(), self.channelId.clone())
5347            }
5348            #[inline]
5349            fn encode_topics_raw(
5350                &self,
5351                out: &mut [alloy_sol_types::abi::token::WordToken],
5352            ) -> alloy_sol_types::Result<()> {
5353                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
5354                    return Err(alloy_sol_types::Error::Overrun);
5355                }
5356                out[0usize] = alloy_sol_types::abi::token::WordToken(
5357                    Self::SIGNATURE_HASH,
5358                );
5359                out[1usize] = <alloy::sol_types::sol_data::FixedBytes<
5360                    32,
5361                > as alloy_sol_types::EventTopic>::encode_topic(&self.channelId);
5362                Ok(())
5363            }
5364        }
5365        #[automatically_derived]
5366        impl alloy_sol_types::private::IntoLogData for ChannelBalanceDecreased {
5367            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
5368                From::from(self)
5369            }
5370            fn into_log_data(self) -> alloy_sol_types::private::LogData {
5371                From::from(&self)
5372            }
5373        }
5374        #[automatically_derived]
5375        impl From<&ChannelBalanceDecreased> for alloy_sol_types::private::LogData {
5376            #[inline]
5377            fn from(
5378                this: &ChannelBalanceDecreased,
5379            ) -> alloy_sol_types::private::LogData {
5380                alloy_sol_types::SolEvent::encode_log_data(this)
5381            }
5382        }
5383    };
5384    #[derive(serde::Serialize, serde::Deserialize)]
5385    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5386    /**Event with signature `ChannelBalanceIncreased(bytes32,uint96)` and selector `0x5fa17246d3a5d68d42baa94cde33042180b783a399c02bf63ac2076e0f708738`.
5387```solidity
5388event ChannelBalanceIncreased(bytes32 indexed channelId, Balance newBalance);
5389```*/
5390    #[allow(
5391        non_camel_case_types,
5392        non_snake_case,
5393        clippy::pub_underscore_fields,
5394        clippy::style
5395    )]
5396    #[derive(Clone)]
5397    pub struct ChannelBalanceIncreased {
5398        #[allow(missing_docs)]
5399        pub channelId: alloy::sol_types::private::FixedBytes<32>,
5400        #[allow(missing_docs)]
5401        pub newBalance: <Balance as alloy::sol_types::SolType>::RustType,
5402    }
5403    #[allow(
5404        non_camel_case_types,
5405        non_snake_case,
5406        clippy::pub_underscore_fields,
5407        clippy::style
5408    )]
5409    const _: () = {
5410        use alloy::sol_types as alloy_sol_types;
5411        #[automatically_derived]
5412        impl alloy_sol_types::SolEvent for ChannelBalanceIncreased {
5413            type DataTuple<'a> = (Balance,);
5414            type DataToken<'a> = <Self::DataTuple<
5415                'a,
5416            > as alloy_sol_types::SolType>::Token<'a>;
5417            type TopicList = (
5418                alloy_sol_types::sol_data::FixedBytes<32>,
5419                alloy::sol_types::sol_data::FixedBytes<32>,
5420            );
5421            const SIGNATURE: &'static str = "ChannelBalanceIncreased(bytes32,uint96)";
5422            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
5423                95u8, 161u8, 114u8, 70u8, 211u8, 165u8, 214u8, 141u8, 66u8, 186u8, 169u8,
5424                76u8, 222u8, 51u8, 4u8, 33u8, 128u8, 183u8, 131u8, 163u8, 153u8, 192u8,
5425                43u8, 246u8, 58u8, 194u8, 7u8, 110u8, 15u8, 112u8, 135u8, 56u8,
5426            ]);
5427            const ANONYMOUS: bool = false;
5428            #[allow(unused_variables)]
5429            #[inline]
5430            fn new(
5431                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
5432                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
5433            ) -> Self {
5434                Self {
5435                    channelId: topics.1,
5436                    newBalance: data.0,
5437                }
5438            }
5439            #[inline]
5440            fn check_signature(
5441                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
5442            ) -> alloy_sol_types::Result<()> {
5443                if topics.0 != Self::SIGNATURE_HASH {
5444                    return Err(
5445                        alloy_sol_types::Error::invalid_event_signature_hash(
5446                            Self::SIGNATURE,
5447                            topics.0,
5448                            Self::SIGNATURE_HASH,
5449                        ),
5450                    );
5451                }
5452                Ok(())
5453            }
5454            #[inline]
5455            fn tokenize_body(&self) -> Self::DataToken<'_> {
5456                (<Balance as alloy_sol_types::SolType>::tokenize(&self.newBalance),)
5457            }
5458            #[inline]
5459            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
5460                (Self::SIGNATURE_HASH.into(), self.channelId.clone())
5461            }
5462            #[inline]
5463            fn encode_topics_raw(
5464                &self,
5465                out: &mut [alloy_sol_types::abi::token::WordToken],
5466            ) -> alloy_sol_types::Result<()> {
5467                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
5468                    return Err(alloy_sol_types::Error::Overrun);
5469                }
5470                out[0usize] = alloy_sol_types::abi::token::WordToken(
5471                    Self::SIGNATURE_HASH,
5472                );
5473                out[1usize] = <alloy::sol_types::sol_data::FixedBytes<
5474                    32,
5475                > as alloy_sol_types::EventTopic>::encode_topic(&self.channelId);
5476                Ok(())
5477            }
5478        }
5479        #[automatically_derived]
5480        impl alloy_sol_types::private::IntoLogData for ChannelBalanceIncreased {
5481            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
5482                From::from(self)
5483            }
5484            fn into_log_data(self) -> alloy_sol_types::private::LogData {
5485                From::from(&self)
5486            }
5487        }
5488        #[automatically_derived]
5489        impl From<&ChannelBalanceIncreased> for alloy_sol_types::private::LogData {
5490            #[inline]
5491            fn from(
5492                this: &ChannelBalanceIncreased,
5493            ) -> alloy_sol_types::private::LogData {
5494                alloy_sol_types::SolEvent::encode_log_data(this)
5495            }
5496        }
5497    };
5498    #[derive(serde::Serialize, serde::Deserialize)]
5499    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5500    /**Event with signature `ChannelClosed(bytes32)` and selector `0xceeab2eef998c17fe96f30f83fbf3c55fc5047f6e40c55a0cf72d236e9d2ba72`.
5501```solidity
5502event ChannelClosed(bytes32 indexed channelId);
5503```*/
5504    #[allow(
5505        non_camel_case_types,
5506        non_snake_case,
5507        clippy::pub_underscore_fields,
5508        clippy::style
5509    )]
5510    #[derive(Clone)]
5511    pub struct ChannelClosed {
5512        #[allow(missing_docs)]
5513        pub channelId: alloy::sol_types::private::FixedBytes<32>,
5514    }
5515    #[allow(
5516        non_camel_case_types,
5517        non_snake_case,
5518        clippy::pub_underscore_fields,
5519        clippy::style
5520    )]
5521    const _: () = {
5522        use alloy::sol_types as alloy_sol_types;
5523        #[automatically_derived]
5524        impl alloy_sol_types::SolEvent for ChannelClosed {
5525            type DataTuple<'a> = ();
5526            type DataToken<'a> = <Self::DataTuple<
5527                'a,
5528            > as alloy_sol_types::SolType>::Token<'a>;
5529            type TopicList = (
5530                alloy_sol_types::sol_data::FixedBytes<32>,
5531                alloy::sol_types::sol_data::FixedBytes<32>,
5532            );
5533            const SIGNATURE: &'static str = "ChannelClosed(bytes32)";
5534            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
5535                206u8, 234u8, 178u8, 238u8, 249u8, 152u8, 193u8, 127u8, 233u8, 111u8,
5536                48u8, 248u8, 63u8, 191u8, 60u8, 85u8, 252u8, 80u8, 71u8, 246u8, 228u8,
5537                12u8, 85u8, 160u8, 207u8, 114u8, 210u8, 54u8, 233u8, 210u8, 186u8, 114u8,
5538            ]);
5539            const ANONYMOUS: bool = false;
5540            #[allow(unused_variables)]
5541            #[inline]
5542            fn new(
5543                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
5544                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
5545            ) -> Self {
5546                Self { channelId: topics.1 }
5547            }
5548            #[inline]
5549            fn check_signature(
5550                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
5551            ) -> alloy_sol_types::Result<()> {
5552                if topics.0 != Self::SIGNATURE_HASH {
5553                    return Err(
5554                        alloy_sol_types::Error::invalid_event_signature_hash(
5555                            Self::SIGNATURE,
5556                            topics.0,
5557                            Self::SIGNATURE_HASH,
5558                        ),
5559                    );
5560                }
5561                Ok(())
5562            }
5563            #[inline]
5564            fn tokenize_body(&self) -> Self::DataToken<'_> {
5565                ()
5566            }
5567            #[inline]
5568            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
5569                (Self::SIGNATURE_HASH.into(), self.channelId.clone())
5570            }
5571            #[inline]
5572            fn encode_topics_raw(
5573                &self,
5574                out: &mut [alloy_sol_types::abi::token::WordToken],
5575            ) -> alloy_sol_types::Result<()> {
5576                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
5577                    return Err(alloy_sol_types::Error::Overrun);
5578                }
5579                out[0usize] = alloy_sol_types::abi::token::WordToken(
5580                    Self::SIGNATURE_HASH,
5581                );
5582                out[1usize] = <alloy::sol_types::sol_data::FixedBytes<
5583                    32,
5584                > as alloy_sol_types::EventTopic>::encode_topic(&self.channelId);
5585                Ok(())
5586            }
5587        }
5588        #[automatically_derived]
5589        impl alloy_sol_types::private::IntoLogData for ChannelClosed {
5590            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
5591                From::from(self)
5592            }
5593            fn into_log_data(self) -> alloy_sol_types::private::LogData {
5594                From::from(&self)
5595            }
5596        }
5597        #[automatically_derived]
5598        impl From<&ChannelClosed> for alloy_sol_types::private::LogData {
5599            #[inline]
5600            fn from(this: &ChannelClosed) -> alloy_sol_types::private::LogData {
5601                alloy_sol_types::SolEvent::encode_log_data(this)
5602            }
5603        }
5604    };
5605    #[derive(serde::Serialize, serde::Deserialize)]
5606    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5607    /**Event with signature `ChannelOpened(address,address)` and selector `0xdd90f938230335e59dc925c57ecb0e27a28c2d87356e31f00cd5554abd6c1b2d`.
5608```solidity
5609event ChannelOpened(address indexed source, address indexed destination);
5610```*/
5611    #[allow(
5612        non_camel_case_types,
5613        non_snake_case,
5614        clippy::pub_underscore_fields,
5615        clippy::style
5616    )]
5617    #[derive(Clone)]
5618    pub struct ChannelOpened {
5619        #[allow(missing_docs)]
5620        pub source: alloy::sol_types::private::Address,
5621        #[allow(missing_docs)]
5622        pub destination: alloy::sol_types::private::Address,
5623    }
5624    #[allow(
5625        non_camel_case_types,
5626        non_snake_case,
5627        clippy::pub_underscore_fields,
5628        clippy::style
5629    )]
5630    const _: () = {
5631        use alloy::sol_types as alloy_sol_types;
5632        #[automatically_derived]
5633        impl alloy_sol_types::SolEvent for ChannelOpened {
5634            type DataTuple<'a> = ();
5635            type DataToken<'a> = <Self::DataTuple<
5636                'a,
5637            > as alloy_sol_types::SolType>::Token<'a>;
5638            type TopicList = (
5639                alloy_sol_types::sol_data::FixedBytes<32>,
5640                alloy::sol_types::sol_data::Address,
5641                alloy::sol_types::sol_data::Address,
5642            );
5643            const SIGNATURE: &'static str = "ChannelOpened(address,address)";
5644            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
5645                221u8, 144u8, 249u8, 56u8, 35u8, 3u8, 53u8, 229u8, 157u8, 201u8, 37u8,
5646                197u8, 126u8, 203u8, 14u8, 39u8, 162u8, 140u8, 45u8, 135u8, 53u8, 110u8,
5647                49u8, 240u8, 12u8, 213u8, 85u8, 74u8, 189u8, 108u8, 27u8, 45u8,
5648            ]);
5649            const ANONYMOUS: bool = false;
5650            #[allow(unused_variables)]
5651            #[inline]
5652            fn new(
5653                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
5654                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
5655            ) -> Self {
5656                Self {
5657                    source: topics.1,
5658                    destination: topics.2,
5659                }
5660            }
5661            #[inline]
5662            fn check_signature(
5663                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
5664            ) -> alloy_sol_types::Result<()> {
5665                if topics.0 != Self::SIGNATURE_HASH {
5666                    return Err(
5667                        alloy_sol_types::Error::invalid_event_signature_hash(
5668                            Self::SIGNATURE,
5669                            topics.0,
5670                            Self::SIGNATURE_HASH,
5671                        ),
5672                    );
5673                }
5674                Ok(())
5675            }
5676            #[inline]
5677            fn tokenize_body(&self) -> Self::DataToken<'_> {
5678                ()
5679            }
5680            #[inline]
5681            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
5682                (
5683                    Self::SIGNATURE_HASH.into(),
5684                    self.source.clone(),
5685                    self.destination.clone(),
5686                )
5687            }
5688            #[inline]
5689            fn encode_topics_raw(
5690                &self,
5691                out: &mut [alloy_sol_types::abi::token::WordToken],
5692            ) -> alloy_sol_types::Result<()> {
5693                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
5694                    return Err(alloy_sol_types::Error::Overrun);
5695                }
5696                out[0usize] = alloy_sol_types::abi::token::WordToken(
5697                    Self::SIGNATURE_HASH,
5698                );
5699                out[1usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
5700                    &self.source,
5701                );
5702                out[2usize] = <alloy::sol_types::sol_data::Address as alloy_sol_types::EventTopic>::encode_topic(
5703                    &self.destination,
5704                );
5705                Ok(())
5706            }
5707        }
5708        #[automatically_derived]
5709        impl alloy_sol_types::private::IntoLogData for ChannelOpened {
5710            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
5711                From::from(self)
5712            }
5713            fn into_log_data(self) -> alloy_sol_types::private::LogData {
5714                From::from(&self)
5715            }
5716        }
5717        #[automatically_derived]
5718        impl From<&ChannelOpened> for alloy_sol_types::private::LogData {
5719            #[inline]
5720            fn from(this: &ChannelOpened) -> alloy_sol_types::private::LogData {
5721                alloy_sol_types::SolEvent::encode_log_data(this)
5722            }
5723        }
5724    };
5725    #[derive(serde::Serialize, serde::Deserialize)]
5726    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5727    /**Event with signature `DomainSeparatorUpdated(bytes32)` and selector `0x771f5240ae5fd8a7640d3fb82fa70aab2fb1dbf35f2ef464f8509946717664c5`.
5728```solidity
5729event DomainSeparatorUpdated(bytes32 indexed domainSeparator);
5730```*/
5731    #[allow(
5732        non_camel_case_types,
5733        non_snake_case,
5734        clippy::pub_underscore_fields,
5735        clippy::style
5736    )]
5737    #[derive(Clone)]
5738    pub struct DomainSeparatorUpdated {
5739        #[allow(missing_docs)]
5740        pub domainSeparator: alloy::sol_types::private::FixedBytes<32>,
5741    }
5742    #[allow(
5743        non_camel_case_types,
5744        non_snake_case,
5745        clippy::pub_underscore_fields,
5746        clippy::style
5747    )]
5748    const _: () = {
5749        use alloy::sol_types as alloy_sol_types;
5750        #[automatically_derived]
5751        impl alloy_sol_types::SolEvent for DomainSeparatorUpdated {
5752            type DataTuple<'a> = ();
5753            type DataToken<'a> = <Self::DataTuple<
5754                'a,
5755            > as alloy_sol_types::SolType>::Token<'a>;
5756            type TopicList = (
5757                alloy_sol_types::sol_data::FixedBytes<32>,
5758                alloy::sol_types::sol_data::FixedBytes<32>,
5759            );
5760            const SIGNATURE: &'static str = "DomainSeparatorUpdated(bytes32)";
5761            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
5762                119u8, 31u8, 82u8, 64u8, 174u8, 95u8, 216u8, 167u8, 100u8, 13u8, 63u8,
5763                184u8, 47u8, 167u8, 10u8, 171u8, 47u8, 177u8, 219u8, 243u8, 95u8, 46u8,
5764                244u8, 100u8, 248u8, 80u8, 153u8, 70u8, 113u8, 118u8, 100u8, 197u8,
5765            ]);
5766            const ANONYMOUS: bool = false;
5767            #[allow(unused_variables)]
5768            #[inline]
5769            fn new(
5770                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
5771                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
5772            ) -> Self {
5773                Self { domainSeparator: topics.1 }
5774            }
5775            #[inline]
5776            fn check_signature(
5777                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
5778            ) -> alloy_sol_types::Result<()> {
5779                if topics.0 != Self::SIGNATURE_HASH {
5780                    return Err(
5781                        alloy_sol_types::Error::invalid_event_signature_hash(
5782                            Self::SIGNATURE,
5783                            topics.0,
5784                            Self::SIGNATURE_HASH,
5785                        ),
5786                    );
5787                }
5788                Ok(())
5789            }
5790            #[inline]
5791            fn tokenize_body(&self) -> Self::DataToken<'_> {
5792                ()
5793            }
5794            #[inline]
5795            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
5796                (Self::SIGNATURE_HASH.into(), self.domainSeparator.clone())
5797            }
5798            #[inline]
5799            fn encode_topics_raw(
5800                &self,
5801                out: &mut [alloy_sol_types::abi::token::WordToken],
5802            ) -> alloy_sol_types::Result<()> {
5803                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
5804                    return Err(alloy_sol_types::Error::Overrun);
5805                }
5806                out[0usize] = alloy_sol_types::abi::token::WordToken(
5807                    Self::SIGNATURE_HASH,
5808                );
5809                out[1usize] = <alloy::sol_types::sol_data::FixedBytes<
5810                    32,
5811                > as alloy_sol_types::EventTopic>::encode_topic(&self.domainSeparator);
5812                Ok(())
5813            }
5814        }
5815        #[automatically_derived]
5816        impl alloy_sol_types::private::IntoLogData for DomainSeparatorUpdated {
5817            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
5818                From::from(self)
5819            }
5820            fn into_log_data(self) -> alloy_sol_types::private::LogData {
5821                From::from(&self)
5822            }
5823        }
5824        #[automatically_derived]
5825        impl From<&DomainSeparatorUpdated> for alloy_sol_types::private::LogData {
5826            #[inline]
5827            fn from(this: &DomainSeparatorUpdated) -> alloy_sol_types::private::LogData {
5828                alloy_sol_types::SolEvent::encode_log_data(this)
5829            }
5830        }
5831    };
5832    #[derive(serde::Serialize, serde::Deserialize)]
5833    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5834    /**Event with signature `LedgerDomainSeparatorUpdated(bytes32)` and selector `0xa43fad83920fd09445855e854e73c9c532e17402c9ceb09993a2392843a5bdb9`.
5835```solidity
5836event LedgerDomainSeparatorUpdated(bytes32 indexed ledgerDomainSeparator);
5837```*/
5838    #[allow(
5839        non_camel_case_types,
5840        non_snake_case,
5841        clippy::pub_underscore_fields,
5842        clippy::style
5843    )]
5844    #[derive(Clone)]
5845    pub struct LedgerDomainSeparatorUpdated {
5846        #[allow(missing_docs)]
5847        pub ledgerDomainSeparator: alloy::sol_types::private::FixedBytes<32>,
5848    }
5849    #[allow(
5850        non_camel_case_types,
5851        non_snake_case,
5852        clippy::pub_underscore_fields,
5853        clippy::style
5854    )]
5855    const _: () = {
5856        use alloy::sol_types as alloy_sol_types;
5857        #[automatically_derived]
5858        impl alloy_sol_types::SolEvent for LedgerDomainSeparatorUpdated {
5859            type DataTuple<'a> = ();
5860            type DataToken<'a> = <Self::DataTuple<
5861                'a,
5862            > as alloy_sol_types::SolType>::Token<'a>;
5863            type TopicList = (
5864                alloy_sol_types::sol_data::FixedBytes<32>,
5865                alloy::sol_types::sol_data::FixedBytes<32>,
5866            );
5867            const SIGNATURE: &'static str = "LedgerDomainSeparatorUpdated(bytes32)";
5868            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
5869                164u8, 63u8, 173u8, 131u8, 146u8, 15u8, 208u8, 148u8, 69u8, 133u8, 94u8,
5870                133u8, 78u8, 115u8, 201u8, 197u8, 50u8, 225u8, 116u8, 2u8, 201u8, 206u8,
5871                176u8, 153u8, 147u8, 162u8, 57u8, 40u8, 67u8, 165u8, 189u8, 185u8,
5872            ]);
5873            const ANONYMOUS: bool = false;
5874            #[allow(unused_variables)]
5875            #[inline]
5876            fn new(
5877                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
5878                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
5879            ) -> Self {
5880                Self {
5881                    ledgerDomainSeparator: topics.1,
5882                }
5883            }
5884            #[inline]
5885            fn check_signature(
5886                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
5887            ) -> alloy_sol_types::Result<()> {
5888                if topics.0 != Self::SIGNATURE_HASH {
5889                    return Err(
5890                        alloy_sol_types::Error::invalid_event_signature_hash(
5891                            Self::SIGNATURE,
5892                            topics.0,
5893                            Self::SIGNATURE_HASH,
5894                        ),
5895                    );
5896                }
5897                Ok(())
5898            }
5899            #[inline]
5900            fn tokenize_body(&self) -> Self::DataToken<'_> {
5901                ()
5902            }
5903            #[inline]
5904            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
5905                (Self::SIGNATURE_HASH.into(), self.ledgerDomainSeparator.clone())
5906            }
5907            #[inline]
5908            fn encode_topics_raw(
5909                &self,
5910                out: &mut [alloy_sol_types::abi::token::WordToken],
5911            ) -> alloy_sol_types::Result<()> {
5912                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
5913                    return Err(alloy_sol_types::Error::Overrun);
5914                }
5915                out[0usize] = alloy_sol_types::abi::token::WordToken(
5916                    Self::SIGNATURE_HASH,
5917                );
5918                out[1usize] = <alloy::sol_types::sol_data::FixedBytes<
5919                    32,
5920                > as alloy_sol_types::EventTopic>::encode_topic(
5921                    &self.ledgerDomainSeparator,
5922                );
5923                Ok(())
5924            }
5925        }
5926        #[automatically_derived]
5927        impl alloy_sol_types::private::IntoLogData for LedgerDomainSeparatorUpdated {
5928            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
5929                From::from(self)
5930            }
5931            fn into_log_data(self) -> alloy_sol_types::private::LogData {
5932                From::from(&self)
5933            }
5934        }
5935        #[automatically_derived]
5936        impl From<&LedgerDomainSeparatorUpdated> for alloy_sol_types::private::LogData {
5937            #[inline]
5938            fn from(
5939                this: &LedgerDomainSeparatorUpdated,
5940            ) -> alloy_sol_types::private::LogData {
5941                alloy_sol_types::SolEvent::encode_log_data(this)
5942            }
5943        }
5944    };
5945    #[derive(serde::Serialize, serde::Deserialize)]
5946    #[derive(Default, Debug, PartialEq, Eq, Hash)]
5947    /**Event with signature `OutgoingChannelClosureInitiated(bytes32,uint32)` and selector `0x07b5c950597fc3bed92e2ad37fa84f701655acb372982e486f5fad3607f04a5c`.
5948```solidity
5949event OutgoingChannelClosureInitiated(bytes32 indexed channelId, Timestamp closureTime);
5950```*/
5951    #[allow(
5952        non_camel_case_types,
5953        non_snake_case,
5954        clippy::pub_underscore_fields,
5955        clippy::style
5956    )]
5957    #[derive(Clone)]
5958    pub struct OutgoingChannelClosureInitiated {
5959        #[allow(missing_docs)]
5960        pub channelId: alloy::sol_types::private::FixedBytes<32>,
5961        #[allow(missing_docs)]
5962        pub closureTime: <Timestamp as alloy::sol_types::SolType>::RustType,
5963    }
5964    #[allow(
5965        non_camel_case_types,
5966        non_snake_case,
5967        clippy::pub_underscore_fields,
5968        clippy::style
5969    )]
5970    const _: () = {
5971        use alloy::sol_types as alloy_sol_types;
5972        #[automatically_derived]
5973        impl alloy_sol_types::SolEvent for OutgoingChannelClosureInitiated {
5974            type DataTuple<'a> = (Timestamp,);
5975            type DataToken<'a> = <Self::DataTuple<
5976                'a,
5977            > as alloy_sol_types::SolType>::Token<'a>;
5978            type TopicList = (
5979                alloy_sol_types::sol_data::FixedBytes<32>,
5980                alloy::sol_types::sol_data::FixedBytes<32>,
5981            );
5982            const SIGNATURE: &'static str = "OutgoingChannelClosureInitiated(bytes32,uint32)";
5983            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
5984                7u8, 181u8, 201u8, 80u8, 89u8, 127u8, 195u8, 190u8, 217u8, 46u8, 42u8,
5985                211u8, 127u8, 168u8, 79u8, 112u8, 22u8, 85u8, 172u8, 179u8, 114u8, 152u8,
5986                46u8, 72u8, 111u8, 95u8, 173u8, 54u8, 7u8, 240u8, 74u8, 92u8,
5987            ]);
5988            const ANONYMOUS: bool = false;
5989            #[allow(unused_variables)]
5990            #[inline]
5991            fn new(
5992                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
5993                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
5994            ) -> Self {
5995                Self {
5996                    channelId: topics.1,
5997                    closureTime: data.0,
5998                }
5999            }
6000            #[inline]
6001            fn check_signature(
6002                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
6003            ) -> alloy_sol_types::Result<()> {
6004                if topics.0 != Self::SIGNATURE_HASH {
6005                    return Err(
6006                        alloy_sol_types::Error::invalid_event_signature_hash(
6007                            Self::SIGNATURE,
6008                            topics.0,
6009                            Self::SIGNATURE_HASH,
6010                        ),
6011                    );
6012                }
6013                Ok(())
6014            }
6015            #[inline]
6016            fn tokenize_body(&self) -> Self::DataToken<'_> {
6017                (<Timestamp as alloy_sol_types::SolType>::tokenize(&self.closureTime),)
6018            }
6019            #[inline]
6020            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
6021                (Self::SIGNATURE_HASH.into(), self.channelId.clone())
6022            }
6023            #[inline]
6024            fn encode_topics_raw(
6025                &self,
6026                out: &mut [alloy_sol_types::abi::token::WordToken],
6027            ) -> alloy_sol_types::Result<()> {
6028                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
6029                    return Err(alloy_sol_types::Error::Overrun);
6030                }
6031                out[0usize] = alloy_sol_types::abi::token::WordToken(
6032                    Self::SIGNATURE_HASH,
6033                );
6034                out[1usize] = <alloy::sol_types::sol_data::FixedBytes<
6035                    32,
6036                > as alloy_sol_types::EventTopic>::encode_topic(&self.channelId);
6037                Ok(())
6038            }
6039        }
6040        #[automatically_derived]
6041        impl alloy_sol_types::private::IntoLogData for OutgoingChannelClosureInitiated {
6042            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
6043                From::from(self)
6044            }
6045            fn into_log_data(self) -> alloy_sol_types::private::LogData {
6046                From::from(&self)
6047            }
6048        }
6049        #[automatically_derived]
6050        impl From<&OutgoingChannelClosureInitiated>
6051        for alloy_sol_types::private::LogData {
6052            #[inline]
6053            fn from(
6054                this: &OutgoingChannelClosureInitiated,
6055            ) -> alloy_sol_types::private::LogData {
6056                alloy_sol_types::SolEvent::encode_log_data(this)
6057            }
6058        }
6059    };
6060    #[derive(serde::Serialize, serde::Deserialize)]
6061    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6062    /**Event with signature `TicketRedeemed(bytes32,uint48)` and selector `0x7165e2ebc7ce35cc98cb7666f9945b3617f3f36326b76d18937ba5fecf18739a`.
6063```solidity
6064event TicketRedeemed(bytes32 indexed channelId, TicketIndex newTicketIndex);
6065```*/
6066    #[allow(
6067        non_camel_case_types,
6068        non_snake_case,
6069        clippy::pub_underscore_fields,
6070        clippy::style
6071    )]
6072    #[derive(Clone)]
6073    pub struct TicketRedeemed {
6074        #[allow(missing_docs)]
6075        pub channelId: alloy::sol_types::private::FixedBytes<32>,
6076        #[allow(missing_docs)]
6077        pub newTicketIndex: <TicketIndex as alloy::sol_types::SolType>::RustType,
6078    }
6079    #[allow(
6080        non_camel_case_types,
6081        non_snake_case,
6082        clippy::pub_underscore_fields,
6083        clippy::style
6084    )]
6085    const _: () = {
6086        use alloy::sol_types as alloy_sol_types;
6087        #[automatically_derived]
6088        impl alloy_sol_types::SolEvent for TicketRedeemed {
6089            type DataTuple<'a> = (TicketIndex,);
6090            type DataToken<'a> = <Self::DataTuple<
6091                'a,
6092            > as alloy_sol_types::SolType>::Token<'a>;
6093            type TopicList = (
6094                alloy_sol_types::sol_data::FixedBytes<32>,
6095                alloy::sol_types::sol_data::FixedBytes<32>,
6096            );
6097            const SIGNATURE: &'static str = "TicketRedeemed(bytes32,uint48)";
6098            const SIGNATURE_HASH: alloy_sol_types::private::B256 = alloy_sol_types::private::B256::new([
6099                113u8, 101u8, 226u8, 235u8, 199u8, 206u8, 53u8, 204u8, 152u8, 203u8,
6100                118u8, 102u8, 249u8, 148u8, 91u8, 54u8, 23u8, 243u8, 243u8, 99u8, 38u8,
6101                183u8, 109u8, 24u8, 147u8, 123u8, 165u8, 254u8, 207u8, 24u8, 115u8, 154u8,
6102            ]);
6103            const ANONYMOUS: bool = false;
6104            #[allow(unused_variables)]
6105            #[inline]
6106            fn new(
6107                topics: <Self::TopicList as alloy_sol_types::SolType>::RustType,
6108                data: <Self::DataTuple<'_> as alloy_sol_types::SolType>::RustType,
6109            ) -> Self {
6110                Self {
6111                    channelId: topics.1,
6112                    newTicketIndex: data.0,
6113                }
6114            }
6115            #[inline]
6116            fn check_signature(
6117                topics: &<Self::TopicList as alloy_sol_types::SolType>::RustType,
6118            ) -> alloy_sol_types::Result<()> {
6119                if topics.0 != Self::SIGNATURE_HASH {
6120                    return Err(
6121                        alloy_sol_types::Error::invalid_event_signature_hash(
6122                            Self::SIGNATURE,
6123                            topics.0,
6124                            Self::SIGNATURE_HASH,
6125                        ),
6126                    );
6127                }
6128                Ok(())
6129            }
6130            #[inline]
6131            fn tokenize_body(&self) -> Self::DataToken<'_> {
6132                (
6133                    <TicketIndex as alloy_sol_types::SolType>::tokenize(
6134                        &self.newTicketIndex,
6135                    ),
6136                )
6137            }
6138            #[inline]
6139            fn topics(&self) -> <Self::TopicList as alloy_sol_types::SolType>::RustType {
6140                (Self::SIGNATURE_HASH.into(), self.channelId.clone())
6141            }
6142            #[inline]
6143            fn encode_topics_raw(
6144                &self,
6145                out: &mut [alloy_sol_types::abi::token::WordToken],
6146            ) -> alloy_sol_types::Result<()> {
6147                if out.len() < <Self::TopicList as alloy_sol_types::TopicList>::COUNT {
6148                    return Err(alloy_sol_types::Error::Overrun);
6149                }
6150                out[0usize] = alloy_sol_types::abi::token::WordToken(
6151                    Self::SIGNATURE_HASH,
6152                );
6153                out[1usize] = <alloy::sol_types::sol_data::FixedBytes<
6154                    32,
6155                > as alloy_sol_types::EventTopic>::encode_topic(&self.channelId);
6156                Ok(())
6157            }
6158        }
6159        #[automatically_derived]
6160        impl alloy_sol_types::private::IntoLogData for TicketRedeemed {
6161            fn to_log_data(&self) -> alloy_sol_types::private::LogData {
6162                From::from(self)
6163            }
6164            fn into_log_data(self) -> alloy_sol_types::private::LogData {
6165                From::from(&self)
6166            }
6167        }
6168        #[automatically_derived]
6169        impl From<&TicketRedeemed> for alloy_sol_types::private::LogData {
6170            #[inline]
6171            fn from(this: &TicketRedeemed) -> alloy_sol_types::private::LogData {
6172                alloy_sol_types::SolEvent::encode_log_data(this)
6173            }
6174        }
6175    };
6176    /**Constructor`.
6177```solidity
6178constructor(address _token, Timestamp _noticePeriodChannelClosure, address _safeRegistry);
6179```*/
6180    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6181    #[derive(Clone)]
6182    pub struct constructorCall {
6183        #[allow(missing_docs)]
6184        pub _token: alloy::sol_types::private::Address,
6185        #[allow(missing_docs)]
6186        pub _noticePeriodChannelClosure: <Timestamp as alloy::sol_types::SolType>::RustType,
6187        #[allow(missing_docs)]
6188        pub _safeRegistry: alloy::sol_types::private::Address,
6189    }
6190    const _: () = {
6191        use alloy::sol_types as alloy_sol_types;
6192        {
6193            #[doc(hidden)]
6194            type UnderlyingSolTuple<'a> = (
6195                alloy::sol_types::sol_data::Address,
6196                Timestamp,
6197                alloy::sol_types::sol_data::Address,
6198            );
6199            #[doc(hidden)]
6200            type UnderlyingRustTuple<'a> = (
6201                alloy::sol_types::private::Address,
6202                <Timestamp as alloy::sol_types::SolType>::RustType,
6203                alloy::sol_types::private::Address,
6204            );
6205            #[cfg(test)]
6206            #[allow(dead_code, unreachable_patterns)]
6207            fn _type_assertion(
6208                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6209            ) {
6210                match _t {
6211                    alloy_sol_types::private::AssertTypeEq::<
6212                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6213                    >(_) => {}
6214                }
6215            }
6216            #[automatically_derived]
6217            #[doc(hidden)]
6218            impl ::core::convert::From<constructorCall> for UnderlyingRustTuple<'_> {
6219                fn from(value: constructorCall) -> Self {
6220                    (
6221                        value._token,
6222                        value._noticePeriodChannelClosure,
6223                        value._safeRegistry,
6224                    )
6225                }
6226            }
6227            #[automatically_derived]
6228            #[doc(hidden)]
6229            impl ::core::convert::From<UnderlyingRustTuple<'_>> for constructorCall {
6230                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6231                    Self {
6232                        _token: tuple.0,
6233                        _noticePeriodChannelClosure: tuple.1,
6234                        _safeRegistry: tuple.2,
6235                    }
6236                }
6237            }
6238        }
6239        #[automatically_derived]
6240        impl alloy_sol_types::SolConstructor for constructorCall {
6241            type Parameters<'a> = (
6242                alloy::sol_types::sol_data::Address,
6243                Timestamp,
6244                alloy::sol_types::sol_data::Address,
6245            );
6246            type Token<'a> = <Self::Parameters<
6247                'a,
6248            > as alloy_sol_types::SolType>::Token<'a>;
6249            #[inline]
6250            fn new<'a>(
6251                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6252            ) -> Self {
6253                tuple.into()
6254            }
6255            #[inline]
6256            fn tokenize(&self) -> Self::Token<'_> {
6257                (
6258                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
6259                        &self._token,
6260                    ),
6261                    <Timestamp as alloy_sol_types::SolType>::tokenize(
6262                        &self._noticePeriodChannelClosure,
6263                    ),
6264                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
6265                        &self._safeRegistry,
6266                    ),
6267                )
6268            }
6269        }
6270    };
6271    #[derive(serde::Serialize, serde::Deserialize)]
6272    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6273    /**Function with signature `ERC777_HOOK_FUND_CHANNEL_MULTI_SIZE()` and selector `0x78d8016d`.
6274```solidity
6275function ERC777_HOOK_FUND_CHANNEL_MULTI_SIZE() external view returns (uint256);
6276```*/
6277    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6278    #[derive(Clone)]
6279    pub struct ERC777_HOOK_FUND_CHANNEL_MULTI_SIZECall;
6280    #[derive(serde::Serialize, serde::Deserialize)]
6281    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6282    ///Container type for the return parameters of the [`ERC777_HOOK_FUND_CHANNEL_MULTI_SIZE()`](ERC777_HOOK_FUND_CHANNEL_MULTI_SIZECall) function.
6283    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6284    #[derive(Clone)]
6285    pub struct ERC777_HOOK_FUND_CHANNEL_MULTI_SIZEReturn {
6286        #[allow(missing_docs)]
6287        pub _0: alloy::sol_types::private::primitives::aliases::U256,
6288    }
6289    #[allow(
6290        non_camel_case_types,
6291        non_snake_case,
6292        clippy::pub_underscore_fields,
6293        clippy::style
6294    )]
6295    const _: () = {
6296        use alloy::sol_types as alloy_sol_types;
6297        {
6298            #[doc(hidden)]
6299            type UnderlyingSolTuple<'a> = ();
6300            #[doc(hidden)]
6301            type UnderlyingRustTuple<'a> = ();
6302            #[cfg(test)]
6303            #[allow(dead_code, unreachable_patterns)]
6304            fn _type_assertion(
6305                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6306            ) {
6307                match _t {
6308                    alloy_sol_types::private::AssertTypeEq::<
6309                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6310                    >(_) => {}
6311                }
6312            }
6313            #[automatically_derived]
6314            #[doc(hidden)]
6315            impl ::core::convert::From<ERC777_HOOK_FUND_CHANNEL_MULTI_SIZECall>
6316            for UnderlyingRustTuple<'_> {
6317                fn from(value: ERC777_HOOK_FUND_CHANNEL_MULTI_SIZECall) -> Self {
6318                    ()
6319                }
6320            }
6321            #[automatically_derived]
6322            #[doc(hidden)]
6323            impl ::core::convert::From<UnderlyingRustTuple<'_>>
6324            for ERC777_HOOK_FUND_CHANNEL_MULTI_SIZECall {
6325                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6326                    Self
6327                }
6328            }
6329        }
6330        {
6331            #[doc(hidden)]
6332            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
6333            #[doc(hidden)]
6334            type UnderlyingRustTuple<'a> = (
6335                alloy::sol_types::private::primitives::aliases::U256,
6336            );
6337            #[cfg(test)]
6338            #[allow(dead_code, unreachable_patterns)]
6339            fn _type_assertion(
6340                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6341            ) {
6342                match _t {
6343                    alloy_sol_types::private::AssertTypeEq::<
6344                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6345                    >(_) => {}
6346                }
6347            }
6348            #[automatically_derived]
6349            #[doc(hidden)]
6350            impl ::core::convert::From<ERC777_HOOK_FUND_CHANNEL_MULTI_SIZEReturn>
6351            for UnderlyingRustTuple<'_> {
6352                fn from(value: ERC777_HOOK_FUND_CHANNEL_MULTI_SIZEReturn) -> Self {
6353                    (value._0,)
6354                }
6355            }
6356            #[automatically_derived]
6357            #[doc(hidden)]
6358            impl ::core::convert::From<UnderlyingRustTuple<'_>>
6359            for ERC777_HOOK_FUND_CHANNEL_MULTI_SIZEReturn {
6360                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6361                    Self { _0: tuple.0 }
6362                }
6363            }
6364        }
6365        #[automatically_derived]
6366        impl alloy_sol_types::SolCall for ERC777_HOOK_FUND_CHANNEL_MULTI_SIZECall {
6367            type Parameters<'a> = ();
6368            type Token<'a> = <Self::Parameters<
6369                'a,
6370            > as alloy_sol_types::SolType>::Token<'a>;
6371            type Return = alloy::sol_types::private::primitives::aliases::U256;
6372            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
6373            type ReturnToken<'a> = <Self::ReturnTuple<
6374                'a,
6375            > as alloy_sol_types::SolType>::Token<'a>;
6376            const SIGNATURE: &'static str = "ERC777_HOOK_FUND_CHANNEL_MULTI_SIZE()";
6377            const SELECTOR: [u8; 4] = [120u8, 216u8, 1u8, 109u8];
6378            #[inline]
6379            fn new<'a>(
6380                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6381            ) -> Self {
6382                tuple.into()
6383            }
6384            #[inline]
6385            fn tokenize(&self) -> Self::Token<'_> {
6386                ()
6387            }
6388            #[inline]
6389            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6390                (
6391                    <alloy::sol_types::sol_data::Uint<
6392                        256,
6393                    > as alloy_sol_types::SolType>::tokenize(ret),
6394                )
6395            }
6396            #[inline]
6397            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6398                <Self::ReturnTuple<
6399                    '_,
6400                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6401                    .map(|r| {
6402                        let r: ERC777_HOOK_FUND_CHANNEL_MULTI_SIZEReturn = r.into();
6403                        r._0
6404                    })
6405            }
6406            #[inline]
6407            fn abi_decode_returns_validate(
6408                data: &[u8],
6409            ) -> alloy_sol_types::Result<Self::Return> {
6410                <Self::ReturnTuple<
6411                    '_,
6412                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6413                    .map(|r| {
6414                        let r: ERC777_HOOK_FUND_CHANNEL_MULTI_SIZEReturn = r.into();
6415                        r._0
6416                    })
6417            }
6418        }
6419    };
6420    #[derive(serde::Serialize, serde::Deserialize)]
6421    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6422    /**Function with signature `ERC777_HOOK_FUND_CHANNEL_SIZE()` and selector `0x44dae6f8`.
6423```solidity
6424function ERC777_HOOK_FUND_CHANNEL_SIZE() external view returns (uint256);
6425```*/
6426    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6427    #[derive(Clone)]
6428    pub struct ERC777_HOOK_FUND_CHANNEL_SIZECall;
6429    #[derive(serde::Serialize, serde::Deserialize)]
6430    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6431    ///Container type for the return parameters of the [`ERC777_HOOK_FUND_CHANNEL_SIZE()`](ERC777_HOOK_FUND_CHANNEL_SIZECall) function.
6432    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6433    #[derive(Clone)]
6434    pub struct ERC777_HOOK_FUND_CHANNEL_SIZEReturn {
6435        #[allow(missing_docs)]
6436        pub _0: alloy::sol_types::private::primitives::aliases::U256,
6437    }
6438    #[allow(
6439        non_camel_case_types,
6440        non_snake_case,
6441        clippy::pub_underscore_fields,
6442        clippy::style
6443    )]
6444    const _: () = {
6445        use alloy::sol_types as alloy_sol_types;
6446        {
6447            #[doc(hidden)]
6448            type UnderlyingSolTuple<'a> = ();
6449            #[doc(hidden)]
6450            type UnderlyingRustTuple<'a> = ();
6451            #[cfg(test)]
6452            #[allow(dead_code, unreachable_patterns)]
6453            fn _type_assertion(
6454                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6455            ) {
6456                match _t {
6457                    alloy_sol_types::private::AssertTypeEq::<
6458                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6459                    >(_) => {}
6460                }
6461            }
6462            #[automatically_derived]
6463            #[doc(hidden)]
6464            impl ::core::convert::From<ERC777_HOOK_FUND_CHANNEL_SIZECall>
6465            for UnderlyingRustTuple<'_> {
6466                fn from(value: ERC777_HOOK_FUND_CHANNEL_SIZECall) -> Self {
6467                    ()
6468                }
6469            }
6470            #[automatically_derived]
6471            #[doc(hidden)]
6472            impl ::core::convert::From<UnderlyingRustTuple<'_>>
6473            for ERC777_HOOK_FUND_CHANNEL_SIZECall {
6474                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6475                    Self
6476                }
6477            }
6478        }
6479        {
6480            #[doc(hidden)]
6481            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
6482            #[doc(hidden)]
6483            type UnderlyingRustTuple<'a> = (
6484                alloy::sol_types::private::primitives::aliases::U256,
6485            );
6486            #[cfg(test)]
6487            #[allow(dead_code, unreachable_patterns)]
6488            fn _type_assertion(
6489                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6490            ) {
6491                match _t {
6492                    alloy_sol_types::private::AssertTypeEq::<
6493                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6494                    >(_) => {}
6495                }
6496            }
6497            #[automatically_derived]
6498            #[doc(hidden)]
6499            impl ::core::convert::From<ERC777_HOOK_FUND_CHANNEL_SIZEReturn>
6500            for UnderlyingRustTuple<'_> {
6501                fn from(value: ERC777_HOOK_FUND_CHANNEL_SIZEReturn) -> Self {
6502                    (value._0,)
6503                }
6504            }
6505            #[automatically_derived]
6506            #[doc(hidden)]
6507            impl ::core::convert::From<UnderlyingRustTuple<'_>>
6508            for ERC777_HOOK_FUND_CHANNEL_SIZEReturn {
6509                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6510                    Self { _0: tuple.0 }
6511                }
6512            }
6513        }
6514        #[automatically_derived]
6515        impl alloy_sol_types::SolCall for ERC777_HOOK_FUND_CHANNEL_SIZECall {
6516            type Parameters<'a> = ();
6517            type Token<'a> = <Self::Parameters<
6518                'a,
6519            > as alloy_sol_types::SolType>::Token<'a>;
6520            type Return = alloy::sol_types::private::primitives::aliases::U256;
6521            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Uint<256>,);
6522            type ReturnToken<'a> = <Self::ReturnTuple<
6523                'a,
6524            > as alloy_sol_types::SolType>::Token<'a>;
6525            const SIGNATURE: &'static str = "ERC777_HOOK_FUND_CHANNEL_SIZE()";
6526            const SELECTOR: [u8; 4] = [68u8, 218u8, 230u8, 248u8];
6527            #[inline]
6528            fn new<'a>(
6529                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6530            ) -> Self {
6531                tuple.into()
6532            }
6533            #[inline]
6534            fn tokenize(&self) -> Self::Token<'_> {
6535                ()
6536            }
6537            #[inline]
6538            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6539                (
6540                    <alloy::sol_types::sol_data::Uint<
6541                        256,
6542                    > as alloy_sol_types::SolType>::tokenize(ret),
6543                )
6544            }
6545            #[inline]
6546            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6547                <Self::ReturnTuple<
6548                    '_,
6549                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6550                    .map(|r| {
6551                        let r: ERC777_HOOK_FUND_CHANNEL_SIZEReturn = r.into();
6552                        r._0
6553                    })
6554            }
6555            #[inline]
6556            fn abi_decode_returns_validate(
6557                data: &[u8],
6558            ) -> alloy_sol_types::Result<Self::Return> {
6559                <Self::ReturnTuple<
6560                    '_,
6561                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6562                    .map(|r| {
6563                        let r: ERC777_HOOK_FUND_CHANNEL_SIZEReturn = r.into();
6564                        r._0
6565                    })
6566            }
6567        }
6568    };
6569    #[derive(serde::Serialize, serde::Deserialize)]
6570    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6571    /**Function with signature `LEDGER_VERSION()` and selector `0xddad1902`.
6572```solidity
6573function LEDGER_VERSION() external view returns (string memory);
6574```*/
6575    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6576    #[derive(Clone)]
6577    pub struct LEDGER_VERSIONCall;
6578    #[derive(serde::Serialize, serde::Deserialize)]
6579    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6580    ///Container type for the return parameters of the [`LEDGER_VERSION()`](LEDGER_VERSIONCall) function.
6581    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6582    #[derive(Clone)]
6583    pub struct LEDGER_VERSIONReturn {
6584        #[allow(missing_docs)]
6585        pub _0: alloy::sol_types::private::String,
6586    }
6587    #[allow(
6588        non_camel_case_types,
6589        non_snake_case,
6590        clippy::pub_underscore_fields,
6591        clippy::style
6592    )]
6593    const _: () = {
6594        use alloy::sol_types as alloy_sol_types;
6595        {
6596            #[doc(hidden)]
6597            type UnderlyingSolTuple<'a> = ();
6598            #[doc(hidden)]
6599            type UnderlyingRustTuple<'a> = ();
6600            #[cfg(test)]
6601            #[allow(dead_code, unreachable_patterns)]
6602            fn _type_assertion(
6603                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6604            ) {
6605                match _t {
6606                    alloy_sol_types::private::AssertTypeEq::<
6607                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6608                    >(_) => {}
6609                }
6610            }
6611            #[automatically_derived]
6612            #[doc(hidden)]
6613            impl ::core::convert::From<LEDGER_VERSIONCall> for UnderlyingRustTuple<'_> {
6614                fn from(value: LEDGER_VERSIONCall) -> Self {
6615                    ()
6616                }
6617            }
6618            #[automatically_derived]
6619            #[doc(hidden)]
6620            impl ::core::convert::From<UnderlyingRustTuple<'_>> for LEDGER_VERSIONCall {
6621                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6622                    Self
6623                }
6624            }
6625        }
6626        {
6627            #[doc(hidden)]
6628            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,);
6629            #[doc(hidden)]
6630            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,);
6631            #[cfg(test)]
6632            #[allow(dead_code, unreachable_patterns)]
6633            fn _type_assertion(
6634                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6635            ) {
6636                match _t {
6637                    alloy_sol_types::private::AssertTypeEq::<
6638                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6639                    >(_) => {}
6640                }
6641            }
6642            #[automatically_derived]
6643            #[doc(hidden)]
6644            impl ::core::convert::From<LEDGER_VERSIONReturn>
6645            for UnderlyingRustTuple<'_> {
6646                fn from(value: LEDGER_VERSIONReturn) -> Self {
6647                    (value._0,)
6648                }
6649            }
6650            #[automatically_derived]
6651            #[doc(hidden)]
6652            impl ::core::convert::From<UnderlyingRustTuple<'_>>
6653            for LEDGER_VERSIONReturn {
6654                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6655                    Self { _0: tuple.0 }
6656                }
6657            }
6658        }
6659        #[automatically_derived]
6660        impl alloy_sol_types::SolCall for LEDGER_VERSIONCall {
6661            type Parameters<'a> = ();
6662            type Token<'a> = <Self::Parameters<
6663                'a,
6664            > as alloy_sol_types::SolType>::Token<'a>;
6665            type Return = alloy::sol_types::private::String;
6666            type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,);
6667            type ReturnToken<'a> = <Self::ReturnTuple<
6668                'a,
6669            > as alloy_sol_types::SolType>::Token<'a>;
6670            const SIGNATURE: &'static str = "LEDGER_VERSION()";
6671            const SELECTOR: [u8; 4] = [221u8, 173u8, 25u8, 2u8];
6672            #[inline]
6673            fn new<'a>(
6674                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6675            ) -> Self {
6676                tuple.into()
6677            }
6678            #[inline]
6679            fn tokenize(&self) -> Self::Token<'_> {
6680                ()
6681            }
6682            #[inline]
6683            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6684                (
6685                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
6686                        ret,
6687                    ),
6688                )
6689            }
6690            #[inline]
6691            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6692                <Self::ReturnTuple<
6693                    '_,
6694                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6695                    .map(|r| {
6696                        let r: LEDGER_VERSIONReturn = r.into();
6697                        r._0
6698                    })
6699            }
6700            #[inline]
6701            fn abi_decode_returns_validate(
6702                data: &[u8],
6703            ) -> alloy_sol_types::Result<Self::Return> {
6704                <Self::ReturnTuple<
6705                    '_,
6706                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6707                    .map(|r| {
6708                        let r: LEDGER_VERSIONReturn = r.into();
6709                        r._0
6710                    })
6711            }
6712        }
6713    };
6714    #[derive(serde::Serialize, serde::Deserialize)]
6715    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6716    /**Function with signature `MAX_USED_BALANCE()` and selector `0x5d2f07c5`.
6717```solidity
6718function MAX_USED_BALANCE() external view returns (Balance);
6719```*/
6720    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6721    #[derive(Clone)]
6722    pub struct MAX_USED_BALANCECall;
6723    #[derive(serde::Serialize, serde::Deserialize)]
6724    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6725    ///Container type for the return parameters of the [`MAX_USED_BALANCE()`](MAX_USED_BALANCECall) function.
6726    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6727    #[derive(Clone)]
6728    pub struct MAX_USED_BALANCEReturn {
6729        #[allow(missing_docs)]
6730        pub _0: <Balance as alloy::sol_types::SolType>::RustType,
6731    }
6732    #[allow(
6733        non_camel_case_types,
6734        non_snake_case,
6735        clippy::pub_underscore_fields,
6736        clippy::style
6737    )]
6738    const _: () = {
6739        use alloy::sol_types as alloy_sol_types;
6740        {
6741            #[doc(hidden)]
6742            type UnderlyingSolTuple<'a> = ();
6743            #[doc(hidden)]
6744            type UnderlyingRustTuple<'a> = ();
6745            #[cfg(test)]
6746            #[allow(dead_code, unreachable_patterns)]
6747            fn _type_assertion(
6748                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6749            ) {
6750                match _t {
6751                    alloy_sol_types::private::AssertTypeEq::<
6752                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6753                    >(_) => {}
6754                }
6755            }
6756            #[automatically_derived]
6757            #[doc(hidden)]
6758            impl ::core::convert::From<MAX_USED_BALANCECall>
6759            for UnderlyingRustTuple<'_> {
6760                fn from(value: MAX_USED_BALANCECall) -> Self {
6761                    ()
6762                }
6763            }
6764            #[automatically_derived]
6765            #[doc(hidden)]
6766            impl ::core::convert::From<UnderlyingRustTuple<'_>>
6767            for MAX_USED_BALANCECall {
6768                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6769                    Self
6770                }
6771            }
6772        }
6773        {
6774            #[doc(hidden)]
6775            type UnderlyingSolTuple<'a> = (Balance,);
6776            #[doc(hidden)]
6777            type UnderlyingRustTuple<'a> = (
6778                <Balance as alloy::sol_types::SolType>::RustType,
6779            );
6780            #[cfg(test)]
6781            #[allow(dead_code, unreachable_patterns)]
6782            fn _type_assertion(
6783                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6784            ) {
6785                match _t {
6786                    alloy_sol_types::private::AssertTypeEq::<
6787                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6788                    >(_) => {}
6789                }
6790            }
6791            #[automatically_derived]
6792            #[doc(hidden)]
6793            impl ::core::convert::From<MAX_USED_BALANCEReturn>
6794            for UnderlyingRustTuple<'_> {
6795                fn from(value: MAX_USED_BALANCEReturn) -> Self {
6796                    (value._0,)
6797                }
6798            }
6799            #[automatically_derived]
6800            #[doc(hidden)]
6801            impl ::core::convert::From<UnderlyingRustTuple<'_>>
6802            for MAX_USED_BALANCEReturn {
6803                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6804                    Self { _0: tuple.0 }
6805                }
6806            }
6807        }
6808        #[automatically_derived]
6809        impl alloy_sol_types::SolCall for MAX_USED_BALANCECall {
6810            type Parameters<'a> = ();
6811            type Token<'a> = <Self::Parameters<
6812                'a,
6813            > as alloy_sol_types::SolType>::Token<'a>;
6814            type Return = <Balance as alloy::sol_types::SolType>::RustType;
6815            type ReturnTuple<'a> = (Balance,);
6816            type ReturnToken<'a> = <Self::ReturnTuple<
6817                'a,
6818            > as alloy_sol_types::SolType>::Token<'a>;
6819            const SIGNATURE: &'static str = "MAX_USED_BALANCE()";
6820            const SELECTOR: [u8; 4] = [93u8, 47u8, 7u8, 197u8];
6821            #[inline]
6822            fn new<'a>(
6823                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6824            ) -> Self {
6825                tuple.into()
6826            }
6827            #[inline]
6828            fn tokenize(&self) -> Self::Token<'_> {
6829                ()
6830            }
6831            #[inline]
6832            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6833                (<Balance as alloy_sol_types::SolType>::tokenize(ret),)
6834            }
6835            #[inline]
6836            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6837                <Self::ReturnTuple<
6838                    '_,
6839                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6840                    .map(|r| {
6841                        let r: MAX_USED_BALANCEReturn = r.into();
6842                        r._0
6843                    })
6844            }
6845            #[inline]
6846            fn abi_decode_returns_validate(
6847                data: &[u8],
6848            ) -> alloy_sol_types::Result<Self::Return> {
6849                <Self::ReturnTuple<
6850                    '_,
6851                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6852                    .map(|r| {
6853                        let r: MAX_USED_BALANCEReturn = r.into();
6854                        r._0
6855                    })
6856            }
6857        }
6858    };
6859    #[derive(serde::Serialize, serde::Deserialize)]
6860    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6861    /**Function with signature `MIN_USED_BALANCE()` and selector `0x29392e32`.
6862```solidity
6863function MIN_USED_BALANCE() external view returns (Balance);
6864```*/
6865    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6866    #[derive(Clone)]
6867    pub struct MIN_USED_BALANCECall;
6868    #[derive(serde::Serialize, serde::Deserialize)]
6869    #[derive(Default, Debug, PartialEq, Eq, Hash)]
6870    ///Container type for the return parameters of the [`MIN_USED_BALANCE()`](MIN_USED_BALANCECall) function.
6871    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
6872    #[derive(Clone)]
6873    pub struct MIN_USED_BALANCEReturn {
6874        #[allow(missing_docs)]
6875        pub _0: <Balance as alloy::sol_types::SolType>::RustType,
6876    }
6877    #[allow(
6878        non_camel_case_types,
6879        non_snake_case,
6880        clippy::pub_underscore_fields,
6881        clippy::style
6882    )]
6883    const _: () = {
6884        use alloy::sol_types as alloy_sol_types;
6885        {
6886            #[doc(hidden)]
6887            type UnderlyingSolTuple<'a> = ();
6888            #[doc(hidden)]
6889            type UnderlyingRustTuple<'a> = ();
6890            #[cfg(test)]
6891            #[allow(dead_code, unreachable_patterns)]
6892            fn _type_assertion(
6893                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6894            ) {
6895                match _t {
6896                    alloy_sol_types::private::AssertTypeEq::<
6897                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6898                    >(_) => {}
6899                }
6900            }
6901            #[automatically_derived]
6902            #[doc(hidden)]
6903            impl ::core::convert::From<MIN_USED_BALANCECall>
6904            for UnderlyingRustTuple<'_> {
6905                fn from(value: MIN_USED_BALANCECall) -> Self {
6906                    ()
6907                }
6908            }
6909            #[automatically_derived]
6910            #[doc(hidden)]
6911            impl ::core::convert::From<UnderlyingRustTuple<'_>>
6912            for MIN_USED_BALANCECall {
6913                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6914                    Self
6915                }
6916            }
6917        }
6918        {
6919            #[doc(hidden)]
6920            type UnderlyingSolTuple<'a> = (Balance,);
6921            #[doc(hidden)]
6922            type UnderlyingRustTuple<'a> = (
6923                <Balance as alloy::sol_types::SolType>::RustType,
6924            );
6925            #[cfg(test)]
6926            #[allow(dead_code, unreachable_patterns)]
6927            fn _type_assertion(
6928                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
6929            ) {
6930                match _t {
6931                    alloy_sol_types::private::AssertTypeEq::<
6932                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
6933                    >(_) => {}
6934                }
6935            }
6936            #[automatically_derived]
6937            #[doc(hidden)]
6938            impl ::core::convert::From<MIN_USED_BALANCEReturn>
6939            for UnderlyingRustTuple<'_> {
6940                fn from(value: MIN_USED_BALANCEReturn) -> Self {
6941                    (value._0,)
6942                }
6943            }
6944            #[automatically_derived]
6945            #[doc(hidden)]
6946            impl ::core::convert::From<UnderlyingRustTuple<'_>>
6947            for MIN_USED_BALANCEReturn {
6948                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
6949                    Self { _0: tuple.0 }
6950                }
6951            }
6952        }
6953        #[automatically_derived]
6954        impl alloy_sol_types::SolCall for MIN_USED_BALANCECall {
6955            type Parameters<'a> = ();
6956            type Token<'a> = <Self::Parameters<
6957                'a,
6958            > as alloy_sol_types::SolType>::Token<'a>;
6959            type Return = <Balance as alloy::sol_types::SolType>::RustType;
6960            type ReturnTuple<'a> = (Balance,);
6961            type ReturnToken<'a> = <Self::ReturnTuple<
6962                'a,
6963            > as alloy_sol_types::SolType>::Token<'a>;
6964            const SIGNATURE: &'static str = "MIN_USED_BALANCE()";
6965            const SELECTOR: [u8; 4] = [41u8, 57u8, 46u8, 50u8];
6966            #[inline]
6967            fn new<'a>(
6968                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
6969            ) -> Self {
6970                tuple.into()
6971            }
6972            #[inline]
6973            fn tokenize(&self) -> Self::Token<'_> {
6974                ()
6975            }
6976            #[inline]
6977            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
6978                (<Balance as alloy_sol_types::SolType>::tokenize(ret),)
6979            }
6980            #[inline]
6981            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
6982                <Self::ReturnTuple<
6983                    '_,
6984                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
6985                    .map(|r| {
6986                        let r: MIN_USED_BALANCEReturn = r.into();
6987                        r._0
6988                    })
6989            }
6990            #[inline]
6991            fn abi_decode_returns_validate(
6992                data: &[u8],
6993            ) -> alloy_sol_types::Result<Self::Return> {
6994                <Self::ReturnTuple<
6995                    '_,
6996                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
6997                    .map(|r| {
6998                        let r: MIN_USED_BALANCEReturn = r.into();
6999                        r._0
7000                    })
7001            }
7002        }
7003    };
7004    #[derive(serde::Serialize, serde::Deserialize)]
7005    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7006    /**Function with signature `TOKENS_RECIPIENT_INTERFACE_HASH()` and selector `0x72581cc0`.
7007```solidity
7008function TOKENS_RECIPIENT_INTERFACE_HASH() external view returns (bytes32);
7009```*/
7010    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7011    #[derive(Clone)]
7012    pub struct TOKENS_RECIPIENT_INTERFACE_HASHCall;
7013    #[derive(serde::Serialize, serde::Deserialize)]
7014    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7015    ///Container type for the return parameters of the [`TOKENS_RECIPIENT_INTERFACE_HASH()`](TOKENS_RECIPIENT_INTERFACE_HASHCall) function.
7016    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7017    #[derive(Clone)]
7018    pub struct TOKENS_RECIPIENT_INTERFACE_HASHReturn {
7019        #[allow(missing_docs)]
7020        pub _0: alloy::sol_types::private::FixedBytes<32>,
7021    }
7022    #[allow(
7023        non_camel_case_types,
7024        non_snake_case,
7025        clippy::pub_underscore_fields,
7026        clippy::style
7027    )]
7028    const _: () = {
7029        use alloy::sol_types as alloy_sol_types;
7030        {
7031            #[doc(hidden)]
7032            type UnderlyingSolTuple<'a> = ();
7033            #[doc(hidden)]
7034            type UnderlyingRustTuple<'a> = ();
7035            #[cfg(test)]
7036            #[allow(dead_code, unreachable_patterns)]
7037            fn _type_assertion(
7038                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7039            ) {
7040                match _t {
7041                    alloy_sol_types::private::AssertTypeEq::<
7042                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7043                    >(_) => {}
7044                }
7045            }
7046            #[automatically_derived]
7047            #[doc(hidden)]
7048            impl ::core::convert::From<TOKENS_RECIPIENT_INTERFACE_HASHCall>
7049            for UnderlyingRustTuple<'_> {
7050                fn from(value: TOKENS_RECIPIENT_INTERFACE_HASHCall) -> Self {
7051                    ()
7052                }
7053            }
7054            #[automatically_derived]
7055            #[doc(hidden)]
7056            impl ::core::convert::From<UnderlyingRustTuple<'_>>
7057            for TOKENS_RECIPIENT_INTERFACE_HASHCall {
7058                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7059                    Self
7060                }
7061            }
7062        }
7063        {
7064            #[doc(hidden)]
7065            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
7066            #[doc(hidden)]
7067            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
7068            #[cfg(test)]
7069            #[allow(dead_code, unreachable_patterns)]
7070            fn _type_assertion(
7071                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7072            ) {
7073                match _t {
7074                    alloy_sol_types::private::AssertTypeEq::<
7075                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7076                    >(_) => {}
7077                }
7078            }
7079            #[automatically_derived]
7080            #[doc(hidden)]
7081            impl ::core::convert::From<TOKENS_RECIPIENT_INTERFACE_HASHReturn>
7082            for UnderlyingRustTuple<'_> {
7083                fn from(value: TOKENS_RECIPIENT_INTERFACE_HASHReturn) -> Self {
7084                    (value._0,)
7085                }
7086            }
7087            #[automatically_derived]
7088            #[doc(hidden)]
7089            impl ::core::convert::From<UnderlyingRustTuple<'_>>
7090            for TOKENS_RECIPIENT_INTERFACE_HASHReturn {
7091                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7092                    Self { _0: tuple.0 }
7093                }
7094            }
7095        }
7096        #[automatically_derived]
7097        impl alloy_sol_types::SolCall for TOKENS_RECIPIENT_INTERFACE_HASHCall {
7098            type Parameters<'a> = ();
7099            type Token<'a> = <Self::Parameters<
7100                'a,
7101            > as alloy_sol_types::SolType>::Token<'a>;
7102            type Return = alloy::sol_types::private::FixedBytes<32>;
7103            type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
7104            type ReturnToken<'a> = <Self::ReturnTuple<
7105                'a,
7106            > as alloy_sol_types::SolType>::Token<'a>;
7107            const SIGNATURE: &'static str = "TOKENS_RECIPIENT_INTERFACE_HASH()";
7108            const SELECTOR: [u8; 4] = [114u8, 88u8, 28u8, 192u8];
7109            #[inline]
7110            fn new<'a>(
7111                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
7112            ) -> Self {
7113                tuple.into()
7114            }
7115            #[inline]
7116            fn tokenize(&self) -> Self::Token<'_> {
7117                ()
7118            }
7119            #[inline]
7120            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
7121                (
7122                    <alloy::sol_types::sol_data::FixedBytes<
7123                        32,
7124                    > as alloy_sol_types::SolType>::tokenize(ret),
7125                )
7126            }
7127            #[inline]
7128            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
7129                <Self::ReturnTuple<
7130                    '_,
7131                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
7132                    .map(|r| {
7133                        let r: TOKENS_RECIPIENT_INTERFACE_HASHReturn = r.into();
7134                        r._0
7135                    })
7136            }
7137            #[inline]
7138            fn abi_decode_returns_validate(
7139                data: &[u8],
7140            ) -> alloy_sol_types::Result<Self::Return> {
7141                <Self::ReturnTuple<
7142                    '_,
7143                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
7144                    .map(|r| {
7145                        let r: TOKENS_RECIPIENT_INTERFACE_HASHReturn = r.into();
7146                        r._0
7147                    })
7148            }
7149        }
7150    };
7151    #[derive(serde::Serialize, serde::Deserialize)]
7152    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7153    /**Function with signature `VERSION()` and selector `0xffa1ad74`.
7154```solidity
7155function VERSION() external view returns (string memory);
7156```*/
7157    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7158    #[derive(Clone)]
7159    pub struct VERSIONCall;
7160    #[derive(serde::Serialize, serde::Deserialize)]
7161    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7162    ///Container type for the return parameters of the [`VERSION()`](VERSIONCall) function.
7163    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7164    #[derive(Clone)]
7165    pub struct VERSIONReturn {
7166        #[allow(missing_docs)]
7167        pub _0: alloy::sol_types::private::String,
7168    }
7169    #[allow(
7170        non_camel_case_types,
7171        non_snake_case,
7172        clippy::pub_underscore_fields,
7173        clippy::style
7174    )]
7175    const _: () = {
7176        use alloy::sol_types as alloy_sol_types;
7177        {
7178            #[doc(hidden)]
7179            type UnderlyingSolTuple<'a> = ();
7180            #[doc(hidden)]
7181            type UnderlyingRustTuple<'a> = ();
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<VERSIONCall> for UnderlyingRustTuple<'_> {
7196                fn from(value: VERSIONCall) -> Self {
7197                    ()
7198                }
7199            }
7200            #[automatically_derived]
7201            #[doc(hidden)]
7202            impl ::core::convert::From<UnderlyingRustTuple<'_>> for VERSIONCall {
7203                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7204                    Self
7205                }
7206            }
7207        }
7208        {
7209            #[doc(hidden)]
7210            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::String,);
7211            #[doc(hidden)]
7212            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::String,);
7213            #[cfg(test)]
7214            #[allow(dead_code, unreachable_patterns)]
7215            fn _type_assertion(
7216                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7217            ) {
7218                match _t {
7219                    alloy_sol_types::private::AssertTypeEq::<
7220                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7221                    >(_) => {}
7222                }
7223            }
7224            #[automatically_derived]
7225            #[doc(hidden)]
7226            impl ::core::convert::From<VERSIONReturn> for UnderlyingRustTuple<'_> {
7227                fn from(value: VERSIONReturn) -> Self {
7228                    (value._0,)
7229                }
7230            }
7231            #[automatically_derived]
7232            #[doc(hidden)]
7233            impl ::core::convert::From<UnderlyingRustTuple<'_>> for VERSIONReturn {
7234                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7235                    Self { _0: tuple.0 }
7236                }
7237            }
7238        }
7239        #[automatically_derived]
7240        impl alloy_sol_types::SolCall for VERSIONCall {
7241            type Parameters<'a> = ();
7242            type Token<'a> = <Self::Parameters<
7243                'a,
7244            > as alloy_sol_types::SolType>::Token<'a>;
7245            type Return = alloy::sol_types::private::String;
7246            type ReturnTuple<'a> = (alloy::sol_types::sol_data::String,);
7247            type ReturnToken<'a> = <Self::ReturnTuple<
7248                'a,
7249            > as alloy_sol_types::SolType>::Token<'a>;
7250            const SIGNATURE: &'static str = "VERSION()";
7251            const SELECTOR: [u8; 4] = [255u8, 161u8, 173u8, 116u8];
7252            #[inline]
7253            fn new<'a>(
7254                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
7255            ) -> Self {
7256                tuple.into()
7257            }
7258            #[inline]
7259            fn tokenize(&self) -> Self::Token<'_> {
7260                ()
7261            }
7262            #[inline]
7263            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
7264                (
7265                    <alloy::sol_types::sol_data::String as alloy_sol_types::SolType>::tokenize(
7266                        ret,
7267                    ),
7268                )
7269            }
7270            #[inline]
7271            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
7272                <Self::ReturnTuple<
7273                    '_,
7274                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
7275                    .map(|r| {
7276                        let r: VERSIONReturn = r.into();
7277                        r._0
7278                    })
7279            }
7280            #[inline]
7281            fn abi_decode_returns_validate(
7282                data: &[u8],
7283            ) -> alloy_sol_types::Result<Self::Return> {
7284                <Self::ReturnTuple<
7285                    '_,
7286                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
7287                    .map(|r| {
7288                        let r: VERSIONReturn = r.into();
7289                        r._0
7290                    })
7291            }
7292        }
7293    };
7294    #[derive(serde::Serialize, serde::Deserialize)]
7295    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7296    /**Function with signature `_currentBlockTimestamp()` and selector `0xb920deed`.
7297```solidity
7298function _currentBlockTimestamp() external view returns (Timestamp);
7299```*/
7300    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7301    #[derive(Clone)]
7302    pub struct _currentBlockTimestampCall;
7303    #[derive(serde::Serialize, serde::Deserialize)]
7304    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7305    ///Container type for the return parameters of the [`_currentBlockTimestamp()`](_currentBlockTimestampCall) function.
7306    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7307    #[derive(Clone)]
7308    pub struct _currentBlockTimestampReturn {
7309        #[allow(missing_docs)]
7310        pub _0: <Timestamp as alloy::sol_types::SolType>::RustType,
7311    }
7312    #[allow(
7313        non_camel_case_types,
7314        non_snake_case,
7315        clippy::pub_underscore_fields,
7316        clippy::style
7317    )]
7318    const _: () = {
7319        use alloy::sol_types as alloy_sol_types;
7320        {
7321            #[doc(hidden)]
7322            type UnderlyingSolTuple<'a> = ();
7323            #[doc(hidden)]
7324            type UnderlyingRustTuple<'a> = ();
7325            #[cfg(test)]
7326            #[allow(dead_code, unreachable_patterns)]
7327            fn _type_assertion(
7328                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7329            ) {
7330                match _t {
7331                    alloy_sol_types::private::AssertTypeEq::<
7332                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7333                    >(_) => {}
7334                }
7335            }
7336            #[automatically_derived]
7337            #[doc(hidden)]
7338            impl ::core::convert::From<_currentBlockTimestampCall>
7339            for UnderlyingRustTuple<'_> {
7340                fn from(value: _currentBlockTimestampCall) -> Self {
7341                    ()
7342                }
7343            }
7344            #[automatically_derived]
7345            #[doc(hidden)]
7346            impl ::core::convert::From<UnderlyingRustTuple<'_>>
7347            for _currentBlockTimestampCall {
7348                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7349                    Self
7350                }
7351            }
7352        }
7353        {
7354            #[doc(hidden)]
7355            type UnderlyingSolTuple<'a> = (Timestamp,);
7356            #[doc(hidden)]
7357            type UnderlyingRustTuple<'a> = (
7358                <Timestamp as alloy::sol_types::SolType>::RustType,
7359            );
7360            #[cfg(test)]
7361            #[allow(dead_code, unreachable_patterns)]
7362            fn _type_assertion(
7363                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7364            ) {
7365                match _t {
7366                    alloy_sol_types::private::AssertTypeEq::<
7367                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7368                    >(_) => {}
7369                }
7370            }
7371            #[automatically_derived]
7372            #[doc(hidden)]
7373            impl ::core::convert::From<_currentBlockTimestampReturn>
7374            for UnderlyingRustTuple<'_> {
7375                fn from(value: _currentBlockTimestampReturn) -> Self {
7376                    (value._0,)
7377                }
7378            }
7379            #[automatically_derived]
7380            #[doc(hidden)]
7381            impl ::core::convert::From<UnderlyingRustTuple<'_>>
7382            for _currentBlockTimestampReturn {
7383                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7384                    Self { _0: tuple.0 }
7385                }
7386            }
7387        }
7388        #[automatically_derived]
7389        impl alloy_sol_types::SolCall for _currentBlockTimestampCall {
7390            type Parameters<'a> = ();
7391            type Token<'a> = <Self::Parameters<
7392                'a,
7393            > as alloy_sol_types::SolType>::Token<'a>;
7394            type Return = <Timestamp as alloy::sol_types::SolType>::RustType;
7395            type ReturnTuple<'a> = (Timestamp,);
7396            type ReturnToken<'a> = <Self::ReturnTuple<
7397                'a,
7398            > as alloy_sol_types::SolType>::Token<'a>;
7399            const SIGNATURE: &'static str = "_currentBlockTimestamp()";
7400            const SELECTOR: [u8; 4] = [185u8, 32u8, 222u8, 237u8];
7401            #[inline]
7402            fn new<'a>(
7403                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
7404            ) -> Self {
7405                tuple.into()
7406            }
7407            #[inline]
7408            fn tokenize(&self) -> Self::Token<'_> {
7409                ()
7410            }
7411            #[inline]
7412            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
7413                (<Timestamp as alloy_sol_types::SolType>::tokenize(ret),)
7414            }
7415            #[inline]
7416            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
7417                <Self::ReturnTuple<
7418                    '_,
7419                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
7420                    .map(|r| {
7421                        let r: _currentBlockTimestampReturn = r.into();
7422                        r._0
7423                    })
7424            }
7425            #[inline]
7426            fn abi_decode_returns_validate(
7427                data: &[u8],
7428            ) -> alloy_sol_types::Result<Self::Return> {
7429                <Self::ReturnTuple<
7430                    '_,
7431                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
7432                    .map(|r| {
7433                        let r: _currentBlockTimestampReturn = r.into();
7434                        r._0
7435                    })
7436            }
7437        }
7438    };
7439    #[derive(serde::Serialize, serde::Deserialize)]
7440    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7441    /**Function with signature `_getChannelId(address,address)` and selector `0xbe9babdc`.
7442```solidity
7443function _getChannelId(address source, address destination) external pure returns (bytes32);
7444```*/
7445    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7446    #[derive(Clone)]
7447    pub struct _getChannelIdCall {
7448        #[allow(missing_docs)]
7449        pub source: alloy::sol_types::private::Address,
7450        #[allow(missing_docs)]
7451        pub destination: alloy::sol_types::private::Address,
7452    }
7453    #[derive(serde::Serialize, serde::Deserialize)]
7454    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7455    ///Container type for the return parameters of the [`_getChannelId(address,address)`](_getChannelIdCall) function.
7456    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7457    #[derive(Clone)]
7458    pub struct _getChannelIdReturn {
7459        #[allow(missing_docs)]
7460        pub _0: alloy::sol_types::private::FixedBytes<32>,
7461    }
7462    #[allow(
7463        non_camel_case_types,
7464        non_snake_case,
7465        clippy::pub_underscore_fields,
7466        clippy::style
7467    )]
7468    const _: () = {
7469        use alloy::sol_types as alloy_sol_types;
7470        {
7471            #[doc(hidden)]
7472            type UnderlyingSolTuple<'a> = (
7473                alloy::sol_types::sol_data::Address,
7474                alloy::sol_types::sol_data::Address,
7475            );
7476            #[doc(hidden)]
7477            type UnderlyingRustTuple<'a> = (
7478                alloy::sol_types::private::Address,
7479                alloy::sol_types::private::Address,
7480            );
7481            #[cfg(test)]
7482            #[allow(dead_code, unreachable_patterns)]
7483            fn _type_assertion(
7484                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7485            ) {
7486                match _t {
7487                    alloy_sol_types::private::AssertTypeEq::<
7488                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7489                    >(_) => {}
7490                }
7491            }
7492            #[automatically_derived]
7493            #[doc(hidden)]
7494            impl ::core::convert::From<_getChannelIdCall> for UnderlyingRustTuple<'_> {
7495                fn from(value: _getChannelIdCall) -> Self {
7496                    (value.source, value.destination)
7497                }
7498            }
7499            #[automatically_derived]
7500            #[doc(hidden)]
7501            impl ::core::convert::From<UnderlyingRustTuple<'_>> for _getChannelIdCall {
7502                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7503                    Self {
7504                        source: tuple.0,
7505                        destination: tuple.1,
7506                    }
7507                }
7508            }
7509        }
7510        {
7511            #[doc(hidden)]
7512            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
7513            #[doc(hidden)]
7514            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
7515            #[cfg(test)]
7516            #[allow(dead_code, unreachable_patterns)]
7517            fn _type_assertion(
7518                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7519            ) {
7520                match _t {
7521                    alloy_sol_types::private::AssertTypeEq::<
7522                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7523                    >(_) => {}
7524                }
7525            }
7526            #[automatically_derived]
7527            #[doc(hidden)]
7528            impl ::core::convert::From<_getChannelIdReturn> for UnderlyingRustTuple<'_> {
7529                fn from(value: _getChannelIdReturn) -> Self {
7530                    (value._0,)
7531                }
7532            }
7533            #[automatically_derived]
7534            #[doc(hidden)]
7535            impl ::core::convert::From<UnderlyingRustTuple<'_>> for _getChannelIdReturn {
7536                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7537                    Self { _0: tuple.0 }
7538                }
7539            }
7540        }
7541        #[automatically_derived]
7542        impl alloy_sol_types::SolCall for _getChannelIdCall {
7543            type Parameters<'a> = (
7544                alloy::sol_types::sol_data::Address,
7545                alloy::sol_types::sol_data::Address,
7546            );
7547            type Token<'a> = <Self::Parameters<
7548                'a,
7549            > as alloy_sol_types::SolType>::Token<'a>;
7550            type Return = alloy::sol_types::private::FixedBytes<32>;
7551            type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
7552            type ReturnToken<'a> = <Self::ReturnTuple<
7553                'a,
7554            > as alloy_sol_types::SolType>::Token<'a>;
7555            const SIGNATURE: &'static str = "_getChannelId(address,address)";
7556            const SELECTOR: [u8; 4] = [190u8, 155u8, 171u8, 220u8];
7557            #[inline]
7558            fn new<'a>(
7559                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
7560            ) -> Self {
7561                tuple.into()
7562            }
7563            #[inline]
7564            fn tokenize(&self) -> Self::Token<'_> {
7565                (
7566                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
7567                        &self.source,
7568                    ),
7569                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
7570                        &self.destination,
7571                    ),
7572                )
7573            }
7574            #[inline]
7575            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
7576                (
7577                    <alloy::sol_types::sol_data::FixedBytes<
7578                        32,
7579                    > as alloy_sol_types::SolType>::tokenize(ret),
7580                )
7581            }
7582            #[inline]
7583            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
7584                <Self::ReturnTuple<
7585                    '_,
7586                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
7587                    .map(|r| {
7588                        let r: _getChannelIdReturn = r.into();
7589                        r._0
7590                    })
7591            }
7592            #[inline]
7593            fn abi_decode_returns_validate(
7594                data: &[u8],
7595            ) -> alloy_sol_types::Result<Self::Return> {
7596                <Self::ReturnTuple<
7597                    '_,
7598                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
7599                    .map(|r| {
7600                        let r: _getChannelIdReturn = r.into();
7601                        r._0
7602                    })
7603            }
7604        }
7605    };
7606    #[derive(serde::Serialize, serde::Deserialize)]
7607    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7608    /**Function with signature `_getTicketHash(((bytes32,uint96,uint48,uint32,uint24,uint56),(bytes32,bytes32),uint256))` and selector `0x24086cc2`.
7609```solidity
7610function _getTicketHash(RedeemableTicket memory redeemable) external view returns (bytes32);
7611```*/
7612    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7613    #[derive(Clone)]
7614    pub struct _getTicketHashCall {
7615        #[allow(missing_docs)]
7616        pub redeemable: <RedeemableTicket as alloy::sol_types::SolType>::RustType,
7617    }
7618    #[derive(serde::Serialize, serde::Deserialize)]
7619    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7620    ///Container type for the return parameters of the [`_getTicketHash(((bytes32,uint96,uint48,uint32,uint24,uint56),(bytes32,bytes32),uint256))`](_getTicketHashCall) function.
7621    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7622    #[derive(Clone)]
7623    pub struct _getTicketHashReturn {
7624        #[allow(missing_docs)]
7625        pub _0: alloy::sol_types::private::FixedBytes<32>,
7626    }
7627    #[allow(
7628        non_camel_case_types,
7629        non_snake_case,
7630        clippy::pub_underscore_fields,
7631        clippy::style
7632    )]
7633    const _: () = {
7634        use alloy::sol_types as alloy_sol_types;
7635        {
7636            #[doc(hidden)]
7637            type UnderlyingSolTuple<'a> = (RedeemableTicket,);
7638            #[doc(hidden)]
7639            type UnderlyingRustTuple<'a> = (
7640                <RedeemableTicket as alloy::sol_types::SolType>::RustType,
7641            );
7642            #[cfg(test)]
7643            #[allow(dead_code, unreachable_patterns)]
7644            fn _type_assertion(
7645                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7646            ) {
7647                match _t {
7648                    alloy_sol_types::private::AssertTypeEq::<
7649                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7650                    >(_) => {}
7651                }
7652            }
7653            #[automatically_derived]
7654            #[doc(hidden)]
7655            impl ::core::convert::From<_getTicketHashCall> for UnderlyingRustTuple<'_> {
7656                fn from(value: _getTicketHashCall) -> Self {
7657                    (value.redeemable,)
7658                }
7659            }
7660            #[automatically_derived]
7661            #[doc(hidden)]
7662            impl ::core::convert::From<UnderlyingRustTuple<'_>> for _getTicketHashCall {
7663                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7664                    Self { redeemable: tuple.0 }
7665                }
7666            }
7667        }
7668        {
7669            #[doc(hidden)]
7670            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
7671            #[doc(hidden)]
7672            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
7673            #[cfg(test)]
7674            #[allow(dead_code, unreachable_patterns)]
7675            fn _type_assertion(
7676                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7677            ) {
7678                match _t {
7679                    alloy_sol_types::private::AssertTypeEq::<
7680                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7681                    >(_) => {}
7682                }
7683            }
7684            #[automatically_derived]
7685            #[doc(hidden)]
7686            impl ::core::convert::From<_getTicketHashReturn>
7687            for UnderlyingRustTuple<'_> {
7688                fn from(value: _getTicketHashReturn) -> Self {
7689                    (value._0,)
7690                }
7691            }
7692            #[automatically_derived]
7693            #[doc(hidden)]
7694            impl ::core::convert::From<UnderlyingRustTuple<'_>>
7695            for _getTicketHashReturn {
7696                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7697                    Self { _0: tuple.0 }
7698                }
7699            }
7700        }
7701        #[automatically_derived]
7702        impl alloy_sol_types::SolCall for _getTicketHashCall {
7703            type Parameters<'a> = (RedeemableTicket,);
7704            type Token<'a> = <Self::Parameters<
7705                'a,
7706            > as alloy_sol_types::SolType>::Token<'a>;
7707            type Return = alloy::sol_types::private::FixedBytes<32>;
7708            type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
7709            type ReturnToken<'a> = <Self::ReturnTuple<
7710                'a,
7711            > as alloy_sol_types::SolType>::Token<'a>;
7712            const SIGNATURE: &'static str = "_getTicketHash(((bytes32,uint96,uint48,uint32,uint24,uint56),(bytes32,bytes32),uint256))";
7713            const SELECTOR: [u8; 4] = [36u8, 8u8, 108u8, 194u8];
7714            #[inline]
7715            fn new<'a>(
7716                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
7717            ) -> Self {
7718                tuple.into()
7719            }
7720            #[inline]
7721            fn tokenize(&self) -> Self::Token<'_> {
7722                (
7723                    <RedeemableTicket as alloy_sol_types::SolType>::tokenize(
7724                        &self.redeemable,
7725                    ),
7726                )
7727            }
7728            #[inline]
7729            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
7730                (
7731                    <alloy::sol_types::sol_data::FixedBytes<
7732                        32,
7733                    > as alloy_sol_types::SolType>::tokenize(ret),
7734                )
7735            }
7736            #[inline]
7737            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
7738                <Self::ReturnTuple<
7739                    '_,
7740                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
7741                    .map(|r| {
7742                        let r: _getTicketHashReturn = r.into();
7743                        r._0
7744                    })
7745            }
7746            #[inline]
7747            fn abi_decode_returns_validate(
7748                data: &[u8],
7749            ) -> alloy_sol_types::Result<Self::Return> {
7750                <Self::ReturnTuple<
7751                    '_,
7752                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
7753                    .map(|r| {
7754                        let r: _getTicketHashReturn = r.into();
7755                        r._0
7756                    })
7757            }
7758        }
7759    };
7760    #[derive(serde::Serialize, serde::Deserialize)]
7761    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7762    /**Function with signature `_isWinningTicket(bytes32,((bytes32,uint96,uint48,uint32,uint24,uint56),(bytes32,bytes32),uint256),(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))` and selector `0x8c3710c9`.
7763```solidity
7764function _isWinningTicket(bytes32 ticketHash, RedeemableTicket memory redeemable, HoprCrypto.VRFParameters memory params) external pure returns (bool);
7765```*/
7766    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7767    #[derive(Clone)]
7768    pub struct _isWinningTicketCall {
7769        #[allow(missing_docs)]
7770        pub ticketHash: alloy::sol_types::private::FixedBytes<32>,
7771        #[allow(missing_docs)]
7772        pub redeemable: <RedeemableTicket as alloy::sol_types::SolType>::RustType,
7773        #[allow(missing_docs)]
7774        pub params: <HoprCrypto::VRFParameters as alloy::sol_types::SolType>::RustType,
7775    }
7776    #[derive(serde::Serialize, serde::Deserialize)]
7777    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7778    ///Container type for the return parameters of the [`_isWinningTicket(bytes32,((bytes32,uint96,uint48,uint32,uint24,uint56),(bytes32,bytes32),uint256),(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))`](_isWinningTicketCall) function.
7779    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7780    #[derive(Clone)]
7781    pub struct _isWinningTicketReturn {
7782        #[allow(missing_docs)]
7783        pub _0: bool,
7784    }
7785    #[allow(
7786        non_camel_case_types,
7787        non_snake_case,
7788        clippy::pub_underscore_fields,
7789        clippy::style
7790    )]
7791    const _: () = {
7792        use alloy::sol_types as alloy_sol_types;
7793        {
7794            #[doc(hidden)]
7795            type UnderlyingSolTuple<'a> = (
7796                alloy::sol_types::sol_data::FixedBytes<32>,
7797                RedeemableTicket,
7798                HoprCrypto::VRFParameters,
7799            );
7800            #[doc(hidden)]
7801            type UnderlyingRustTuple<'a> = (
7802                alloy::sol_types::private::FixedBytes<32>,
7803                <RedeemableTicket as alloy::sol_types::SolType>::RustType,
7804                <HoprCrypto::VRFParameters as alloy::sol_types::SolType>::RustType,
7805            );
7806            #[cfg(test)]
7807            #[allow(dead_code, unreachable_patterns)]
7808            fn _type_assertion(
7809                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7810            ) {
7811                match _t {
7812                    alloy_sol_types::private::AssertTypeEq::<
7813                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7814                    >(_) => {}
7815                }
7816            }
7817            #[automatically_derived]
7818            #[doc(hidden)]
7819            impl ::core::convert::From<_isWinningTicketCall>
7820            for UnderlyingRustTuple<'_> {
7821                fn from(value: _isWinningTicketCall) -> Self {
7822                    (value.ticketHash, value.redeemable, value.params)
7823                }
7824            }
7825            #[automatically_derived]
7826            #[doc(hidden)]
7827            impl ::core::convert::From<UnderlyingRustTuple<'_>>
7828            for _isWinningTicketCall {
7829                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7830                    Self {
7831                        ticketHash: tuple.0,
7832                        redeemable: tuple.1,
7833                        params: tuple.2,
7834                    }
7835                }
7836            }
7837        }
7838        {
7839            #[doc(hidden)]
7840            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,);
7841            #[doc(hidden)]
7842            type UnderlyingRustTuple<'a> = (bool,);
7843            #[cfg(test)]
7844            #[allow(dead_code, unreachable_patterns)]
7845            fn _type_assertion(
7846                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7847            ) {
7848                match _t {
7849                    alloy_sol_types::private::AssertTypeEq::<
7850                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7851                    >(_) => {}
7852                }
7853            }
7854            #[automatically_derived]
7855            #[doc(hidden)]
7856            impl ::core::convert::From<_isWinningTicketReturn>
7857            for UnderlyingRustTuple<'_> {
7858                fn from(value: _isWinningTicketReturn) -> Self {
7859                    (value._0,)
7860                }
7861            }
7862            #[automatically_derived]
7863            #[doc(hidden)]
7864            impl ::core::convert::From<UnderlyingRustTuple<'_>>
7865            for _isWinningTicketReturn {
7866                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
7867                    Self { _0: tuple.0 }
7868                }
7869            }
7870        }
7871        #[automatically_derived]
7872        impl alloy_sol_types::SolCall for _isWinningTicketCall {
7873            type Parameters<'a> = (
7874                alloy::sol_types::sol_data::FixedBytes<32>,
7875                RedeemableTicket,
7876                HoprCrypto::VRFParameters,
7877            );
7878            type Token<'a> = <Self::Parameters<
7879                'a,
7880            > as alloy_sol_types::SolType>::Token<'a>;
7881            type Return = bool;
7882            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,);
7883            type ReturnToken<'a> = <Self::ReturnTuple<
7884                'a,
7885            > as alloy_sol_types::SolType>::Token<'a>;
7886            const SIGNATURE: &'static str = "_isWinningTicket(bytes32,((bytes32,uint96,uint48,uint32,uint24,uint56),(bytes32,bytes32),uint256),(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))";
7887            const SELECTOR: [u8; 4] = [140u8, 55u8, 16u8, 201u8];
7888            #[inline]
7889            fn new<'a>(
7890                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
7891            ) -> Self {
7892                tuple.into()
7893            }
7894            #[inline]
7895            fn tokenize(&self) -> Self::Token<'_> {
7896                (
7897                    <alloy::sol_types::sol_data::FixedBytes<
7898                        32,
7899                    > as alloy_sol_types::SolType>::tokenize(&self.ticketHash),
7900                    <RedeemableTicket as alloy_sol_types::SolType>::tokenize(
7901                        &self.redeemable,
7902                    ),
7903                    <HoprCrypto::VRFParameters as alloy_sol_types::SolType>::tokenize(
7904                        &self.params,
7905                    ),
7906                )
7907            }
7908            #[inline]
7909            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
7910                (
7911                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
7912                        ret,
7913                    ),
7914                )
7915            }
7916            #[inline]
7917            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
7918                <Self::ReturnTuple<
7919                    '_,
7920                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
7921                    .map(|r| {
7922                        let r: _isWinningTicketReturn = r.into();
7923                        r._0
7924                    })
7925            }
7926            #[inline]
7927            fn abi_decode_returns_validate(
7928                data: &[u8],
7929            ) -> alloy_sol_types::Result<Self::Return> {
7930                <Self::ReturnTuple<
7931                    '_,
7932                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
7933                    .map(|r| {
7934                        let r: _isWinningTicketReturn = r.into();
7935                        r._0
7936                    })
7937            }
7938        }
7939    };
7940    #[derive(serde::Serialize, serde::Deserialize)]
7941    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7942    /**Function with signature `canImplementInterfaceForAddress(bytes32,address)` and selector `0x249cb3fa`.
7943```solidity
7944function canImplementInterfaceForAddress(bytes32 interfaceHash, address account) external view returns (bytes32);
7945```*/
7946    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7947    #[derive(Clone)]
7948    pub struct canImplementInterfaceForAddressCall {
7949        #[allow(missing_docs)]
7950        pub interfaceHash: alloy::sol_types::private::FixedBytes<32>,
7951        #[allow(missing_docs)]
7952        pub account: alloy::sol_types::private::Address,
7953    }
7954    #[derive(serde::Serialize, serde::Deserialize)]
7955    #[derive(Default, Debug, PartialEq, Eq, Hash)]
7956    ///Container type for the return parameters of the [`canImplementInterfaceForAddress(bytes32,address)`](canImplementInterfaceForAddressCall) function.
7957    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
7958    #[derive(Clone)]
7959    pub struct canImplementInterfaceForAddressReturn {
7960        #[allow(missing_docs)]
7961        pub _0: alloy::sol_types::private::FixedBytes<32>,
7962    }
7963    #[allow(
7964        non_camel_case_types,
7965        non_snake_case,
7966        clippy::pub_underscore_fields,
7967        clippy::style
7968    )]
7969    const _: () = {
7970        use alloy::sol_types as alloy_sol_types;
7971        {
7972            #[doc(hidden)]
7973            type UnderlyingSolTuple<'a> = (
7974                alloy::sol_types::sol_data::FixedBytes<32>,
7975                alloy::sol_types::sol_data::Address,
7976            );
7977            #[doc(hidden)]
7978            type UnderlyingRustTuple<'a> = (
7979                alloy::sol_types::private::FixedBytes<32>,
7980                alloy::sol_types::private::Address,
7981            );
7982            #[cfg(test)]
7983            #[allow(dead_code, unreachable_patterns)]
7984            fn _type_assertion(
7985                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
7986            ) {
7987                match _t {
7988                    alloy_sol_types::private::AssertTypeEq::<
7989                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
7990                    >(_) => {}
7991                }
7992            }
7993            #[automatically_derived]
7994            #[doc(hidden)]
7995            impl ::core::convert::From<canImplementInterfaceForAddressCall>
7996            for UnderlyingRustTuple<'_> {
7997                fn from(value: canImplementInterfaceForAddressCall) -> Self {
7998                    (value.interfaceHash, value.account)
7999                }
8000            }
8001            #[automatically_derived]
8002            #[doc(hidden)]
8003            impl ::core::convert::From<UnderlyingRustTuple<'_>>
8004            for canImplementInterfaceForAddressCall {
8005                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8006                    Self {
8007                        interfaceHash: tuple.0,
8008                        account: tuple.1,
8009                    }
8010                }
8011            }
8012        }
8013        {
8014            #[doc(hidden)]
8015            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
8016            #[doc(hidden)]
8017            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
8018            #[cfg(test)]
8019            #[allow(dead_code, unreachable_patterns)]
8020            fn _type_assertion(
8021                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8022            ) {
8023                match _t {
8024                    alloy_sol_types::private::AssertTypeEq::<
8025                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8026                    >(_) => {}
8027                }
8028            }
8029            #[automatically_derived]
8030            #[doc(hidden)]
8031            impl ::core::convert::From<canImplementInterfaceForAddressReturn>
8032            for UnderlyingRustTuple<'_> {
8033                fn from(value: canImplementInterfaceForAddressReturn) -> Self {
8034                    (value._0,)
8035                }
8036            }
8037            #[automatically_derived]
8038            #[doc(hidden)]
8039            impl ::core::convert::From<UnderlyingRustTuple<'_>>
8040            for canImplementInterfaceForAddressReturn {
8041                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8042                    Self { _0: tuple.0 }
8043                }
8044            }
8045        }
8046        #[automatically_derived]
8047        impl alloy_sol_types::SolCall for canImplementInterfaceForAddressCall {
8048            type Parameters<'a> = (
8049                alloy::sol_types::sol_data::FixedBytes<32>,
8050                alloy::sol_types::sol_data::Address,
8051            );
8052            type Token<'a> = <Self::Parameters<
8053                'a,
8054            > as alloy_sol_types::SolType>::Token<'a>;
8055            type Return = alloy::sol_types::private::FixedBytes<32>;
8056            type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
8057            type ReturnToken<'a> = <Self::ReturnTuple<
8058                'a,
8059            > as alloy_sol_types::SolType>::Token<'a>;
8060            const SIGNATURE: &'static str = "canImplementInterfaceForAddress(bytes32,address)";
8061            const SELECTOR: [u8; 4] = [36u8, 156u8, 179u8, 250u8];
8062            #[inline]
8063            fn new<'a>(
8064                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
8065            ) -> Self {
8066                tuple.into()
8067            }
8068            #[inline]
8069            fn tokenize(&self) -> Self::Token<'_> {
8070                (
8071                    <alloy::sol_types::sol_data::FixedBytes<
8072                        32,
8073                    > as alloy_sol_types::SolType>::tokenize(&self.interfaceHash),
8074                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
8075                        &self.account,
8076                    ),
8077                )
8078            }
8079            #[inline]
8080            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
8081                (
8082                    <alloy::sol_types::sol_data::FixedBytes<
8083                        32,
8084                    > as alloy_sol_types::SolType>::tokenize(ret),
8085                )
8086            }
8087            #[inline]
8088            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
8089                <Self::ReturnTuple<
8090                    '_,
8091                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
8092                    .map(|r| {
8093                        let r: canImplementInterfaceForAddressReturn = r.into();
8094                        r._0
8095                    })
8096            }
8097            #[inline]
8098            fn abi_decode_returns_validate(
8099                data: &[u8],
8100            ) -> alloy_sol_types::Result<Self::Return> {
8101                <Self::ReturnTuple<
8102                    '_,
8103                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
8104                    .map(|r| {
8105                        let r: canImplementInterfaceForAddressReturn = r.into();
8106                        r._0
8107                    })
8108            }
8109        }
8110    };
8111    #[derive(serde::Serialize, serde::Deserialize)]
8112    #[derive(Default, Debug, PartialEq, Eq, Hash)]
8113    /**Function with signature `channels(bytes32)` and selector `0x7a7ebd7b`.
8114```solidity
8115function channels(bytes32) external view returns (Balance balance, TicketIndex ticketIndex, Timestamp closureTime, ChannelEpoch epoch, ChannelStatus status);
8116```*/
8117    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8118    #[derive(Clone)]
8119    pub struct channelsCall(pub alloy::sol_types::private::FixedBytes<32>);
8120    #[derive(serde::Serialize, serde::Deserialize)]
8121    #[derive(Default, Debug, PartialEq, Eq, Hash)]
8122    ///Container type for the return parameters of the [`channels(bytes32)`](channelsCall) function.
8123    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8124    #[derive(Clone)]
8125    pub struct channelsReturn {
8126        #[allow(missing_docs)]
8127        pub balance: <Balance as alloy::sol_types::SolType>::RustType,
8128        #[allow(missing_docs)]
8129        pub ticketIndex: <TicketIndex as alloy::sol_types::SolType>::RustType,
8130        #[allow(missing_docs)]
8131        pub closureTime: <Timestamp as alloy::sol_types::SolType>::RustType,
8132        #[allow(missing_docs)]
8133        pub epoch: <ChannelEpoch as alloy::sol_types::SolType>::RustType,
8134        #[allow(missing_docs)]
8135        pub status: <ChannelStatus as alloy::sol_types::SolType>::RustType,
8136    }
8137    #[allow(
8138        non_camel_case_types,
8139        non_snake_case,
8140        clippy::pub_underscore_fields,
8141        clippy::style
8142    )]
8143    const _: () = {
8144        use alloy::sol_types as alloy_sol_types;
8145        {
8146            #[doc(hidden)]
8147            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
8148            #[doc(hidden)]
8149            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
8150            #[cfg(test)]
8151            #[allow(dead_code, unreachable_patterns)]
8152            fn _type_assertion(
8153                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8154            ) {
8155                match _t {
8156                    alloy_sol_types::private::AssertTypeEq::<
8157                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8158                    >(_) => {}
8159                }
8160            }
8161            #[automatically_derived]
8162            #[doc(hidden)]
8163            impl ::core::convert::From<channelsCall> for UnderlyingRustTuple<'_> {
8164                fn from(value: channelsCall) -> Self {
8165                    (value.0,)
8166                }
8167            }
8168            #[automatically_derived]
8169            #[doc(hidden)]
8170            impl ::core::convert::From<UnderlyingRustTuple<'_>> for channelsCall {
8171                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8172                    Self(tuple.0)
8173                }
8174            }
8175        }
8176        {
8177            #[doc(hidden)]
8178            type UnderlyingSolTuple<'a> = (
8179                Balance,
8180                TicketIndex,
8181                Timestamp,
8182                ChannelEpoch,
8183                ChannelStatus,
8184            );
8185            #[doc(hidden)]
8186            type UnderlyingRustTuple<'a> = (
8187                <Balance as alloy::sol_types::SolType>::RustType,
8188                <TicketIndex as alloy::sol_types::SolType>::RustType,
8189                <Timestamp as alloy::sol_types::SolType>::RustType,
8190                <ChannelEpoch as alloy::sol_types::SolType>::RustType,
8191                <ChannelStatus as alloy::sol_types::SolType>::RustType,
8192            );
8193            #[cfg(test)]
8194            #[allow(dead_code, unreachable_patterns)]
8195            fn _type_assertion(
8196                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8197            ) {
8198                match _t {
8199                    alloy_sol_types::private::AssertTypeEq::<
8200                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8201                    >(_) => {}
8202                }
8203            }
8204            #[automatically_derived]
8205            #[doc(hidden)]
8206            impl ::core::convert::From<channelsReturn> for UnderlyingRustTuple<'_> {
8207                fn from(value: channelsReturn) -> Self {
8208                    (
8209                        value.balance,
8210                        value.ticketIndex,
8211                        value.closureTime,
8212                        value.epoch,
8213                        value.status,
8214                    )
8215                }
8216            }
8217            #[automatically_derived]
8218            #[doc(hidden)]
8219            impl ::core::convert::From<UnderlyingRustTuple<'_>> for channelsReturn {
8220                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8221                    Self {
8222                        balance: tuple.0,
8223                        ticketIndex: tuple.1,
8224                        closureTime: tuple.2,
8225                        epoch: tuple.3,
8226                        status: tuple.4,
8227                    }
8228                }
8229            }
8230        }
8231        impl channelsReturn {
8232            fn _tokenize(
8233                &self,
8234            ) -> <channelsCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
8235                (
8236                    <Balance as alloy_sol_types::SolType>::tokenize(&self.balance),
8237                    <TicketIndex as alloy_sol_types::SolType>::tokenize(
8238                        &self.ticketIndex,
8239                    ),
8240                    <Timestamp as alloy_sol_types::SolType>::tokenize(&self.closureTime),
8241                    <ChannelEpoch as alloy_sol_types::SolType>::tokenize(&self.epoch),
8242                    <ChannelStatus as alloy_sol_types::SolType>::tokenize(&self.status),
8243                )
8244            }
8245        }
8246        #[automatically_derived]
8247        impl alloy_sol_types::SolCall for channelsCall {
8248            type Parameters<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
8249            type Token<'a> = <Self::Parameters<
8250                'a,
8251            > as alloy_sol_types::SolType>::Token<'a>;
8252            type Return = channelsReturn;
8253            type ReturnTuple<'a> = (
8254                Balance,
8255                TicketIndex,
8256                Timestamp,
8257                ChannelEpoch,
8258                ChannelStatus,
8259            );
8260            type ReturnToken<'a> = <Self::ReturnTuple<
8261                'a,
8262            > as alloy_sol_types::SolType>::Token<'a>;
8263            const SIGNATURE: &'static str = "channels(bytes32)";
8264            const SELECTOR: [u8; 4] = [122u8, 126u8, 189u8, 123u8];
8265            #[inline]
8266            fn new<'a>(
8267                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
8268            ) -> Self {
8269                tuple.into()
8270            }
8271            #[inline]
8272            fn tokenize(&self) -> Self::Token<'_> {
8273                (
8274                    <alloy::sol_types::sol_data::FixedBytes<
8275                        32,
8276                    > as alloy_sol_types::SolType>::tokenize(&self.0),
8277                )
8278            }
8279            #[inline]
8280            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
8281                channelsReturn::_tokenize(ret)
8282            }
8283            #[inline]
8284            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
8285                <Self::ReturnTuple<
8286                    '_,
8287                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
8288                    .map(Into::into)
8289            }
8290            #[inline]
8291            fn abi_decode_returns_validate(
8292                data: &[u8],
8293            ) -> alloy_sol_types::Result<Self::Return> {
8294                <Self::ReturnTuple<
8295                    '_,
8296                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
8297                    .map(Into::into)
8298            }
8299        }
8300    };
8301    #[derive(serde::Serialize, serde::Deserialize)]
8302    #[derive(Default, Debug, PartialEq, Eq, Hash)]
8303    /**Function with signature `closeIncomingChannel(address)` and selector `0x1a7ffe7a`.
8304```solidity
8305function closeIncomingChannel(address source) external;
8306```*/
8307    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8308    #[derive(Clone)]
8309    pub struct closeIncomingChannelCall {
8310        #[allow(missing_docs)]
8311        pub source: alloy::sol_types::private::Address,
8312    }
8313    ///Container type for the return parameters of the [`closeIncomingChannel(address)`](closeIncomingChannelCall) function.
8314    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8315    #[derive(Clone)]
8316    pub struct closeIncomingChannelReturn {}
8317    #[allow(
8318        non_camel_case_types,
8319        non_snake_case,
8320        clippy::pub_underscore_fields,
8321        clippy::style
8322    )]
8323    const _: () = {
8324        use alloy::sol_types as alloy_sol_types;
8325        {
8326            #[doc(hidden)]
8327            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
8328            #[doc(hidden)]
8329            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
8330            #[cfg(test)]
8331            #[allow(dead_code, unreachable_patterns)]
8332            fn _type_assertion(
8333                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8334            ) {
8335                match _t {
8336                    alloy_sol_types::private::AssertTypeEq::<
8337                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8338                    >(_) => {}
8339                }
8340            }
8341            #[automatically_derived]
8342            #[doc(hidden)]
8343            impl ::core::convert::From<closeIncomingChannelCall>
8344            for UnderlyingRustTuple<'_> {
8345                fn from(value: closeIncomingChannelCall) -> Self {
8346                    (value.source,)
8347                }
8348            }
8349            #[automatically_derived]
8350            #[doc(hidden)]
8351            impl ::core::convert::From<UnderlyingRustTuple<'_>>
8352            for closeIncomingChannelCall {
8353                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8354                    Self { source: tuple.0 }
8355                }
8356            }
8357        }
8358        {
8359            #[doc(hidden)]
8360            type UnderlyingSolTuple<'a> = ();
8361            #[doc(hidden)]
8362            type UnderlyingRustTuple<'a> = ();
8363            #[cfg(test)]
8364            #[allow(dead_code, unreachable_patterns)]
8365            fn _type_assertion(
8366                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8367            ) {
8368                match _t {
8369                    alloy_sol_types::private::AssertTypeEq::<
8370                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8371                    >(_) => {}
8372                }
8373            }
8374            #[automatically_derived]
8375            #[doc(hidden)]
8376            impl ::core::convert::From<closeIncomingChannelReturn>
8377            for UnderlyingRustTuple<'_> {
8378                fn from(value: closeIncomingChannelReturn) -> Self {
8379                    ()
8380                }
8381            }
8382            #[automatically_derived]
8383            #[doc(hidden)]
8384            impl ::core::convert::From<UnderlyingRustTuple<'_>>
8385            for closeIncomingChannelReturn {
8386                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8387                    Self {}
8388                }
8389            }
8390        }
8391        impl closeIncomingChannelReturn {
8392            fn _tokenize(
8393                &self,
8394            ) -> <closeIncomingChannelCall as alloy_sol_types::SolCall>::ReturnToken<
8395                '_,
8396            > {
8397                ()
8398            }
8399        }
8400        #[automatically_derived]
8401        impl alloy_sol_types::SolCall for closeIncomingChannelCall {
8402            type Parameters<'a> = (alloy::sol_types::sol_data::Address,);
8403            type Token<'a> = <Self::Parameters<
8404                'a,
8405            > as alloy_sol_types::SolType>::Token<'a>;
8406            type Return = closeIncomingChannelReturn;
8407            type ReturnTuple<'a> = ();
8408            type ReturnToken<'a> = <Self::ReturnTuple<
8409                'a,
8410            > as alloy_sol_types::SolType>::Token<'a>;
8411            const SIGNATURE: &'static str = "closeIncomingChannel(address)";
8412            const SELECTOR: [u8; 4] = [26u8, 127u8, 254u8, 122u8];
8413            #[inline]
8414            fn new<'a>(
8415                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
8416            ) -> Self {
8417                tuple.into()
8418            }
8419            #[inline]
8420            fn tokenize(&self) -> Self::Token<'_> {
8421                (
8422                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
8423                        &self.source,
8424                    ),
8425                )
8426            }
8427            #[inline]
8428            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
8429                closeIncomingChannelReturn::_tokenize(ret)
8430            }
8431            #[inline]
8432            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
8433                <Self::ReturnTuple<
8434                    '_,
8435                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
8436                    .map(Into::into)
8437            }
8438            #[inline]
8439            fn abi_decode_returns_validate(
8440                data: &[u8],
8441            ) -> alloy_sol_types::Result<Self::Return> {
8442                <Self::ReturnTuple<
8443                    '_,
8444                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
8445                    .map(Into::into)
8446            }
8447        }
8448    };
8449    #[derive(serde::Serialize, serde::Deserialize)]
8450    #[derive(Default, Debug, PartialEq, Eq, Hash)]
8451    /**Function with signature `closeIncomingChannelSafe(address,address)` and selector `0x54a2edf5`.
8452```solidity
8453function closeIncomingChannelSafe(address selfAddress, address source) external;
8454```*/
8455    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8456    #[derive(Clone)]
8457    pub struct closeIncomingChannelSafeCall {
8458        #[allow(missing_docs)]
8459        pub selfAddress: alloy::sol_types::private::Address,
8460        #[allow(missing_docs)]
8461        pub source: alloy::sol_types::private::Address,
8462    }
8463    ///Container type for the return parameters of the [`closeIncomingChannelSafe(address,address)`](closeIncomingChannelSafeCall) function.
8464    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8465    #[derive(Clone)]
8466    pub struct closeIncomingChannelSafeReturn {}
8467    #[allow(
8468        non_camel_case_types,
8469        non_snake_case,
8470        clippy::pub_underscore_fields,
8471        clippy::style
8472    )]
8473    const _: () = {
8474        use alloy::sol_types as alloy_sol_types;
8475        {
8476            #[doc(hidden)]
8477            type UnderlyingSolTuple<'a> = (
8478                alloy::sol_types::sol_data::Address,
8479                alloy::sol_types::sol_data::Address,
8480            );
8481            #[doc(hidden)]
8482            type UnderlyingRustTuple<'a> = (
8483                alloy::sol_types::private::Address,
8484                alloy::sol_types::private::Address,
8485            );
8486            #[cfg(test)]
8487            #[allow(dead_code, unreachable_patterns)]
8488            fn _type_assertion(
8489                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8490            ) {
8491                match _t {
8492                    alloy_sol_types::private::AssertTypeEq::<
8493                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8494                    >(_) => {}
8495                }
8496            }
8497            #[automatically_derived]
8498            #[doc(hidden)]
8499            impl ::core::convert::From<closeIncomingChannelSafeCall>
8500            for UnderlyingRustTuple<'_> {
8501                fn from(value: closeIncomingChannelSafeCall) -> Self {
8502                    (value.selfAddress, value.source)
8503                }
8504            }
8505            #[automatically_derived]
8506            #[doc(hidden)]
8507            impl ::core::convert::From<UnderlyingRustTuple<'_>>
8508            for closeIncomingChannelSafeCall {
8509                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8510                    Self {
8511                        selfAddress: tuple.0,
8512                        source: tuple.1,
8513                    }
8514                }
8515            }
8516        }
8517        {
8518            #[doc(hidden)]
8519            type UnderlyingSolTuple<'a> = ();
8520            #[doc(hidden)]
8521            type UnderlyingRustTuple<'a> = ();
8522            #[cfg(test)]
8523            #[allow(dead_code, unreachable_patterns)]
8524            fn _type_assertion(
8525                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8526            ) {
8527                match _t {
8528                    alloy_sol_types::private::AssertTypeEq::<
8529                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8530                    >(_) => {}
8531                }
8532            }
8533            #[automatically_derived]
8534            #[doc(hidden)]
8535            impl ::core::convert::From<closeIncomingChannelSafeReturn>
8536            for UnderlyingRustTuple<'_> {
8537                fn from(value: closeIncomingChannelSafeReturn) -> Self {
8538                    ()
8539                }
8540            }
8541            #[automatically_derived]
8542            #[doc(hidden)]
8543            impl ::core::convert::From<UnderlyingRustTuple<'_>>
8544            for closeIncomingChannelSafeReturn {
8545                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8546                    Self {}
8547                }
8548            }
8549        }
8550        impl closeIncomingChannelSafeReturn {
8551            fn _tokenize(
8552                &self,
8553            ) -> <closeIncomingChannelSafeCall as alloy_sol_types::SolCall>::ReturnToken<
8554                '_,
8555            > {
8556                ()
8557            }
8558        }
8559        #[automatically_derived]
8560        impl alloy_sol_types::SolCall for closeIncomingChannelSafeCall {
8561            type Parameters<'a> = (
8562                alloy::sol_types::sol_data::Address,
8563                alloy::sol_types::sol_data::Address,
8564            );
8565            type Token<'a> = <Self::Parameters<
8566                'a,
8567            > as alloy_sol_types::SolType>::Token<'a>;
8568            type Return = closeIncomingChannelSafeReturn;
8569            type ReturnTuple<'a> = ();
8570            type ReturnToken<'a> = <Self::ReturnTuple<
8571                'a,
8572            > as alloy_sol_types::SolType>::Token<'a>;
8573            const SIGNATURE: &'static str = "closeIncomingChannelSafe(address,address)";
8574            const SELECTOR: [u8; 4] = [84u8, 162u8, 237u8, 245u8];
8575            #[inline]
8576            fn new<'a>(
8577                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
8578            ) -> Self {
8579                tuple.into()
8580            }
8581            #[inline]
8582            fn tokenize(&self) -> Self::Token<'_> {
8583                (
8584                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
8585                        &self.selfAddress,
8586                    ),
8587                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
8588                        &self.source,
8589                    ),
8590                )
8591            }
8592            #[inline]
8593            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
8594                closeIncomingChannelSafeReturn::_tokenize(ret)
8595            }
8596            #[inline]
8597            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
8598                <Self::ReturnTuple<
8599                    '_,
8600                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
8601                    .map(Into::into)
8602            }
8603            #[inline]
8604            fn abi_decode_returns_validate(
8605                data: &[u8],
8606            ) -> alloy_sol_types::Result<Self::Return> {
8607                <Self::ReturnTuple<
8608                    '_,
8609                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
8610                    .map(Into::into)
8611            }
8612        }
8613    };
8614    #[derive(serde::Serialize, serde::Deserialize)]
8615    #[derive(Default, Debug, PartialEq, Eq, Hash)]
8616    /**Function with signature `domainSeparator()` and selector `0xf698da25`.
8617```solidity
8618function domainSeparator() external view returns (bytes32);
8619```*/
8620    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8621    #[derive(Clone)]
8622    pub struct domainSeparatorCall;
8623    #[derive(serde::Serialize, serde::Deserialize)]
8624    #[derive(Default, Debug, PartialEq, Eq, Hash)]
8625    ///Container type for the return parameters of the [`domainSeparator()`](domainSeparatorCall) function.
8626    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8627    #[derive(Clone)]
8628    pub struct domainSeparatorReturn {
8629        #[allow(missing_docs)]
8630        pub _0: alloy::sol_types::private::FixedBytes<32>,
8631    }
8632    #[allow(
8633        non_camel_case_types,
8634        non_snake_case,
8635        clippy::pub_underscore_fields,
8636        clippy::style
8637    )]
8638    const _: () = {
8639        use alloy::sol_types as alloy_sol_types;
8640        {
8641            #[doc(hidden)]
8642            type UnderlyingSolTuple<'a> = ();
8643            #[doc(hidden)]
8644            type UnderlyingRustTuple<'a> = ();
8645            #[cfg(test)]
8646            #[allow(dead_code, unreachable_patterns)]
8647            fn _type_assertion(
8648                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8649            ) {
8650                match _t {
8651                    alloy_sol_types::private::AssertTypeEq::<
8652                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8653                    >(_) => {}
8654                }
8655            }
8656            #[automatically_derived]
8657            #[doc(hidden)]
8658            impl ::core::convert::From<domainSeparatorCall> for UnderlyingRustTuple<'_> {
8659                fn from(value: domainSeparatorCall) -> Self {
8660                    ()
8661                }
8662            }
8663            #[automatically_derived]
8664            #[doc(hidden)]
8665            impl ::core::convert::From<UnderlyingRustTuple<'_>> for domainSeparatorCall {
8666                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8667                    Self
8668                }
8669            }
8670        }
8671        {
8672            #[doc(hidden)]
8673            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
8674            #[doc(hidden)]
8675            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
8676            #[cfg(test)]
8677            #[allow(dead_code, unreachable_patterns)]
8678            fn _type_assertion(
8679                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8680            ) {
8681                match _t {
8682                    alloy_sol_types::private::AssertTypeEq::<
8683                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8684                    >(_) => {}
8685                }
8686            }
8687            #[automatically_derived]
8688            #[doc(hidden)]
8689            impl ::core::convert::From<domainSeparatorReturn>
8690            for UnderlyingRustTuple<'_> {
8691                fn from(value: domainSeparatorReturn) -> Self {
8692                    (value._0,)
8693                }
8694            }
8695            #[automatically_derived]
8696            #[doc(hidden)]
8697            impl ::core::convert::From<UnderlyingRustTuple<'_>>
8698            for domainSeparatorReturn {
8699                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8700                    Self { _0: tuple.0 }
8701                }
8702            }
8703        }
8704        #[automatically_derived]
8705        impl alloy_sol_types::SolCall for domainSeparatorCall {
8706            type Parameters<'a> = ();
8707            type Token<'a> = <Self::Parameters<
8708                'a,
8709            > as alloy_sol_types::SolType>::Token<'a>;
8710            type Return = alloy::sol_types::private::FixedBytes<32>;
8711            type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
8712            type ReturnToken<'a> = <Self::ReturnTuple<
8713                'a,
8714            > as alloy_sol_types::SolType>::Token<'a>;
8715            const SIGNATURE: &'static str = "domainSeparator()";
8716            const SELECTOR: [u8; 4] = [246u8, 152u8, 218u8, 37u8];
8717            #[inline]
8718            fn new<'a>(
8719                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
8720            ) -> Self {
8721                tuple.into()
8722            }
8723            #[inline]
8724            fn tokenize(&self) -> Self::Token<'_> {
8725                ()
8726            }
8727            #[inline]
8728            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
8729                (
8730                    <alloy::sol_types::sol_data::FixedBytes<
8731                        32,
8732                    > as alloy_sol_types::SolType>::tokenize(ret),
8733                )
8734            }
8735            #[inline]
8736            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
8737                <Self::ReturnTuple<
8738                    '_,
8739                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
8740                    .map(|r| {
8741                        let r: domainSeparatorReturn = r.into();
8742                        r._0
8743                    })
8744            }
8745            #[inline]
8746            fn abi_decode_returns_validate(
8747                data: &[u8],
8748            ) -> alloy_sol_types::Result<Self::Return> {
8749                <Self::ReturnTuple<
8750                    '_,
8751                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
8752                    .map(|r| {
8753                        let r: domainSeparatorReturn = r.into();
8754                        r._0
8755                    })
8756            }
8757        }
8758    };
8759    #[derive(serde::Serialize, serde::Deserialize)]
8760    #[derive(Default, Debug, PartialEq, Eq, Hash)]
8761    /**Function with signature `finalizeOutgoingChannelClosure(address)` and selector `0x23cb3ac0`.
8762```solidity
8763function finalizeOutgoingChannelClosure(address destination) external;
8764```*/
8765    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8766    #[derive(Clone)]
8767    pub struct finalizeOutgoingChannelClosureCall {
8768        #[allow(missing_docs)]
8769        pub destination: alloy::sol_types::private::Address,
8770    }
8771    ///Container type for the return parameters of the [`finalizeOutgoingChannelClosure(address)`](finalizeOutgoingChannelClosureCall) function.
8772    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8773    #[derive(Clone)]
8774    pub struct finalizeOutgoingChannelClosureReturn {}
8775    #[allow(
8776        non_camel_case_types,
8777        non_snake_case,
8778        clippy::pub_underscore_fields,
8779        clippy::style
8780    )]
8781    const _: () = {
8782        use alloy::sol_types as alloy_sol_types;
8783        {
8784            #[doc(hidden)]
8785            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
8786            #[doc(hidden)]
8787            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
8788            #[cfg(test)]
8789            #[allow(dead_code, unreachable_patterns)]
8790            fn _type_assertion(
8791                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8792            ) {
8793                match _t {
8794                    alloy_sol_types::private::AssertTypeEq::<
8795                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8796                    >(_) => {}
8797                }
8798            }
8799            #[automatically_derived]
8800            #[doc(hidden)]
8801            impl ::core::convert::From<finalizeOutgoingChannelClosureCall>
8802            for UnderlyingRustTuple<'_> {
8803                fn from(value: finalizeOutgoingChannelClosureCall) -> Self {
8804                    (value.destination,)
8805                }
8806            }
8807            #[automatically_derived]
8808            #[doc(hidden)]
8809            impl ::core::convert::From<UnderlyingRustTuple<'_>>
8810            for finalizeOutgoingChannelClosureCall {
8811                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8812                    Self { destination: tuple.0 }
8813                }
8814            }
8815        }
8816        {
8817            #[doc(hidden)]
8818            type UnderlyingSolTuple<'a> = ();
8819            #[doc(hidden)]
8820            type UnderlyingRustTuple<'a> = ();
8821            #[cfg(test)]
8822            #[allow(dead_code, unreachable_patterns)]
8823            fn _type_assertion(
8824                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8825            ) {
8826                match _t {
8827                    alloy_sol_types::private::AssertTypeEq::<
8828                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8829                    >(_) => {}
8830                }
8831            }
8832            #[automatically_derived]
8833            #[doc(hidden)]
8834            impl ::core::convert::From<finalizeOutgoingChannelClosureReturn>
8835            for UnderlyingRustTuple<'_> {
8836                fn from(value: finalizeOutgoingChannelClosureReturn) -> Self {
8837                    ()
8838                }
8839            }
8840            #[automatically_derived]
8841            #[doc(hidden)]
8842            impl ::core::convert::From<UnderlyingRustTuple<'_>>
8843            for finalizeOutgoingChannelClosureReturn {
8844                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8845                    Self {}
8846                }
8847            }
8848        }
8849        impl finalizeOutgoingChannelClosureReturn {
8850            fn _tokenize(
8851                &self,
8852            ) -> <finalizeOutgoingChannelClosureCall as alloy_sol_types::SolCall>::ReturnToken<
8853                '_,
8854            > {
8855                ()
8856            }
8857        }
8858        #[automatically_derived]
8859        impl alloy_sol_types::SolCall for finalizeOutgoingChannelClosureCall {
8860            type Parameters<'a> = (alloy::sol_types::sol_data::Address,);
8861            type Token<'a> = <Self::Parameters<
8862                'a,
8863            > as alloy_sol_types::SolType>::Token<'a>;
8864            type Return = finalizeOutgoingChannelClosureReturn;
8865            type ReturnTuple<'a> = ();
8866            type ReturnToken<'a> = <Self::ReturnTuple<
8867                'a,
8868            > as alloy_sol_types::SolType>::Token<'a>;
8869            const SIGNATURE: &'static str = "finalizeOutgoingChannelClosure(address)";
8870            const SELECTOR: [u8; 4] = [35u8, 203u8, 58u8, 192u8];
8871            #[inline]
8872            fn new<'a>(
8873                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
8874            ) -> Self {
8875                tuple.into()
8876            }
8877            #[inline]
8878            fn tokenize(&self) -> Self::Token<'_> {
8879                (
8880                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
8881                        &self.destination,
8882                    ),
8883                )
8884            }
8885            #[inline]
8886            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
8887                finalizeOutgoingChannelClosureReturn::_tokenize(ret)
8888            }
8889            #[inline]
8890            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
8891                <Self::ReturnTuple<
8892                    '_,
8893                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
8894                    .map(Into::into)
8895            }
8896            #[inline]
8897            fn abi_decode_returns_validate(
8898                data: &[u8],
8899            ) -> alloy_sol_types::Result<Self::Return> {
8900                <Self::ReturnTuple<
8901                    '_,
8902                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
8903                    .map(Into::into)
8904            }
8905        }
8906    };
8907    #[derive(serde::Serialize, serde::Deserialize)]
8908    #[derive(Default, Debug, PartialEq, Eq, Hash)]
8909    /**Function with signature `finalizeOutgoingChannelClosureSafe(address,address)` and selector `0x651514bf`.
8910```solidity
8911function finalizeOutgoingChannelClosureSafe(address selfAddress, address destination) external;
8912```*/
8913    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8914    #[derive(Clone)]
8915    pub struct finalizeOutgoingChannelClosureSafeCall {
8916        #[allow(missing_docs)]
8917        pub selfAddress: alloy::sol_types::private::Address,
8918        #[allow(missing_docs)]
8919        pub destination: alloy::sol_types::private::Address,
8920    }
8921    ///Container type for the return parameters of the [`finalizeOutgoingChannelClosureSafe(address,address)`](finalizeOutgoingChannelClosureSafeCall) function.
8922    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
8923    #[derive(Clone)]
8924    pub struct finalizeOutgoingChannelClosureSafeReturn {}
8925    #[allow(
8926        non_camel_case_types,
8927        non_snake_case,
8928        clippy::pub_underscore_fields,
8929        clippy::style
8930    )]
8931    const _: () = {
8932        use alloy::sol_types as alloy_sol_types;
8933        {
8934            #[doc(hidden)]
8935            type UnderlyingSolTuple<'a> = (
8936                alloy::sol_types::sol_data::Address,
8937                alloy::sol_types::sol_data::Address,
8938            );
8939            #[doc(hidden)]
8940            type UnderlyingRustTuple<'a> = (
8941                alloy::sol_types::private::Address,
8942                alloy::sol_types::private::Address,
8943            );
8944            #[cfg(test)]
8945            #[allow(dead_code, unreachable_patterns)]
8946            fn _type_assertion(
8947                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8948            ) {
8949                match _t {
8950                    alloy_sol_types::private::AssertTypeEq::<
8951                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8952                    >(_) => {}
8953                }
8954            }
8955            #[automatically_derived]
8956            #[doc(hidden)]
8957            impl ::core::convert::From<finalizeOutgoingChannelClosureSafeCall>
8958            for UnderlyingRustTuple<'_> {
8959                fn from(value: finalizeOutgoingChannelClosureSafeCall) -> Self {
8960                    (value.selfAddress, value.destination)
8961                }
8962            }
8963            #[automatically_derived]
8964            #[doc(hidden)]
8965            impl ::core::convert::From<UnderlyingRustTuple<'_>>
8966            for finalizeOutgoingChannelClosureSafeCall {
8967                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
8968                    Self {
8969                        selfAddress: tuple.0,
8970                        destination: tuple.1,
8971                    }
8972                }
8973            }
8974        }
8975        {
8976            #[doc(hidden)]
8977            type UnderlyingSolTuple<'a> = ();
8978            #[doc(hidden)]
8979            type UnderlyingRustTuple<'a> = ();
8980            #[cfg(test)]
8981            #[allow(dead_code, unreachable_patterns)]
8982            fn _type_assertion(
8983                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
8984            ) {
8985                match _t {
8986                    alloy_sol_types::private::AssertTypeEq::<
8987                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
8988                    >(_) => {}
8989                }
8990            }
8991            #[automatically_derived]
8992            #[doc(hidden)]
8993            impl ::core::convert::From<finalizeOutgoingChannelClosureSafeReturn>
8994            for UnderlyingRustTuple<'_> {
8995                fn from(value: finalizeOutgoingChannelClosureSafeReturn) -> Self {
8996                    ()
8997                }
8998            }
8999            #[automatically_derived]
9000            #[doc(hidden)]
9001            impl ::core::convert::From<UnderlyingRustTuple<'_>>
9002            for finalizeOutgoingChannelClosureSafeReturn {
9003                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
9004                    Self {}
9005                }
9006            }
9007        }
9008        impl finalizeOutgoingChannelClosureSafeReturn {
9009            fn _tokenize(
9010                &self,
9011            ) -> <finalizeOutgoingChannelClosureSafeCall as alloy_sol_types::SolCall>::ReturnToken<
9012                '_,
9013            > {
9014                ()
9015            }
9016        }
9017        #[automatically_derived]
9018        impl alloy_sol_types::SolCall for finalizeOutgoingChannelClosureSafeCall {
9019            type Parameters<'a> = (
9020                alloy::sol_types::sol_data::Address,
9021                alloy::sol_types::sol_data::Address,
9022            );
9023            type Token<'a> = <Self::Parameters<
9024                'a,
9025            > as alloy_sol_types::SolType>::Token<'a>;
9026            type Return = finalizeOutgoingChannelClosureSafeReturn;
9027            type ReturnTuple<'a> = ();
9028            type ReturnToken<'a> = <Self::ReturnTuple<
9029                'a,
9030            > as alloy_sol_types::SolType>::Token<'a>;
9031            const SIGNATURE: &'static str = "finalizeOutgoingChannelClosureSafe(address,address)";
9032            const SELECTOR: [u8; 4] = [101u8, 21u8, 20u8, 191u8];
9033            #[inline]
9034            fn new<'a>(
9035                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
9036            ) -> Self {
9037                tuple.into()
9038            }
9039            #[inline]
9040            fn tokenize(&self) -> Self::Token<'_> {
9041                (
9042                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
9043                        &self.selfAddress,
9044                    ),
9045                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
9046                        &self.destination,
9047                    ),
9048                )
9049            }
9050            #[inline]
9051            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
9052                finalizeOutgoingChannelClosureSafeReturn::_tokenize(ret)
9053            }
9054            #[inline]
9055            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
9056                <Self::ReturnTuple<
9057                    '_,
9058                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
9059                    .map(Into::into)
9060            }
9061            #[inline]
9062            fn abi_decode_returns_validate(
9063                data: &[u8],
9064            ) -> alloy_sol_types::Result<Self::Return> {
9065                <Self::ReturnTuple<
9066                    '_,
9067                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
9068                    .map(Into::into)
9069            }
9070        }
9071    };
9072    #[derive(serde::Serialize, serde::Deserialize)]
9073    #[derive(Default, Debug, PartialEq, Eq, Hash)]
9074    /**Function with signature `fundChannel(address,uint96)` and selector `0xfc55309a`.
9075```solidity
9076function fundChannel(address account, Balance amount) external;
9077```*/
9078    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
9079    #[derive(Clone)]
9080    pub struct fundChannelCall {
9081        #[allow(missing_docs)]
9082        pub account: alloy::sol_types::private::Address,
9083        #[allow(missing_docs)]
9084        pub amount: <Balance as alloy::sol_types::SolType>::RustType,
9085    }
9086    ///Container type for the return parameters of the [`fundChannel(address,uint96)`](fundChannelCall) function.
9087    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
9088    #[derive(Clone)]
9089    pub struct fundChannelReturn {}
9090    #[allow(
9091        non_camel_case_types,
9092        non_snake_case,
9093        clippy::pub_underscore_fields,
9094        clippy::style
9095    )]
9096    const _: () = {
9097        use alloy::sol_types as alloy_sol_types;
9098        {
9099            #[doc(hidden)]
9100            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address, Balance);
9101            #[doc(hidden)]
9102            type UnderlyingRustTuple<'a> = (
9103                alloy::sol_types::private::Address,
9104                <Balance as alloy::sol_types::SolType>::RustType,
9105            );
9106            #[cfg(test)]
9107            #[allow(dead_code, unreachable_patterns)]
9108            fn _type_assertion(
9109                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
9110            ) {
9111                match _t {
9112                    alloy_sol_types::private::AssertTypeEq::<
9113                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
9114                    >(_) => {}
9115                }
9116            }
9117            #[automatically_derived]
9118            #[doc(hidden)]
9119            impl ::core::convert::From<fundChannelCall> for UnderlyingRustTuple<'_> {
9120                fn from(value: fundChannelCall) -> Self {
9121                    (value.account, value.amount)
9122                }
9123            }
9124            #[automatically_derived]
9125            #[doc(hidden)]
9126            impl ::core::convert::From<UnderlyingRustTuple<'_>> for fundChannelCall {
9127                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
9128                    Self {
9129                        account: tuple.0,
9130                        amount: tuple.1,
9131                    }
9132                }
9133            }
9134        }
9135        {
9136            #[doc(hidden)]
9137            type UnderlyingSolTuple<'a> = ();
9138            #[doc(hidden)]
9139            type UnderlyingRustTuple<'a> = ();
9140            #[cfg(test)]
9141            #[allow(dead_code, unreachable_patterns)]
9142            fn _type_assertion(
9143                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
9144            ) {
9145                match _t {
9146                    alloy_sol_types::private::AssertTypeEq::<
9147                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
9148                    >(_) => {}
9149                }
9150            }
9151            #[automatically_derived]
9152            #[doc(hidden)]
9153            impl ::core::convert::From<fundChannelReturn> for UnderlyingRustTuple<'_> {
9154                fn from(value: fundChannelReturn) -> Self {
9155                    ()
9156                }
9157            }
9158            #[automatically_derived]
9159            #[doc(hidden)]
9160            impl ::core::convert::From<UnderlyingRustTuple<'_>> for fundChannelReturn {
9161                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
9162                    Self {}
9163                }
9164            }
9165        }
9166        impl fundChannelReturn {
9167            fn _tokenize(
9168                &self,
9169            ) -> <fundChannelCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
9170                ()
9171            }
9172        }
9173        #[automatically_derived]
9174        impl alloy_sol_types::SolCall for fundChannelCall {
9175            type Parameters<'a> = (alloy::sol_types::sol_data::Address, Balance);
9176            type Token<'a> = <Self::Parameters<
9177                'a,
9178            > as alloy_sol_types::SolType>::Token<'a>;
9179            type Return = fundChannelReturn;
9180            type ReturnTuple<'a> = ();
9181            type ReturnToken<'a> = <Self::ReturnTuple<
9182                'a,
9183            > as alloy_sol_types::SolType>::Token<'a>;
9184            const SIGNATURE: &'static str = "fundChannel(address,uint96)";
9185            const SELECTOR: [u8; 4] = [252u8, 85u8, 48u8, 154u8];
9186            #[inline]
9187            fn new<'a>(
9188                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
9189            ) -> Self {
9190                tuple.into()
9191            }
9192            #[inline]
9193            fn tokenize(&self) -> Self::Token<'_> {
9194                (
9195                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
9196                        &self.account,
9197                    ),
9198                    <Balance as alloy_sol_types::SolType>::tokenize(&self.amount),
9199                )
9200            }
9201            #[inline]
9202            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
9203                fundChannelReturn::_tokenize(ret)
9204            }
9205            #[inline]
9206            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
9207                <Self::ReturnTuple<
9208                    '_,
9209                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
9210                    .map(Into::into)
9211            }
9212            #[inline]
9213            fn abi_decode_returns_validate(
9214                data: &[u8],
9215            ) -> alloy_sol_types::Result<Self::Return> {
9216                <Self::ReturnTuple<
9217                    '_,
9218                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
9219                    .map(Into::into)
9220            }
9221        }
9222    };
9223    #[derive(serde::Serialize, serde::Deserialize)]
9224    #[derive(Default, Debug, PartialEq, Eq, Hash)]
9225    /**Function with signature `fundChannelSafe(address,address,uint96)` and selector `0x0abec58f`.
9226```solidity
9227function fundChannelSafe(address selfAddress, address account, Balance amount) external;
9228```*/
9229    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
9230    #[derive(Clone)]
9231    pub struct fundChannelSafeCall {
9232        #[allow(missing_docs)]
9233        pub selfAddress: alloy::sol_types::private::Address,
9234        #[allow(missing_docs)]
9235        pub account: alloy::sol_types::private::Address,
9236        #[allow(missing_docs)]
9237        pub amount: <Balance as alloy::sol_types::SolType>::RustType,
9238    }
9239    ///Container type for the return parameters of the [`fundChannelSafe(address,address,uint96)`](fundChannelSafeCall) function.
9240    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
9241    #[derive(Clone)]
9242    pub struct fundChannelSafeReturn {}
9243    #[allow(
9244        non_camel_case_types,
9245        non_snake_case,
9246        clippy::pub_underscore_fields,
9247        clippy::style
9248    )]
9249    const _: () = {
9250        use alloy::sol_types as alloy_sol_types;
9251        {
9252            #[doc(hidden)]
9253            type UnderlyingSolTuple<'a> = (
9254                alloy::sol_types::sol_data::Address,
9255                alloy::sol_types::sol_data::Address,
9256                Balance,
9257            );
9258            #[doc(hidden)]
9259            type UnderlyingRustTuple<'a> = (
9260                alloy::sol_types::private::Address,
9261                alloy::sol_types::private::Address,
9262                <Balance as alloy::sol_types::SolType>::RustType,
9263            );
9264            #[cfg(test)]
9265            #[allow(dead_code, unreachable_patterns)]
9266            fn _type_assertion(
9267                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
9268            ) {
9269                match _t {
9270                    alloy_sol_types::private::AssertTypeEq::<
9271                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
9272                    >(_) => {}
9273                }
9274            }
9275            #[automatically_derived]
9276            #[doc(hidden)]
9277            impl ::core::convert::From<fundChannelSafeCall> for UnderlyingRustTuple<'_> {
9278                fn from(value: fundChannelSafeCall) -> Self {
9279                    (value.selfAddress, value.account, value.amount)
9280                }
9281            }
9282            #[automatically_derived]
9283            #[doc(hidden)]
9284            impl ::core::convert::From<UnderlyingRustTuple<'_>> for fundChannelSafeCall {
9285                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
9286                    Self {
9287                        selfAddress: tuple.0,
9288                        account: tuple.1,
9289                        amount: tuple.2,
9290                    }
9291                }
9292            }
9293        }
9294        {
9295            #[doc(hidden)]
9296            type UnderlyingSolTuple<'a> = ();
9297            #[doc(hidden)]
9298            type UnderlyingRustTuple<'a> = ();
9299            #[cfg(test)]
9300            #[allow(dead_code, unreachable_patterns)]
9301            fn _type_assertion(
9302                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
9303            ) {
9304                match _t {
9305                    alloy_sol_types::private::AssertTypeEq::<
9306                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
9307                    >(_) => {}
9308                }
9309            }
9310            #[automatically_derived]
9311            #[doc(hidden)]
9312            impl ::core::convert::From<fundChannelSafeReturn>
9313            for UnderlyingRustTuple<'_> {
9314                fn from(value: fundChannelSafeReturn) -> Self {
9315                    ()
9316                }
9317            }
9318            #[automatically_derived]
9319            #[doc(hidden)]
9320            impl ::core::convert::From<UnderlyingRustTuple<'_>>
9321            for fundChannelSafeReturn {
9322                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
9323                    Self {}
9324                }
9325            }
9326        }
9327        impl fundChannelSafeReturn {
9328            fn _tokenize(
9329                &self,
9330            ) -> <fundChannelSafeCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
9331                ()
9332            }
9333        }
9334        #[automatically_derived]
9335        impl alloy_sol_types::SolCall for fundChannelSafeCall {
9336            type Parameters<'a> = (
9337                alloy::sol_types::sol_data::Address,
9338                alloy::sol_types::sol_data::Address,
9339                Balance,
9340            );
9341            type Token<'a> = <Self::Parameters<
9342                'a,
9343            > as alloy_sol_types::SolType>::Token<'a>;
9344            type Return = fundChannelSafeReturn;
9345            type ReturnTuple<'a> = ();
9346            type ReturnToken<'a> = <Self::ReturnTuple<
9347                'a,
9348            > as alloy_sol_types::SolType>::Token<'a>;
9349            const SIGNATURE: &'static str = "fundChannelSafe(address,address,uint96)";
9350            const SELECTOR: [u8; 4] = [10u8, 190u8, 197u8, 143u8];
9351            #[inline]
9352            fn new<'a>(
9353                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
9354            ) -> Self {
9355                tuple.into()
9356            }
9357            #[inline]
9358            fn tokenize(&self) -> Self::Token<'_> {
9359                (
9360                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
9361                        &self.selfAddress,
9362                    ),
9363                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
9364                        &self.account,
9365                    ),
9366                    <Balance as alloy_sol_types::SolType>::tokenize(&self.amount),
9367                )
9368            }
9369            #[inline]
9370            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
9371                fundChannelSafeReturn::_tokenize(ret)
9372            }
9373            #[inline]
9374            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
9375                <Self::ReturnTuple<
9376                    '_,
9377                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
9378                    .map(Into::into)
9379            }
9380            #[inline]
9381            fn abi_decode_returns_validate(
9382                data: &[u8],
9383            ) -> alloy_sol_types::Result<Self::Return> {
9384                <Self::ReturnTuple<
9385                    '_,
9386                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
9387                    .map(Into::into)
9388            }
9389        }
9390    };
9391    #[derive(serde::Serialize, serde::Deserialize)]
9392    #[derive(Default, Debug, PartialEq, Eq, Hash)]
9393    /**Function with signature `initiateOutgoingChannelClosure(address)` and selector `0x7c8e28da`.
9394```solidity
9395function initiateOutgoingChannelClosure(address destination) external;
9396```*/
9397    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
9398    #[derive(Clone)]
9399    pub struct initiateOutgoingChannelClosureCall {
9400        #[allow(missing_docs)]
9401        pub destination: alloy::sol_types::private::Address,
9402    }
9403    ///Container type for the return parameters of the [`initiateOutgoingChannelClosure(address)`](initiateOutgoingChannelClosureCall) function.
9404    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
9405    #[derive(Clone)]
9406    pub struct initiateOutgoingChannelClosureReturn {}
9407    #[allow(
9408        non_camel_case_types,
9409        non_snake_case,
9410        clippy::pub_underscore_fields,
9411        clippy::style
9412    )]
9413    const _: () = {
9414        use alloy::sol_types as alloy_sol_types;
9415        {
9416            #[doc(hidden)]
9417            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
9418            #[doc(hidden)]
9419            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
9420            #[cfg(test)]
9421            #[allow(dead_code, unreachable_patterns)]
9422            fn _type_assertion(
9423                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
9424            ) {
9425                match _t {
9426                    alloy_sol_types::private::AssertTypeEq::<
9427                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
9428                    >(_) => {}
9429                }
9430            }
9431            #[automatically_derived]
9432            #[doc(hidden)]
9433            impl ::core::convert::From<initiateOutgoingChannelClosureCall>
9434            for UnderlyingRustTuple<'_> {
9435                fn from(value: initiateOutgoingChannelClosureCall) -> Self {
9436                    (value.destination,)
9437                }
9438            }
9439            #[automatically_derived]
9440            #[doc(hidden)]
9441            impl ::core::convert::From<UnderlyingRustTuple<'_>>
9442            for initiateOutgoingChannelClosureCall {
9443                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
9444                    Self { destination: tuple.0 }
9445                }
9446            }
9447        }
9448        {
9449            #[doc(hidden)]
9450            type UnderlyingSolTuple<'a> = ();
9451            #[doc(hidden)]
9452            type UnderlyingRustTuple<'a> = ();
9453            #[cfg(test)]
9454            #[allow(dead_code, unreachable_patterns)]
9455            fn _type_assertion(
9456                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
9457            ) {
9458                match _t {
9459                    alloy_sol_types::private::AssertTypeEq::<
9460                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
9461                    >(_) => {}
9462                }
9463            }
9464            #[automatically_derived]
9465            #[doc(hidden)]
9466            impl ::core::convert::From<initiateOutgoingChannelClosureReturn>
9467            for UnderlyingRustTuple<'_> {
9468                fn from(value: initiateOutgoingChannelClosureReturn) -> Self {
9469                    ()
9470                }
9471            }
9472            #[automatically_derived]
9473            #[doc(hidden)]
9474            impl ::core::convert::From<UnderlyingRustTuple<'_>>
9475            for initiateOutgoingChannelClosureReturn {
9476                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
9477                    Self {}
9478                }
9479            }
9480        }
9481        impl initiateOutgoingChannelClosureReturn {
9482            fn _tokenize(
9483                &self,
9484            ) -> <initiateOutgoingChannelClosureCall as alloy_sol_types::SolCall>::ReturnToken<
9485                '_,
9486            > {
9487                ()
9488            }
9489        }
9490        #[automatically_derived]
9491        impl alloy_sol_types::SolCall for initiateOutgoingChannelClosureCall {
9492            type Parameters<'a> = (alloy::sol_types::sol_data::Address,);
9493            type Token<'a> = <Self::Parameters<
9494                'a,
9495            > as alloy_sol_types::SolType>::Token<'a>;
9496            type Return = initiateOutgoingChannelClosureReturn;
9497            type ReturnTuple<'a> = ();
9498            type ReturnToken<'a> = <Self::ReturnTuple<
9499                'a,
9500            > as alloy_sol_types::SolType>::Token<'a>;
9501            const SIGNATURE: &'static str = "initiateOutgoingChannelClosure(address)";
9502            const SELECTOR: [u8; 4] = [124u8, 142u8, 40u8, 218u8];
9503            #[inline]
9504            fn new<'a>(
9505                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
9506            ) -> Self {
9507                tuple.into()
9508            }
9509            #[inline]
9510            fn tokenize(&self) -> Self::Token<'_> {
9511                (
9512                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
9513                        &self.destination,
9514                    ),
9515                )
9516            }
9517            #[inline]
9518            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
9519                initiateOutgoingChannelClosureReturn::_tokenize(ret)
9520            }
9521            #[inline]
9522            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
9523                <Self::ReturnTuple<
9524                    '_,
9525                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
9526                    .map(Into::into)
9527            }
9528            #[inline]
9529            fn abi_decode_returns_validate(
9530                data: &[u8],
9531            ) -> alloy_sol_types::Result<Self::Return> {
9532                <Self::ReturnTuple<
9533                    '_,
9534                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
9535                    .map(Into::into)
9536            }
9537        }
9538    };
9539    #[derive(serde::Serialize, serde::Deserialize)]
9540    #[derive(Default, Debug, PartialEq, Eq, Hash)]
9541    /**Function with signature `initiateOutgoingChannelClosureSafe(address,address)` and selector `0xbda65f45`.
9542```solidity
9543function initiateOutgoingChannelClosureSafe(address selfAddress, address destination) external;
9544```*/
9545    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
9546    #[derive(Clone)]
9547    pub struct initiateOutgoingChannelClosureSafeCall {
9548        #[allow(missing_docs)]
9549        pub selfAddress: alloy::sol_types::private::Address,
9550        #[allow(missing_docs)]
9551        pub destination: alloy::sol_types::private::Address,
9552    }
9553    ///Container type for the return parameters of the [`initiateOutgoingChannelClosureSafe(address,address)`](initiateOutgoingChannelClosureSafeCall) function.
9554    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
9555    #[derive(Clone)]
9556    pub struct initiateOutgoingChannelClosureSafeReturn {}
9557    #[allow(
9558        non_camel_case_types,
9559        non_snake_case,
9560        clippy::pub_underscore_fields,
9561        clippy::style
9562    )]
9563    const _: () = {
9564        use alloy::sol_types as alloy_sol_types;
9565        {
9566            #[doc(hidden)]
9567            type UnderlyingSolTuple<'a> = (
9568                alloy::sol_types::sol_data::Address,
9569                alloy::sol_types::sol_data::Address,
9570            );
9571            #[doc(hidden)]
9572            type UnderlyingRustTuple<'a> = (
9573                alloy::sol_types::private::Address,
9574                alloy::sol_types::private::Address,
9575            );
9576            #[cfg(test)]
9577            #[allow(dead_code, unreachable_patterns)]
9578            fn _type_assertion(
9579                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
9580            ) {
9581                match _t {
9582                    alloy_sol_types::private::AssertTypeEq::<
9583                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
9584                    >(_) => {}
9585                }
9586            }
9587            #[automatically_derived]
9588            #[doc(hidden)]
9589            impl ::core::convert::From<initiateOutgoingChannelClosureSafeCall>
9590            for UnderlyingRustTuple<'_> {
9591                fn from(value: initiateOutgoingChannelClosureSafeCall) -> Self {
9592                    (value.selfAddress, value.destination)
9593                }
9594            }
9595            #[automatically_derived]
9596            #[doc(hidden)]
9597            impl ::core::convert::From<UnderlyingRustTuple<'_>>
9598            for initiateOutgoingChannelClosureSafeCall {
9599                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
9600                    Self {
9601                        selfAddress: tuple.0,
9602                        destination: tuple.1,
9603                    }
9604                }
9605            }
9606        }
9607        {
9608            #[doc(hidden)]
9609            type UnderlyingSolTuple<'a> = ();
9610            #[doc(hidden)]
9611            type UnderlyingRustTuple<'a> = ();
9612            #[cfg(test)]
9613            #[allow(dead_code, unreachable_patterns)]
9614            fn _type_assertion(
9615                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
9616            ) {
9617                match _t {
9618                    alloy_sol_types::private::AssertTypeEq::<
9619                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
9620                    >(_) => {}
9621                }
9622            }
9623            #[automatically_derived]
9624            #[doc(hidden)]
9625            impl ::core::convert::From<initiateOutgoingChannelClosureSafeReturn>
9626            for UnderlyingRustTuple<'_> {
9627                fn from(value: initiateOutgoingChannelClosureSafeReturn) -> Self {
9628                    ()
9629                }
9630            }
9631            #[automatically_derived]
9632            #[doc(hidden)]
9633            impl ::core::convert::From<UnderlyingRustTuple<'_>>
9634            for initiateOutgoingChannelClosureSafeReturn {
9635                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
9636                    Self {}
9637                }
9638            }
9639        }
9640        impl initiateOutgoingChannelClosureSafeReturn {
9641            fn _tokenize(
9642                &self,
9643            ) -> <initiateOutgoingChannelClosureSafeCall as alloy_sol_types::SolCall>::ReturnToken<
9644                '_,
9645            > {
9646                ()
9647            }
9648        }
9649        #[automatically_derived]
9650        impl alloy_sol_types::SolCall for initiateOutgoingChannelClosureSafeCall {
9651            type Parameters<'a> = (
9652                alloy::sol_types::sol_data::Address,
9653                alloy::sol_types::sol_data::Address,
9654            );
9655            type Token<'a> = <Self::Parameters<
9656                'a,
9657            > as alloy_sol_types::SolType>::Token<'a>;
9658            type Return = initiateOutgoingChannelClosureSafeReturn;
9659            type ReturnTuple<'a> = ();
9660            type ReturnToken<'a> = <Self::ReturnTuple<
9661                'a,
9662            > as alloy_sol_types::SolType>::Token<'a>;
9663            const SIGNATURE: &'static str = "initiateOutgoingChannelClosureSafe(address,address)";
9664            const SELECTOR: [u8; 4] = [189u8, 166u8, 95u8, 69u8];
9665            #[inline]
9666            fn new<'a>(
9667                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
9668            ) -> Self {
9669                tuple.into()
9670            }
9671            #[inline]
9672            fn tokenize(&self) -> Self::Token<'_> {
9673                (
9674                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
9675                        &self.selfAddress,
9676                    ),
9677                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
9678                        &self.destination,
9679                    ),
9680                )
9681            }
9682            #[inline]
9683            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
9684                initiateOutgoingChannelClosureSafeReturn::_tokenize(ret)
9685            }
9686            #[inline]
9687            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
9688                <Self::ReturnTuple<
9689                    '_,
9690                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
9691                    .map(Into::into)
9692            }
9693            #[inline]
9694            fn abi_decode_returns_validate(
9695                data: &[u8],
9696            ) -> alloy_sol_types::Result<Self::Return> {
9697                <Self::ReturnTuple<
9698                    '_,
9699                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
9700                    .map(Into::into)
9701            }
9702        }
9703    };
9704    #[derive(serde::Serialize, serde::Deserialize)]
9705    #[derive(Default, Debug, PartialEq, Eq, Hash)]
9706    /**Function with signature `ledgerDomainSeparator()` and selector `0xc966c4fe`.
9707```solidity
9708function ledgerDomainSeparator() external view returns (bytes32);
9709```*/
9710    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
9711    #[derive(Clone)]
9712    pub struct ledgerDomainSeparatorCall;
9713    #[derive(serde::Serialize, serde::Deserialize)]
9714    #[derive(Default, Debug, PartialEq, Eq, Hash)]
9715    ///Container type for the return parameters of the [`ledgerDomainSeparator()`](ledgerDomainSeparatorCall) function.
9716    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
9717    #[derive(Clone)]
9718    pub struct ledgerDomainSeparatorReturn {
9719        #[allow(missing_docs)]
9720        pub _0: alloy::sol_types::private::FixedBytes<32>,
9721    }
9722    #[allow(
9723        non_camel_case_types,
9724        non_snake_case,
9725        clippy::pub_underscore_fields,
9726        clippy::style
9727    )]
9728    const _: () = {
9729        use alloy::sol_types as alloy_sol_types;
9730        {
9731            #[doc(hidden)]
9732            type UnderlyingSolTuple<'a> = ();
9733            #[doc(hidden)]
9734            type UnderlyingRustTuple<'a> = ();
9735            #[cfg(test)]
9736            #[allow(dead_code, unreachable_patterns)]
9737            fn _type_assertion(
9738                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
9739            ) {
9740                match _t {
9741                    alloy_sol_types::private::AssertTypeEq::<
9742                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
9743                    >(_) => {}
9744                }
9745            }
9746            #[automatically_derived]
9747            #[doc(hidden)]
9748            impl ::core::convert::From<ledgerDomainSeparatorCall>
9749            for UnderlyingRustTuple<'_> {
9750                fn from(value: ledgerDomainSeparatorCall) -> Self {
9751                    ()
9752                }
9753            }
9754            #[automatically_derived]
9755            #[doc(hidden)]
9756            impl ::core::convert::From<UnderlyingRustTuple<'_>>
9757            for ledgerDomainSeparatorCall {
9758                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
9759                    Self
9760                }
9761            }
9762        }
9763        {
9764            #[doc(hidden)]
9765            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
9766            #[doc(hidden)]
9767            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::FixedBytes<32>,);
9768            #[cfg(test)]
9769            #[allow(dead_code, unreachable_patterns)]
9770            fn _type_assertion(
9771                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
9772            ) {
9773                match _t {
9774                    alloy_sol_types::private::AssertTypeEq::<
9775                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
9776                    >(_) => {}
9777                }
9778            }
9779            #[automatically_derived]
9780            #[doc(hidden)]
9781            impl ::core::convert::From<ledgerDomainSeparatorReturn>
9782            for UnderlyingRustTuple<'_> {
9783                fn from(value: ledgerDomainSeparatorReturn) -> Self {
9784                    (value._0,)
9785                }
9786            }
9787            #[automatically_derived]
9788            #[doc(hidden)]
9789            impl ::core::convert::From<UnderlyingRustTuple<'_>>
9790            for ledgerDomainSeparatorReturn {
9791                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
9792                    Self { _0: tuple.0 }
9793                }
9794            }
9795        }
9796        #[automatically_derived]
9797        impl alloy_sol_types::SolCall for ledgerDomainSeparatorCall {
9798            type Parameters<'a> = ();
9799            type Token<'a> = <Self::Parameters<
9800                'a,
9801            > as alloy_sol_types::SolType>::Token<'a>;
9802            type Return = alloy::sol_types::private::FixedBytes<32>;
9803            type ReturnTuple<'a> = (alloy::sol_types::sol_data::FixedBytes<32>,);
9804            type ReturnToken<'a> = <Self::ReturnTuple<
9805                'a,
9806            > as alloy_sol_types::SolType>::Token<'a>;
9807            const SIGNATURE: &'static str = "ledgerDomainSeparator()";
9808            const SELECTOR: [u8; 4] = [201u8, 102u8, 196u8, 254u8];
9809            #[inline]
9810            fn new<'a>(
9811                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
9812            ) -> Self {
9813                tuple.into()
9814            }
9815            #[inline]
9816            fn tokenize(&self) -> Self::Token<'_> {
9817                ()
9818            }
9819            #[inline]
9820            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
9821                (
9822                    <alloy::sol_types::sol_data::FixedBytes<
9823                        32,
9824                    > as alloy_sol_types::SolType>::tokenize(ret),
9825                )
9826            }
9827            #[inline]
9828            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
9829                <Self::ReturnTuple<
9830                    '_,
9831                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
9832                    .map(|r| {
9833                        let r: ledgerDomainSeparatorReturn = r.into();
9834                        r._0
9835                    })
9836            }
9837            #[inline]
9838            fn abi_decode_returns_validate(
9839                data: &[u8],
9840            ) -> alloy_sol_types::Result<Self::Return> {
9841                <Self::ReturnTuple<
9842                    '_,
9843                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
9844                    .map(|r| {
9845                        let r: ledgerDomainSeparatorReturn = r.into();
9846                        r._0
9847                    })
9848            }
9849        }
9850    };
9851    #[derive(serde::Serialize, serde::Deserialize)]
9852    #[derive(Default, Debug, PartialEq, Eq, Hash)]
9853    /**Function with signature `multicall(bytes[])` and selector `0xac9650d8`.
9854```solidity
9855function multicall(bytes[] memory data) external returns (bytes[] memory results);
9856```*/
9857    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
9858    #[derive(Clone)]
9859    pub struct multicallCall {
9860        #[allow(missing_docs)]
9861        pub data: alloy::sol_types::private::Vec<alloy::sol_types::private::Bytes>,
9862    }
9863    #[derive(serde::Serialize, serde::Deserialize)]
9864    #[derive(Default, Debug, PartialEq, Eq, Hash)]
9865    ///Container type for the return parameters of the [`multicall(bytes[])`](multicallCall) function.
9866    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
9867    #[derive(Clone)]
9868    pub struct multicallReturn {
9869        #[allow(missing_docs)]
9870        pub results: alloy::sol_types::private::Vec<alloy::sol_types::private::Bytes>,
9871    }
9872    #[allow(
9873        non_camel_case_types,
9874        non_snake_case,
9875        clippy::pub_underscore_fields,
9876        clippy::style
9877    )]
9878    const _: () = {
9879        use alloy::sol_types as alloy_sol_types;
9880        {
9881            #[doc(hidden)]
9882            type UnderlyingSolTuple<'a> = (
9883                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::Bytes>,
9884            );
9885            #[doc(hidden)]
9886            type UnderlyingRustTuple<'a> = (
9887                alloy::sol_types::private::Vec<alloy::sol_types::private::Bytes>,
9888            );
9889            #[cfg(test)]
9890            #[allow(dead_code, unreachable_patterns)]
9891            fn _type_assertion(
9892                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
9893            ) {
9894                match _t {
9895                    alloy_sol_types::private::AssertTypeEq::<
9896                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
9897                    >(_) => {}
9898                }
9899            }
9900            #[automatically_derived]
9901            #[doc(hidden)]
9902            impl ::core::convert::From<multicallCall> for UnderlyingRustTuple<'_> {
9903                fn from(value: multicallCall) -> Self {
9904                    (value.data,)
9905                }
9906            }
9907            #[automatically_derived]
9908            #[doc(hidden)]
9909            impl ::core::convert::From<UnderlyingRustTuple<'_>> for multicallCall {
9910                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
9911                    Self { data: tuple.0 }
9912                }
9913            }
9914        }
9915        {
9916            #[doc(hidden)]
9917            type UnderlyingSolTuple<'a> = (
9918                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::Bytes>,
9919            );
9920            #[doc(hidden)]
9921            type UnderlyingRustTuple<'a> = (
9922                alloy::sol_types::private::Vec<alloy::sol_types::private::Bytes>,
9923            );
9924            #[cfg(test)]
9925            #[allow(dead_code, unreachable_patterns)]
9926            fn _type_assertion(
9927                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
9928            ) {
9929                match _t {
9930                    alloy_sol_types::private::AssertTypeEq::<
9931                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
9932                    >(_) => {}
9933                }
9934            }
9935            #[automatically_derived]
9936            #[doc(hidden)]
9937            impl ::core::convert::From<multicallReturn> for UnderlyingRustTuple<'_> {
9938                fn from(value: multicallReturn) -> Self {
9939                    (value.results,)
9940                }
9941            }
9942            #[automatically_derived]
9943            #[doc(hidden)]
9944            impl ::core::convert::From<UnderlyingRustTuple<'_>> for multicallReturn {
9945                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
9946                    Self { results: tuple.0 }
9947                }
9948            }
9949        }
9950        #[automatically_derived]
9951        impl alloy_sol_types::SolCall for multicallCall {
9952            type Parameters<'a> = (
9953                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::Bytes>,
9954            );
9955            type Token<'a> = <Self::Parameters<
9956                'a,
9957            > as alloy_sol_types::SolType>::Token<'a>;
9958            type Return = alloy::sol_types::private::Vec<
9959                alloy::sol_types::private::Bytes,
9960            >;
9961            type ReturnTuple<'a> = (
9962                alloy::sol_types::sol_data::Array<alloy::sol_types::sol_data::Bytes>,
9963            );
9964            type ReturnToken<'a> = <Self::ReturnTuple<
9965                'a,
9966            > as alloy_sol_types::SolType>::Token<'a>;
9967            const SIGNATURE: &'static str = "multicall(bytes[])";
9968            const SELECTOR: [u8; 4] = [172u8, 150u8, 80u8, 216u8];
9969            #[inline]
9970            fn new<'a>(
9971                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
9972            ) -> Self {
9973                tuple.into()
9974            }
9975            #[inline]
9976            fn tokenize(&self) -> Self::Token<'_> {
9977                (
9978                    <alloy::sol_types::sol_data::Array<
9979                        alloy::sol_types::sol_data::Bytes,
9980                    > as alloy_sol_types::SolType>::tokenize(&self.data),
9981                )
9982            }
9983            #[inline]
9984            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
9985                (
9986                    <alloy::sol_types::sol_data::Array<
9987                        alloy::sol_types::sol_data::Bytes,
9988                    > as alloy_sol_types::SolType>::tokenize(ret),
9989                )
9990            }
9991            #[inline]
9992            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
9993                <Self::ReturnTuple<
9994                    '_,
9995                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
9996                    .map(|r| {
9997                        let r: multicallReturn = r.into();
9998                        r.results
9999                    })
10000            }
10001            #[inline]
10002            fn abi_decode_returns_validate(
10003                data: &[u8],
10004            ) -> alloy_sol_types::Result<Self::Return> {
10005                <Self::ReturnTuple<
10006                    '_,
10007                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
10008                    .map(|r| {
10009                        let r: multicallReturn = r.into();
10010                        r.results
10011                    })
10012            }
10013        }
10014    };
10015    #[derive(serde::Serialize, serde::Deserialize)]
10016    #[derive(Default, Debug, PartialEq, Eq, Hash)]
10017    /**Function with signature `noticePeriodChannelClosure()` and selector `0x87352d65`.
10018```solidity
10019function noticePeriodChannelClosure() external view returns (Timestamp);
10020```*/
10021    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
10022    #[derive(Clone)]
10023    pub struct noticePeriodChannelClosureCall;
10024    #[derive(serde::Serialize, serde::Deserialize)]
10025    #[derive(Default, Debug, PartialEq, Eq, Hash)]
10026    ///Container type for the return parameters of the [`noticePeriodChannelClosure()`](noticePeriodChannelClosureCall) function.
10027    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
10028    #[derive(Clone)]
10029    pub struct noticePeriodChannelClosureReturn {
10030        #[allow(missing_docs)]
10031        pub _0: <Timestamp as alloy::sol_types::SolType>::RustType,
10032    }
10033    #[allow(
10034        non_camel_case_types,
10035        non_snake_case,
10036        clippy::pub_underscore_fields,
10037        clippy::style
10038    )]
10039    const _: () = {
10040        use alloy::sol_types as alloy_sol_types;
10041        {
10042            #[doc(hidden)]
10043            type UnderlyingSolTuple<'a> = ();
10044            #[doc(hidden)]
10045            type UnderlyingRustTuple<'a> = ();
10046            #[cfg(test)]
10047            #[allow(dead_code, unreachable_patterns)]
10048            fn _type_assertion(
10049                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
10050            ) {
10051                match _t {
10052                    alloy_sol_types::private::AssertTypeEq::<
10053                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
10054                    >(_) => {}
10055                }
10056            }
10057            #[automatically_derived]
10058            #[doc(hidden)]
10059            impl ::core::convert::From<noticePeriodChannelClosureCall>
10060            for UnderlyingRustTuple<'_> {
10061                fn from(value: noticePeriodChannelClosureCall) -> Self {
10062                    ()
10063                }
10064            }
10065            #[automatically_derived]
10066            #[doc(hidden)]
10067            impl ::core::convert::From<UnderlyingRustTuple<'_>>
10068            for noticePeriodChannelClosureCall {
10069                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
10070                    Self
10071                }
10072            }
10073        }
10074        {
10075            #[doc(hidden)]
10076            type UnderlyingSolTuple<'a> = (Timestamp,);
10077            #[doc(hidden)]
10078            type UnderlyingRustTuple<'a> = (
10079                <Timestamp as alloy::sol_types::SolType>::RustType,
10080            );
10081            #[cfg(test)]
10082            #[allow(dead_code, unreachable_patterns)]
10083            fn _type_assertion(
10084                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
10085            ) {
10086                match _t {
10087                    alloy_sol_types::private::AssertTypeEq::<
10088                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
10089                    >(_) => {}
10090                }
10091            }
10092            #[automatically_derived]
10093            #[doc(hidden)]
10094            impl ::core::convert::From<noticePeriodChannelClosureReturn>
10095            for UnderlyingRustTuple<'_> {
10096                fn from(value: noticePeriodChannelClosureReturn) -> Self {
10097                    (value._0,)
10098                }
10099            }
10100            #[automatically_derived]
10101            #[doc(hidden)]
10102            impl ::core::convert::From<UnderlyingRustTuple<'_>>
10103            for noticePeriodChannelClosureReturn {
10104                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
10105                    Self { _0: tuple.0 }
10106                }
10107            }
10108        }
10109        #[automatically_derived]
10110        impl alloy_sol_types::SolCall for noticePeriodChannelClosureCall {
10111            type Parameters<'a> = ();
10112            type Token<'a> = <Self::Parameters<
10113                'a,
10114            > as alloy_sol_types::SolType>::Token<'a>;
10115            type Return = <Timestamp as alloy::sol_types::SolType>::RustType;
10116            type ReturnTuple<'a> = (Timestamp,);
10117            type ReturnToken<'a> = <Self::ReturnTuple<
10118                'a,
10119            > as alloy_sol_types::SolType>::Token<'a>;
10120            const SIGNATURE: &'static str = "noticePeriodChannelClosure()";
10121            const SELECTOR: [u8; 4] = [135u8, 53u8, 45u8, 101u8];
10122            #[inline]
10123            fn new<'a>(
10124                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
10125            ) -> Self {
10126                tuple.into()
10127            }
10128            #[inline]
10129            fn tokenize(&self) -> Self::Token<'_> {
10130                ()
10131            }
10132            #[inline]
10133            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
10134                (<Timestamp as alloy_sol_types::SolType>::tokenize(ret),)
10135            }
10136            #[inline]
10137            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
10138                <Self::ReturnTuple<
10139                    '_,
10140                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
10141                    .map(|r| {
10142                        let r: noticePeriodChannelClosureReturn = r.into();
10143                        r._0
10144                    })
10145            }
10146            #[inline]
10147            fn abi_decode_returns_validate(
10148                data: &[u8],
10149            ) -> alloy_sol_types::Result<Self::Return> {
10150                <Self::ReturnTuple<
10151                    '_,
10152                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
10153                    .map(|r| {
10154                        let r: noticePeriodChannelClosureReturn = r.into();
10155                        r._0
10156                    })
10157            }
10158        }
10159    };
10160    #[derive(serde::Serialize, serde::Deserialize)]
10161    #[derive(Default, Debug, PartialEq, Eq, Hash)]
10162    /**Function with signature `redeemTicket(((bytes32,uint96,uint48,uint32,uint24,uint56),(bytes32,bytes32),uint256),(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))` and selector `0xfcb7796f`.
10163```solidity
10164function redeemTicket(RedeemableTicket memory redeemable, HoprCrypto.VRFParameters memory params) external;
10165```*/
10166    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
10167    #[derive(Clone)]
10168    pub struct redeemTicketCall {
10169        #[allow(missing_docs)]
10170        pub redeemable: <RedeemableTicket as alloy::sol_types::SolType>::RustType,
10171        #[allow(missing_docs)]
10172        pub params: <HoprCrypto::VRFParameters as alloy::sol_types::SolType>::RustType,
10173    }
10174    ///Container type for the return parameters of the [`redeemTicket(((bytes32,uint96,uint48,uint32,uint24,uint56),(bytes32,bytes32),uint256),(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))`](redeemTicketCall) function.
10175    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
10176    #[derive(Clone)]
10177    pub struct redeemTicketReturn {}
10178    #[allow(
10179        non_camel_case_types,
10180        non_snake_case,
10181        clippy::pub_underscore_fields,
10182        clippy::style
10183    )]
10184    const _: () = {
10185        use alloy::sol_types as alloy_sol_types;
10186        {
10187            #[doc(hidden)]
10188            type UnderlyingSolTuple<'a> = (RedeemableTicket, HoprCrypto::VRFParameters);
10189            #[doc(hidden)]
10190            type UnderlyingRustTuple<'a> = (
10191                <RedeemableTicket as alloy::sol_types::SolType>::RustType,
10192                <HoprCrypto::VRFParameters as alloy::sol_types::SolType>::RustType,
10193            );
10194            #[cfg(test)]
10195            #[allow(dead_code, unreachable_patterns)]
10196            fn _type_assertion(
10197                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
10198            ) {
10199                match _t {
10200                    alloy_sol_types::private::AssertTypeEq::<
10201                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
10202                    >(_) => {}
10203                }
10204            }
10205            #[automatically_derived]
10206            #[doc(hidden)]
10207            impl ::core::convert::From<redeemTicketCall> for UnderlyingRustTuple<'_> {
10208                fn from(value: redeemTicketCall) -> Self {
10209                    (value.redeemable, value.params)
10210                }
10211            }
10212            #[automatically_derived]
10213            #[doc(hidden)]
10214            impl ::core::convert::From<UnderlyingRustTuple<'_>> for redeemTicketCall {
10215                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
10216                    Self {
10217                        redeemable: tuple.0,
10218                        params: tuple.1,
10219                    }
10220                }
10221            }
10222        }
10223        {
10224            #[doc(hidden)]
10225            type UnderlyingSolTuple<'a> = ();
10226            #[doc(hidden)]
10227            type UnderlyingRustTuple<'a> = ();
10228            #[cfg(test)]
10229            #[allow(dead_code, unreachable_patterns)]
10230            fn _type_assertion(
10231                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
10232            ) {
10233                match _t {
10234                    alloy_sol_types::private::AssertTypeEq::<
10235                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
10236                    >(_) => {}
10237                }
10238            }
10239            #[automatically_derived]
10240            #[doc(hidden)]
10241            impl ::core::convert::From<redeemTicketReturn> for UnderlyingRustTuple<'_> {
10242                fn from(value: redeemTicketReturn) -> Self {
10243                    ()
10244                }
10245            }
10246            #[automatically_derived]
10247            #[doc(hidden)]
10248            impl ::core::convert::From<UnderlyingRustTuple<'_>> for redeemTicketReturn {
10249                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
10250                    Self {}
10251                }
10252            }
10253        }
10254        impl redeemTicketReturn {
10255            fn _tokenize(
10256                &self,
10257            ) -> <redeemTicketCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
10258                ()
10259            }
10260        }
10261        #[automatically_derived]
10262        impl alloy_sol_types::SolCall for redeemTicketCall {
10263            type Parameters<'a> = (RedeemableTicket, HoprCrypto::VRFParameters);
10264            type Token<'a> = <Self::Parameters<
10265                'a,
10266            > as alloy_sol_types::SolType>::Token<'a>;
10267            type Return = redeemTicketReturn;
10268            type ReturnTuple<'a> = ();
10269            type ReturnToken<'a> = <Self::ReturnTuple<
10270                'a,
10271            > as alloy_sol_types::SolType>::Token<'a>;
10272            const SIGNATURE: &'static str = "redeemTicket(((bytes32,uint96,uint48,uint32,uint24,uint56),(bytes32,bytes32),uint256),(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))";
10273            const SELECTOR: [u8; 4] = [252u8, 183u8, 121u8, 111u8];
10274            #[inline]
10275            fn new<'a>(
10276                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
10277            ) -> Self {
10278                tuple.into()
10279            }
10280            #[inline]
10281            fn tokenize(&self) -> Self::Token<'_> {
10282                (
10283                    <RedeemableTicket as alloy_sol_types::SolType>::tokenize(
10284                        &self.redeemable,
10285                    ),
10286                    <HoprCrypto::VRFParameters as alloy_sol_types::SolType>::tokenize(
10287                        &self.params,
10288                    ),
10289                )
10290            }
10291            #[inline]
10292            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
10293                redeemTicketReturn::_tokenize(ret)
10294            }
10295            #[inline]
10296            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
10297                <Self::ReturnTuple<
10298                    '_,
10299                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
10300                    .map(Into::into)
10301            }
10302            #[inline]
10303            fn abi_decode_returns_validate(
10304                data: &[u8],
10305            ) -> alloy_sol_types::Result<Self::Return> {
10306                <Self::ReturnTuple<
10307                    '_,
10308                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
10309                    .map(Into::into)
10310            }
10311        }
10312    };
10313    #[derive(serde::Serialize, serde::Deserialize)]
10314    #[derive(Default, Debug, PartialEq, Eq, Hash)]
10315    /**Function with signature `redeemTicketSafe(address,((bytes32,uint96,uint48,uint32,uint24,uint56),(bytes32,bytes32),uint256),(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))` and selector `0x0cd88d72`.
10316```solidity
10317function redeemTicketSafe(address selfAddress, RedeemableTicket memory redeemable, HoprCrypto.VRFParameters memory params) external;
10318```*/
10319    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
10320    #[derive(Clone)]
10321    pub struct redeemTicketSafeCall {
10322        #[allow(missing_docs)]
10323        pub selfAddress: alloy::sol_types::private::Address,
10324        #[allow(missing_docs)]
10325        pub redeemable: <RedeemableTicket as alloy::sol_types::SolType>::RustType,
10326        #[allow(missing_docs)]
10327        pub params: <HoprCrypto::VRFParameters as alloy::sol_types::SolType>::RustType,
10328    }
10329    ///Container type for the return parameters of the [`redeemTicketSafe(address,((bytes32,uint96,uint48,uint32,uint24,uint56),(bytes32,bytes32),uint256),(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))`](redeemTicketSafeCall) function.
10330    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
10331    #[derive(Clone)]
10332    pub struct redeemTicketSafeReturn {}
10333    #[allow(
10334        non_camel_case_types,
10335        non_snake_case,
10336        clippy::pub_underscore_fields,
10337        clippy::style
10338    )]
10339    const _: () = {
10340        use alloy::sol_types as alloy_sol_types;
10341        {
10342            #[doc(hidden)]
10343            type UnderlyingSolTuple<'a> = (
10344                alloy::sol_types::sol_data::Address,
10345                RedeemableTicket,
10346                HoprCrypto::VRFParameters,
10347            );
10348            #[doc(hidden)]
10349            type UnderlyingRustTuple<'a> = (
10350                alloy::sol_types::private::Address,
10351                <RedeemableTicket as alloy::sol_types::SolType>::RustType,
10352                <HoprCrypto::VRFParameters as alloy::sol_types::SolType>::RustType,
10353            );
10354            #[cfg(test)]
10355            #[allow(dead_code, unreachable_patterns)]
10356            fn _type_assertion(
10357                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
10358            ) {
10359                match _t {
10360                    alloy_sol_types::private::AssertTypeEq::<
10361                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
10362                    >(_) => {}
10363                }
10364            }
10365            #[automatically_derived]
10366            #[doc(hidden)]
10367            impl ::core::convert::From<redeemTicketSafeCall>
10368            for UnderlyingRustTuple<'_> {
10369                fn from(value: redeemTicketSafeCall) -> Self {
10370                    (value.selfAddress, value.redeemable, value.params)
10371                }
10372            }
10373            #[automatically_derived]
10374            #[doc(hidden)]
10375            impl ::core::convert::From<UnderlyingRustTuple<'_>>
10376            for redeemTicketSafeCall {
10377                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
10378                    Self {
10379                        selfAddress: tuple.0,
10380                        redeemable: tuple.1,
10381                        params: tuple.2,
10382                    }
10383                }
10384            }
10385        }
10386        {
10387            #[doc(hidden)]
10388            type UnderlyingSolTuple<'a> = ();
10389            #[doc(hidden)]
10390            type UnderlyingRustTuple<'a> = ();
10391            #[cfg(test)]
10392            #[allow(dead_code, unreachable_patterns)]
10393            fn _type_assertion(
10394                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
10395            ) {
10396                match _t {
10397                    alloy_sol_types::private::AssertTypeEq::<
10398                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
10399                    >(_) => {}
10400                }
10401            }
10402            #[automatically_derived]
10403            #[doc(hidden)]
10404            impl ::core::convert::From<redeemTicketSafeReturn>
10405            for UnderlyingRustTuple<'_> {
10406                fn from(value: redeemTicketSafeReturn) -> Self {
10407                    ()
10408                }
10409            }
10410            #[automatically_derived]
10411            #[doc(hidden)]
10412            impl ::core::convert::From<UnderlyingRustTuple<'_>>
10413            for redeemTicketSafeReturn {
10414                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
10415                    Self {}
10416                }
10417            }
10418        }
10419        impl redeemTicketSafeReturn {
10420            fn _tokenize(
10421                &self,
10422            ) -> <redeemTicketSafeCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
10423                ()
10424            }
10425        }
10426        #[automatically_derived]
10427        impl alloy_sol_types::SolCall for redeemTicketSafeCall {
10428            type Parameters<'a> = (
10429                alloy::sol_types::sol_data::Address,
10430                RedeemableTicket,
10431                HoprCrypto::VRFParameters,
10432            );
10433            type Token<'a> = <Self::Parameters<
10434                'a,
10435            > as alloy_sol_types::SolType>::Token<'a>;
10436            type Return = redeemTicketSafeReturn;
10437            type ReturnTuple<'a> = ();
10438            type ReturnToken<'a> = <Self::ReturnTuple<
10439                'a,
10440            > as alloy_sol_types::SolType>::Token<'a>;
10441            const SIGNATURE: &'static str = "redeemTicketSafe(address,((bytes32,uint96,uint48,uint32,uint24,uint56),(bytes32,bytes32),uint256),(uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))";
10442            const SELECTOR: [u8; 4] = [12u8, 216u8, 141u8, 114u8];
10443            #[inline]
10444            fn new<'a>(
10445                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
10446            ) -> Self {
10447                tuple.into()
10448            }
10449            #[inline]
10450            fn tokenize(&self) -> Self::Token<'_> {
10451                (
10452                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
10453                        &self.selfAddress,
10454                    ),
10455                    <RedeemableTicket as alloy_sol_types::SolType>::tokenize(
10456                        &self.redeemable,
10457                    ),
10458                    <HoprCrypto::VRFParameters as alloy_sol_types::SolType>::tokenize(
10459                        &self.params,
10460                    ),
10461                )
10462            }
10463            #[inline]
10464            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
10465                redeemTicketSafeReturn::_tokenize(ret)
10466            }
10467            #[inline]
10468            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
10469                <Self::ReturnTuple<
10470                    '_,
10471                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
10472                    .map(Into::into)
10473            }
10474            #[inline]
10475            fn abi_decode_returns_validate(
10476                data: &[u8],
10477            ) -> alloy_sol_types::Result<Self::Return> {
10478                <Self::ReturnTuple<
10479                    '_,
10480                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
10481                    .map(Into::into)
10482            }
10483        }
10484    };
10485    #[derive(serde::Serialize, serde::Deserialize)]
10486    #[derive(Default, Debug, PartialEq, Eq, Hash)]
10487    /**Function with signature `token()` and selector `0xfc0c546a`.
10488```solidity
10489function token() external view returns (address);
10490```*/
10491    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
10492    #[derive(Clone)]
10493    pub struct tokenCall;
10494    #[derive(serde::Serialize, serde::Deserialize)]
10495    #[derive(Default, Debug, PartialEq, Eq, Hash)]
10496    ///Container type for the return parameters of the [`token()`](tokenCall) function.
10497    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
10498    #[derive(Clone)]
10499    pub struct tokenReturn {
10500        #[allow(missing_docs)]
10501        pub _0: alloy::sol_types::private::Address,
10502    }
10503    #[allow(
10504        non_camel_case_types,
10505        non_snake_case,
10506        clippy::pub_underscore_fields,
10507        clippy::style
10508    )]
10509    const _: () = {
10510        use alloy::sol_types as alloy_sol_types;
10511        {
10512            #[doc(hidden)]
10513            type UnderlyingSolTuple<'a> = ();
10514            #[doc(hidden)]
10515            type UnderlyingRustTuple<'a> = ();
10516            #[cfg(test)]
10517            #[allow(dead_code, unreachable_patterns)]
10518            fn _type_assertion(
10519                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
10520            ) {
10521                match _t {
10522                    alloy_sol_types::private::AssertTypeEq::<
10523                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
10524                    >(_) => {}
10525                }
10526            }
10527            #[automatically_derived]
10528            #[doc(hidden)]
10529            impl ::core::convert::From<tokenCall> for UnderlyingRustTuple<'_> {
10530                fn from(value: tokenCall) -> Self {
10531                    ()
10532                }
10533            }
10534            #[automatically_derived]
10535            #[doc(hidden)]
10536            impl ::core::convert::From<UnderlyingRustTuple<'_>> for tokenCall {
10537                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
10538                    Self
10539                }
10540            }
10541        }
10542        {
10543            #[doc(hidden)]
10544            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Address,);
10545            #[doc(hidden)]
10546            type UnderlyingRustTuple<'a> = (alloy::sol_types::private::Address,);
10547            #[cfg(test)]
10548            #[allow(dead_code, unreachable_patterns)]
10549            fn _type_assertion(
10550                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
10551            ) {
10552                match _t {
10553                    alloy_sol_types::private::AssertTypeEq::<
10554                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
10555                    >(_) => {}
10556                }
10557            }
10558            #[automatically_derived]
10559            #[doc(hidden)]
10560            impl ::core::convert::From<tokenReturn> for UnderlyingRustTuple<'_> {
10561                fn from(value: tokenReturn) -> Self {
10562                    (value._0,)
10563                }
10564            }
10565            #[automatically_derived]
10566            #[doc(hidden)]
10567            impl ::core::convert::From<UnderlyingRustTuple<'_>> for tokenReturn {
10568                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
10569                    Self { _0: tuple.0 }
10570                }
10571            }
10572        }
10573        #[automatically_derived]
10574        impl alloy_sol_types::SolCall for tokenCall {
10575            type Parameters<'a> = ();
10576            type Token<'a> = <Self::Parameters<
10577                'a,
10578            > as alloy_sol_types::SolType>::Token<'a>;
10579            type Return = alloy::sol_types::private::Address;
10580            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Address,);
10581            type ReturnToken<'a> = <Self::ReturnTuple<
10582                'a,
10583            > as alloy_sol_types::SolType>::Token<'a>;
10584            const SIGNATURE: &'static str = "token()";
10585            const SELECTOR: [u8; 4] = [252u8, 12u8, 84u8, 106u8];
10586            #[inline]
10587            fn new<'a>(
10588                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
10589            ) -> Self {
10590                tuple.into()
10591            }
10592            #[inline]
10593            fn tokenize(&self) -> Self::Token<'_> {
10594                ()
10595            }
10596            #[inline]
10597            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
10598                (
10599                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
10600                        ret,
10601                    ),
10602                )
10603            }
10604            #[inline]
10605            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
10606                <Self::ReturnTuple<
10607                    '_,
10608                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
10609                    .map(|r| {
10610                        let r: tokenReturn = r.into();
10611                        r._0
10612                    })
10613            }
10614            #[inline]
10615            fn abi_decode_returns_validate(
10616                data: &[u8],
10617            ) -> alloy_sol_types::Result<Self::Return> {
10618                <Self::ReturnTuple<
10619                    '_,
10620                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
10621                    .map(|r| {
10622                        let r: tokenReturn = r.into();
10623                        r._0
10624                    })
10625            }
10626        }
10627    };
10628    #[derive(serde::Serialize, serde::Deserialize)]
10629    #[derive(Default, Debug, PartialEq, Eq, Hash)]
10630    /**Function with signature `tokensReceived(address,address,address,uint256,bytes,bytes)` and selector `0x0023de29`.
10631```solidity
10632function tokensReceived(address, address from, address to, uint256 amount, bytes memory userData, bytes memory) external;
10633```*/
10634    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
10635    #[derive(Clone)]
10636    pub struct tokensReceivedCall {
10637        #[allow(missing_docs)]
10638        pub _0: alloy::sol_types::private::Address,
10639        #[allow(missing_docs)]
10640        pub from: alloy::sol_types::private::Address,
10641        #[allow(missing_docs)]
10642        pub to: alloy::sol_types::private::Address,
10643        #[allow(missing_docs)]
10644        pub amount: alloy::sol_types::private::primitives::aliases::U256,
10645        #[allow(missing_docs)]
10646        pub userData: alloy::sol_types::private::Bytes,
10647        #[allow(missing_docs)]
10648        pub _5: alloy::sol_types::private::Bytes,
10649    }
10650    ///Container type for the return parameters of the [`tokensReceived(address,address,address,uint256,bytes,bytes)`](tokensReceivedCall) function.
10651    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
10652    #[derive(Clone)]
10653    pub struct tokensReceivedReturn {}
10654    #[allow(
10655        non_camel_case_types,
10656        non_snake_case,
10657        clippy::pub_underscore_fields,
10658        clippy::style
10659    )]
10660    const _: () = {
10661        use alloy::sol_types as alloy_sol_types;
10662        {
10663            #[doc(hidden)]
10664            type UnderlyingSolTuple<'a> = (
10665                alloy::sol_types::sol_data::Address,
10666                alloy::sol_types::sol_data::Address,
10667                alloy::sol_types::sol_data::Address,
10668                alloy::sol_types::sol_data::Uint<256>,
10669                alloy::sol_types::sol_data::Bytes,
10670                alloy::sol_types::sol_data::Bytes,
10671            );
10672            #[doc(hidden)]
10673            type UnderlyingRustTuple<'a> = (
10674                alloy::sol_types::private::Address,
10675                alloy::sol_types::private::Address,
10676                alloy::sol_types::private::Address,
10677                alloy::sol_types::private::primitives::aliases::U256,
10678                alloy::sol_types::private::Bytes,
10679                alloy::sol_types::private::Bytes,
10680            );
10681            #[cfg(test)]
10682            #[allow(dead_code, unreachable_patterns)]
10683            fn _type_assertion(
10684                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
10685            ) {
10686                match _t {
10687                    alloy_sol_types::private::AssertTypeEq::<
10688                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
10689                    >(_) => {}
10690                }
10691            }
10692            #[automatically_derived]
10693            #[doc(hidden)]
10694            impl ::core::convert::From<tokensReceivedCall> for UnderlyingRustTuple<'_> {
10695                fn from(value: tokensReceivedCall) -> Self {
10696                    (
10697                        value._0,
10698                        value.from,
10699                        value.to,
10700                        value.amount,
10701                        value.userData,
10702                        value._5,
10703                    )
10704                }
10705            }
10706            #[automatically_derived]
10707            #[doc(hidden)]
10708            impl ::core::convert::From<UnderlyingRustTuple<'_>> for tokensReceivedCall {
10709                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
10710                    Self {
10711                        _0: tuple.0,
10712                        from: tuple.1,
10713                        to: tuple.2,
10714                        amount: tuple.3,
10715                        userData: tuple.4,
10716                        _5: tuple.5,
10717                    }
10718                }
10719            }
10720        }
10721        {
10722            #[doc(hidden)]
10723            type UnderlyingSolTuple<'a> = ();
10724            #[doc(hidden)]
10725            type UnderlyingRustTuple<'a> = ();
10726            #[cfg(test)]
10727            #[allow(dead_code, unreachable_patterns)]
10728            fn _type_assertion(
10729                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
10730            ) {
10731                match _t {
10732                    alloy_sol_types::private::AssertTypeEq::<
10733                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
10734                    >(_) => {}
10735                }
10736            }
10737            #[automatically_derived]
10738            #[doc(hidden)]
10739            impl ::core::convert::From<tokensReceivedReturn>
10740            for UnderlyingRustTuple<'_> {
10741                fn from(value: tokensReceivedReturn) -> Self {
10742                    ()
10743                }
10744            }
10745            #[automatically_derived]
10746            #[doc(hidden)]
10747            impl ::core::convert::From<UnderlyingRustTuple<'_>>
10748            for tokensReceivedReturn {
10749                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
10750                    Self {}
10751                }
10752            }
10753        }
10754        impl tokensReceivedReturn {
10755            fn _tokenize(
10756                &self,
10757            ) -> <tokensReceivedCall as alloy_sol_types::SolCall>::ReturnToken<'_> {
10758                ()
10759            }
10760        }
10761        #[automatically_derived]
10762        impl alloy_sol_types::SolCall for tokensReceivedCall {
10763            type Parameters<'a> = (
10764                alloy::sol_types::sol_data::Address,
10765                alloy::sol_types::sol_data::Address,
10766                alloy::sol_types::sol_data::Address,
10767                alloy::sol_types::sol_data::Uint<256>,
10768                alloy::sol_types::sol_data::Bytes,
10769                alloy::sol_types::sol_data::Bytes,
10770            );
10771            type Token<'a> = <Self::Parameters<
10772                'a,
10773            > as alloy_sol_types::SolType>::Token<'a>;
10774            type Return = tokensReceivedReturn;
10775            type ReturnTuple<'a> = ();
10776            type ReturnToken<'a> = <Self::ReturnTuple<
10777                'a,
10778            > as alloy_sol_types::SolType>::Token<'a>;
10779            const SIGNATURE: &'static str = "tokensReceived(address,address,address,uint256,bytes,bytes)";
10780            const SELECTOR: [u8; 4] = [0u8, 35u8, 222u8, 41u8];
10781            #[inline]
10782            fn new<'a>(
10783                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
10784            ) -> Self {
10785                tuple.into()
10786            }
10787            #[inline]
10788            fn tokenize(&self) -> Self::Token<'_> {
10789                (
10790                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
10791                        &self._0,
10792                    ),
10793                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
10794                        &self.from,
10795                    ),
10796                    <alloy::sol_types::sol_data::Address as alloy_sol_types::SolType>::tokenize(
10797                        &self.to,
10798                    ),
10799                    <alloy::sol_types::sol_data::Uint<
10800                        256,
10801                    > as alloy_sol_types::SolType>::tokenize(&self.amount),
10802                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
10803                        &self.userData,
10804                    ),
10805                    <alloy::sol_types::sol_data::Bytes as alloy_sol_types::SolType>::tokenize(
10806                        &self._5,
10807                    ),
10808                )
10809            }
10810            #[inline]
10811            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
10812                tokensReceivedReturn::_tokenize(ret)
10813            }
10814            #[inline]
10815            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
10816                <Self::ReturnTuple<
10817                    '_,
10818                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
10819                    .map(Into::into)
10820            }
10821            #[inline]
10822            fn abi_decode_returns_validate(
10823                data: &[u8],
10824            ) -> alloy_sol_types::Result<Self::Return> {
10825                <Self::ReturnTuple<
10826                    '_,
10827                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
10828                    .map(Into::into)
10829            }
10830        }
10831    };
10832    #[derive(serde::Serialize, serde::Deserialize)]
10833    #[derive(Default, Debug, PartialEq, Eq, Hash)]
10834    /**Function with signature `updateDomainSeparator()` and selector `0x89ccfe89`.
10835```solidity
10836function updateDomainSeparator() external;
10837```*/
10838    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
10839    #[derive(Clone)]
10840    pub struct updateDomainSeparatorCall;
10841    ///Container type for the return parameters of the [`updateDomainSeparator()`](updateDomainSeparatorCall) function.
10842    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
10843    #[derive(Clone)]
10844    pub struct updateDomainSeparatorReturn {}
10845    #[allow(
10846        non_camel_case_types,
10847        non_snake_case,
10848        clippy::pub_underscore_fields,
10849        clippy::style
10850    )]
10851    const _: () = {
10852        use alloy::sol_types as alloy_sol_types;
10853        {
10854            #[doc(hidden)]
10855            type UnderlyingSolTuple<'a> = ();
10856            #[doc(hidden)]
10857            type UnderlyingRustTuple<'a> = ();
10858            #[cfg(test)]
10859            #[allow(dead_code, unreachable_patterns)]
10860            fn _type_assertion(
10861                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
10862            ) {
10863                match _t {
10864                    alloy_sol_types::private::AssertTypeEq::<
10865                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
10866                    >(_) => {}
10867                }
10868            }
10869            #[automatically_derived]
10870            #[doc(hidden)]
10871            impl ::core::convert::From<updateDomainSeparatorCall>
10872            for UnderlyingRustTuple<'_> {
10873                fn from(value: updateDomainSeparatorCall) -> Self {
10874                    ()
10875                }
10876            }
10877            #[automatically_derived]
10878            #[doc(hidden)]
10879            impl ::core::convert::From<UnderlyingRustTuple<'_>>
10880            for updateDomainSeparatorCall {
10881                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
10882                    Self
10883                }
10884            }
10885        }
10886        {
10887            #[doc(hidden)]
10888            type UnderlyingSolTuple<'a> = ();
10889            #[doc(hidden)]
10890            type UnderlyingRustTuple<'a> = ();
10891            #[cfg(test)]
10892            #[allow(dead_code, unreachable_patterns)]
10893            fn _type_assertion(
10894                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
10895            ) {
10896                match _t {
10897                    alloy_sol_types::private::AssertTypeEq::<
10898                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
10899                    >(_) => {}
10900                }
10901            }
10902            #[automatically_derived]
10903            #[doc(hidden)]
10904            impl ::core::convert::From<updateDomainSeparatorReturn>
10905            for UnderlyingRustTuple<'_> {
10906                fn from(value: updateDomainSeparatorReturn) -> Self {
10907                    ()
10908                }
10909            }
10910            #[automatically_derived]
10911            #[doc(hidden)]
10912            impl ::core::convert::From<UnderlyingRustTuple<'_>>
10913            for updateDomainSeparatorReturn {
10914                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
10915                    Self {}
10916                }
10917            }
10918        }
10919        impl updateDomainSeparatorReturn {
10920            fn _tokenize(
10921                &self,
10922            ) -> <updateDomainSeparatorCall as alloy_sol_types::SolCall>::ReturnToken<
10923                '_,
10924            > {
10925                ()
10926            }
10927        }
10928        #[automatically_derived]
10929        impl alloy_sol_types::SolCall for updateDomainSeparatorCall {
10930            type Parameters<'a> = ();
10931            type Token<'a> = <Self::Parameters<
10932                'a,
10933            > as alloy_sol_types::SolType>::Token<'a>;
10934            type Return = updateDomainSeparatorReturn;
10935            type ReturnTuple<'a> = ();
10936            type ReturnToken<'a> = <Self::ReturnTuple<
10937                'a,
10938            > as alloy_sol_types::SolType>::Token<'a>;
10939            const SIGNATURE: &'static str = "updateDomainSeparator()";
10940            const SELECTOR: [u8; 4] = [137u8, 204u8, 254u8, 137u8];
10941            #[inline]
10942            fn new<'a>(
10943                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
10944            ) -> Self {
10945                tuple.into()
10946            }
10947            #[inline]
10948            fn tokenize(&self) -> Self::Token<'_> {
10949                ()
10950            }
10951            #[inline]
10952            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
10953                updateDomainSeparatorReturn::_tokenize(ret)
10954            }
10955            #[inline]
10956            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
10957                <Self::ReturnTuple<
10958                    '_,
10959                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
10960                    .map(Into::into)
10961            }
10962            #[inline]
10963            fn abi_decode_returns_validate(
10964                data: &[u8],
10965            ) -> alloy_sol_types::Result<Self::Return> {
10966                <Self::ReturnTuple<
10967                    '_,
10968                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
10969                    .map(Into::into)
10970            }
10971        }
10972    };
10973    #[derive(serde::Serialize, serde::Deserialize)]
10974    #[derive(Default, Debug, PartialEq, Eq, Hash)]
10975    /**Function with signature `updateLedgerDomainSeparator()` and selector `0xdc96fd50`.
10976```solidity
10977function updateLedgerDomainSeparator() external;
10978```*/
10979    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
10980    #[derive(Clone)]
10981    pub struct updateLedgerDomainSeparatorCall;
10982    ///Container type for the return parameters of the [`updateLedgerDomainSeparator()`](updateLedgerDomainSeparatorCall) function.
10983    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
10984    #[derive(Clone)]
10985    pub struct updateLedgerDomainSeparatorReturn {}
10986    #[allow(
10987        non_camel_case_types,
10988        non_snake_case,
10989        clippy::pub_underscore_fields,
10990        clippy::style
10991    )]
10992    const _: () = {
10993        use alloy::sol_types as alloy_sol_types;
10994        {
10995            #[doc(hidden)]
10996            type UnderlyingSolTuple<'a> = ();
10997            #[doc(hidden)]
10998            type UnderlyingRustTuple<'a> = ();
10999            #[cfg(test)]
11000            #[allow(dead_code, unreachable_patterns)]
11001            fn _type_assertion(
11002                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
11003            ) {
11004                match _t {
11005                    alloy_sol_types::private::AssertTypeEq::<
11006                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
11007                    >(_) => {}
11008                }
11009            }
11010            #[automatically_derived]
11011            #[doc(hidden)]
11012            impl ::core::convert::From<updateLedgerDomainSeparatorCall>
11013            for UnderlyingRustTuple<'_> {
11014                fn from(value: updateLedgerDomainSeparatorCall) -> Self {
11015                    ()
11016                }
11017            }
11018            #[automatically_derived]
11019            #[doc(hidden)]
11020            impl ::core::convert::From<UnderlyingRustTuple<'_>>
11021            for updateLedgerDomainSeparatorCall {
11022                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
11023                    Self
11024                }
11025            }
11026        }
11027        {
11028            #[doc(hidden)]
11029            type UnderlyingSolTuple<'a> = ();
11030            #[doc(hidden)]
11031            type UnderlyingRustTuple<'a> = ();
11032            #[cfg(test)]
11033            #[allow(dead_code, unreachable_patterns)]
11034            fn _type_assertion(
11035                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
11036            ) {
11037                match _t {
11038                    alloy_sol_types::private::AssertTypeEq::<
11039                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
11040                    >(_) => {}
11041                }
11042            }
11043            #[automatically_derived]
11044            #[doc(hidden)]
11045            impl ::core::convert::From<updateLedgerDomainSeparatorReturn>
11046            for UnderlyingRustTuple<'_> {
11047                fn from(value: updateLedgerDomainSeparatorReturn) -> Self {
11048                    ()
11049                }
11050            }
11051            #[automatically_derived]
11052            #[doc(hidden)]
11053            impl ::core::convert::From<UnderlyingRustTuple<'_>>
11054            for updateLedgerDomainSeparatorReturn {
11055                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
11056                    Self {}
11057                }
11058            }
11059        }
11060        impl updateLedgerDomainSeparatorReturn {
11061            fn _tokenize(
11062                &self,
11063            ) -> <updateLedgerDomainSeparatorCall as alloy_sol_types::SolCall>::ReturnToken<
11064                '_,
11065            > {
11066                ()
11067            }
11068        }
11069        #[automatically_derived]
11070        impl alloy_sol_types::SolCall for updateLedgerDomainSeparatorCall {
11071            type Parameters<'a> = ();
11072            type Token<'a> = <Self::Parameters<
11073                'a,
11074            > as alloy_sol_types::SolType>::Token<'a>;
11075            type Return = updateLedgerDomainSeparatorReturn;
11076            type ReturnTuple<'a> = ();
11077            type ReturnToken<'a> = <Self::ReturnTuple<
11078                'a,
11079            > as alloy_sol_types::SolType>::Token<'a>;
11080            const SIGNATURE: &'static str = "updateLedgerDomainSeparator()";
11081            const SELECTOR: [u8; 4] = [220u8, 150u8, 253u8, 80u8];
11082            #[inline]
11083            fn new<'a>(
11084                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
11085            ) -> Self {
11086                tuple.into()
11087            }
11088            #[inline]
11089            fn tokenize(&self) -> Self::Token<'_> {
11090                ()
11091            }
11092            #[inline]
11093            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
11094                updateLedgerDomainSeparatorReturn::_tokenize(ret)
11095            }
11096            #[inline]
11097            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
11098                <Self::ReturnTuple<
11099                    '_,
11100                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
11101                    .map(Into::into)
11102            }
11103            #[inline]
11104            fn abi_decode_returns_validate(
11105                data: &[u8],
11106            ) -> alloy_sol_types::Result<Self::Return> {
11107                <Self::ReturnTuple<
11108                    '_,
11109                > as alloy_sol_types::SolType>::abi_decode_sequence_validate(data)
11110                    .map(Into::into)
11111            }
11112        }
11113    };
11114    ///Container for all the [`HoprChannels`](self) function calls.
11115    #[derive(serde::Serialize, serde::Deserialize)]
11116    #[derive()]
11117    pub enum HoprChannelsCalls {
11118        #[allow(missing_docs)]
11119        ERC777_HOOK_FUND_CHANNEL_MULTI_SIZE(ERC777_HOOK_FUND_CHANNEL_MULTI_SIZECall),
11120        #[allow(missing_docs)]
11121        ERC777_HOOK_FUND_CHANNEL_SIZE(ERC777_HOOK_FUND_CHANNEL_SIZECall),
11122        #[allow(missing_docs)]
11123        LEDGER_VERSION(LEDGER_VERSIONCall),
11124        #[allow(missing_docs)]
11125        MAX_USED_BALANCE(MAX_USED_BALANCECall),
11126        #[allow(missing_docs)]
11127        MIN_USED_BALANCE(MIN_USED_BALANCECall),
11128        #[allow(missing_docs)]
11129        TOKENS_RECIPIENT_INTERFACE_HASH(TOKENS_RECIPIENT_INTERFACE_HASHCall),
11130        #[allow(missing_docs)]
11131        VERSION(VERSIONCall),
11132        #[allow(missing_docs)]
11133        _currentBlockTimestamp(_currentBlockTimestampCall),
11134        #[allow(missing_docs)]
11135        _getChannelId(_getChannelIdCall),
11136        #[allow(missing_docs)]
11137        _getTicketHash(_getTicketHashCall),
11138        #[allow(missing_docs)]
11139        _isWinningTicket(_isWinningTicketCall),
11140        #[allow(missing_docs)]
11141        canImplementInterfaceForAddress(canImplementInterfaceForAddressCall),
11142        #[allow(missing_docs)]
11143        channels(channelsCall),
11144        #[allow(missing_docs)]
11145        closeIncomingChannel(closeIncomingChannelCall),
11146        #[allow(missing_docs)]
11147        closeIncomingChannelSafe(closeIncomingChannelSafeCall),
11148        #[allow(missing_docs)]
11149        domainSeparator(domainSeparatorCall),
11150        #[allow(missing_docs)]
11151        finalizeOutgoingChannelClosure(finalizeOutgoingChannelClosureCall),
11152        #[allow(missing_docs)]
11153        finalizeOutgoingChannelClosureSafe(finalizeOutgoingChannelClosureSafeCall),
11154        #[allow(missing_docs)]
11155        fundChannel(fundChannelCall),
11156        #[allow(missing_docs)]
11157        fundChannelSafe(fundChannelSafeCall),
11158        #[allow(missing_docs)]
11159        initiateOutgoingChannelClosure(initiateOutgoingChannelClosureCall),
11160        #[allow(missing_docs)]
11161        initiateOutgoingChannelClosureSafe(initiateOutgoingChannelClosureSafeCall),
11162        #[allow(missing_docs)]
11163        ledgerDomainSeparator(ledgerDomainSeparatorCall),
11164        #[allow(missing_docs)]
11165        multicall(multicallCall),
11166        #[allow(missing_docs)]
11167        noticePeriodChannelClosure(noticePeriodChannelClosureCall),
11168        #[allow(missing_docs)]
11169        redeemTicket(redeemTicketCall),
11170        #[allow(missing_docs)]
11171        redeemTicketSafe(redeemTicketSafeCall),
11172        #[allow(missing_docs)]
11173        token(tokenCall),
11174        #[allow(missing_docs)]
11175        tokensReceived(tokensReceivedCall),
11176        #[allow(missing_docs)]
11177        updateDomainSeparator(updateDomainSeparatorCall),
11178        #[allow(missing_docs)]
11179        updateLedgerDomainSeparator(updateLedgerDomainSeparatorCall),
11180    }
11181    #[automatically_derived]
11182    impl HoprChannelsCalls {
11183        /// All the selectors of this enum.
11184        ///
11185        /// Note that the selectors might not be in the same order as the variants.
11186        /// No guarantees are made about the order of the selectors.
11187        ///
11188        /// Prefer using `SolInterface` methods instead.
11189        pub const SELECTORS: &'static [[u8; 4usize]] = &[
11190            [0u8, 35u8, 222u8, 41u8],
11191            [10u8, 190u8, 197u8, 143u8],
11192            [12u8, 216u8, 141u8, 114u8],
11193            [26u8, 127u8, 254u8, 122u8],
11194            [35u8, 203u8, 58u8, 192u8],
11195            [36u8, 8u8, 108u8, 194u8],
11196            [36u8, 156u8, 179u8, 250u8],
11197            [41u8, 57u8, 46u8, 50u8],
11198            [68u8, 218u8, 230u8, 248u8],
11199            [84u8, 162u8, 237u8, 245u8],
11200            [93u8, 47u8, 7u8, 197u8],
11201            [101u8, 21u8, 20u8, 191u8],
11202            [114u8, 88u8, 28u8, 192u8],
11203            [120u8, 216u8, 1u8, 109u8],
11204            [122u8, 126u8, 189u8, 123u8],
11205            [124u8, 142u8, 40u8, 218u8],
11206            [135u8, 53u8, 45u8, 101u8],
11207            [137u8, 204u8, 254u8, 137u8],
11208            [140u8, 55u8, 16u8, 201u8],
11209            [172u8, 150u8, 80u8, 216u8],
11210            [185u8, 32u8, 222u8, 237u8],
11211            [189u8, 166u8, 95u8, 69u8],
11212            [190u8, 155u8, 171u8, 220u8],
11213            [201u8, 102u8, 196u8, 254u8],
11214            [220u8, 150u8, 253u8, 80u8],
11215            [221u8, 173u8, 25u8, 2u8],
11216            [246u8, 152u8, 218u8, 37u8],
11217            [252u8, 12u8, 84u8, 106u8],
11218            [252u8, 85u8, 48u8, 154u8],
11219            [252u8, 183u8, 121u8, 111u8],
11220            [255u8, 161u8, 173u8, 116u8],
11221        ];
11222    }
11223    #[automatically_derived]
11224    impl alloy_sol_types::SolInterface for HoprChannelsCalls {
11225        const NAME: &'static str = "HoprChannelsCalls";
11226        const MIN_DATA_LENGTH: usize = 0usize;
11227        const COUNT: usize = 31usize;
11228        #[inline]
11229        fn selector(&self) -> [u8; 4] {
11230            match self {
11231                Self::ERC777_HOOK_FUND_CHANNEL_MULTI_SIZE(_) => {
11232                    <ERC777_HOOK_FUND_CHANNEL_MULTI_SIZECall as alloy_sol_types::SolCall>::SELECTOR
11233                }
11234                Self::ERC777_HOOK_FUND_CHANNEL_SIZE(_) => {
11235                    <ERC777_HOOK_FUND_CHANNEL_SIZECall as alloy_sol_types::SolCall>::SELECTOR
11236                }
11237                Self::LEDGER_VERSION(_) => {
11238                    <LEDGER_VERSIONCall as alloy_sol_types::SolCall>::SELECTOR
11239                }
11240                Self::MAX_USED_BALANCE(_) => {
11241                    <MAX_USED_BALANCECall as alloy_sol_types::SolCall>::SELECTOR
11242                }
11243                Self::MIN_USED_BALANCE(_) => {
11244                    <MIN_USED_BALANCECall as alloy_sol_types::SolCall>::SELECTOR
11245                }
11246                Self::TOKENS_RECIPIENT_INTERFACE_HASH(_) => {
11247                    <TOKENS_RECIPIENT_INTERFACE_HASHCall as alloy_sol_types::SolCall>::SELECTOR
11248                }
11249                Self::VERSION(_) => <VERSIONCall as alloy_sol_types::SolCall>::SELECTOR,
11250                Self::_currentBlockTimestamp(_) => {
11251                    <_currentBlockTimestampCall as alloy_sol_types::SolCall>::SELECTOR
11252                }
11253                Self::_getChannelId(_) => {
11254                    <_getChannelIdCall as alloy_sol_types::SolCall>::SELECTOR
11255                }
11256                Self::_getTicketHash(_) => {
11257                    <_getTicketHashCall as alloy_sol_types::SolCall>::SELECTOR
11258                }
11259                Self::_isWinningTicket(_) => {
11260                    <_isWinningTicketCall as alloy_sol_types::SolCall>::SELECTOR
11261                }
11262                Self::canImplementInterfaceForAddress(_) => {
11263                    <canImplementInterfaceForAddressCall as alloy_sol_types::SolCall>::SELECTOR
11264                }
11265                Self::channels(_) => <channelsCall as alloy_sol_types::SolCall>::SELECTOR,
11266                Self::closeIncomingChannel(_) => {
11267                    <closeIncomingChannelCall as alloy_sol_types::SolCall>::SELECTOR
11268                }
11269                Self::closeIncomingChannelSafe(_) => {
11270                    <closeIncomingChannelSafeCall as alloy_sol_types::SolCall>::SELECTOR
11271                }
11272                Self::domainSeparator(_) => {
11273                    <domainSeparatorCall as alloy_sol_types::SolCall>::SELECTOR
11274                }
11275                Self::finalizeOutgoingChannelClosure(_) => {
11276                    <finalizeOutgoingChannelClosureCall as alloy_sol_types::SolCall>::SELECTOR
11277                }
11278                Self::finalizeOutgoingChannelClosureSafe(_) => {
11279                    <finalizeOutgoingChannelClosureSafeCall as alloy_sol_types::SolCall>::SELECTOR
11280                }
11281                Self::fundChannel(_) => {
11282                    <fundChannelCall as alloy_sol_types::SolCall>::SELECTOR
11283                }
11284                Self::fundChannelSafe(_) => {
11285                    <fundChannelSafeCall as alloy_sol_types::SolCall>::SELECTOR
11286                }
11287                Self::initiateOutgoingChannelClosure(_) => {
11288                    <initiateOutgoingChannelClosureCall as alloy_sol_types::SolCall>::SELECTOR
11289                }
11290                Self::initiateOutgoingChannelClosureSafe(_) => {
11291                    <initiateOutgoingChannelClosureSafeCall as alloy_sol_types::SolCall>::SELECTOR
11292                }
11293                Self::ledgerDomainSeparator(_) => {
11294                    <ledgerDomainSeparatorCall as alloy_sol_types::SolCall>::SELECTOR
11295                }
11296                Self::multicall(_) => {
11297                    <multicallCall as alloy_sol_types::SolCall>::SELECTOR
11298                }
11299                Self::noticePeriodChannelClosure(_) => {
11300                    <noticePeriodChannelClosureCall as alloy_sol_types::SolCall>::SELECTOR
11301                }
11302                Self::redeemTicket(_) => {
11303                    <redeemTicketCall as alloy_sol_types::SolCall>::SELECTOR
11304                }
11305                Self::redeemTicketSafe(_) => {
11306                    <redeemTicketSafeCall as alloy_sol_types::SolCall>::SELECTOR
11307                }
11308                Self::token(_) => <tokenCall as alloy_sol_types::SolCall>::SELECTOR,
11309                Self::tokensReceived(_) => {
11310                    <tokensReceivedCall as alloy_sol_types::SolCall>::SELECTOR
11311                }
11312                Self::updateDomainSeparator(_) => {
11313                    <updateDomainSeparatorCall as alloy_sol_types::SolCall>::SELECTOR
11314                }
11315                Self::updateLedgerDomainSeparator(_) => {
11316                    <updateLedgerDomainSeparatorCall as alloy_sol_types::SolCall>::SELECTOR
11317                }
11318            }
11319        }
11320        #[inline]
11321        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
11322            Self::SELECTORS.get(i).copied()
11323        }
11324        #[inline]
11325        fn valid_selector(selector: [u8; 4]) -> bool {
11326            Self::SELECTORS.binary_search(&selector).is_ok()
11327        }
11328        #[inline]
11329        #[allow(non_snake_case)]
11330        fn abi_decode_raw(
11331            selector: [u8; 4],
11332            data: &[u8],
11333        ) -> alloy_sol_types::Result<Self> {
11334            static DECODE_SHIMS: &[fn(
11335                &[u8],
11336            ) -> alloy_sol_types::Result<HoprChannelsCalls>] = &[
11337                {
11338                    fn tokensReceived(
11339                        data: &[u8],
11340                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11341                        <tokensReceivedCall as alloy_sol_types::SolCall>::abi_decode_raw(
11342                                data,
11343                            )
11344                            .map(HoprChannelsCalls::tokensReceived)
11345                    }
11346                    tokensReceived
11347                },
11348                {
11349                    fn fundChannelSafe(
11350                        data: &[u8],
11351                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11352                        <fundChannelSafeCall as alloy_sol_types::SolCall>::abi_decode_raw(
11353                                data,
11354                            )
11355                            .map(HoprChannelsCalls::fundChannelSafe)
11356                    }
11357                    fundChannelSafe
11358                },
11359                {
11360                    fn redeemTicketSafe(
11361                        data: &[u8],
11362                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11363                        <redeemTicketSafeCall as alloy_sol_types::SolCall>::abi_decode_raw(
11364                                data,
11365                            )
11366                            .map(HoprChannelsCalls::redeemTicketSafe)
11367                    }
11368                    redeemTicketSafe
11369                },
11370                {
11371                    fn closeIncomingChannel(
11372                        data: &[u8],
11373                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11374                        <closeIncomingChannelCall as alloy_sol_types::SolCall>::abi_decode_raw(
11375                                data,
11376                            )
11377                            .map(HoprChannelsCalls::closeIncomingChannel)
11378                    }
11379                    closeIncomingChannel
11380                },
11381                {
11382                    fn finalizeOutgoingChannelClosure(
11383                        data: &[u8],
11384                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11385                        <finalizeOutgoingChannelClosureCall as alloy_sol_types::SolCall>::abi_decode_raw(
11386                                data,
11387                            )
11388                            .map(HoprChannelsCalls::finalizeOutgoingChannelClosure)
11389                    }
11390                    finalizeOutgoingChannelClosure
11391                },
11392                {
11393                    fn _getTicketHash(
11394                        data: &[u8],
11395                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11396                        <_getTicketHashCall as alloy_sol_types::SolCall>::abi_decode_raw(
11397                                data,
11398                            )
11399                            .map(HoprChannelsCalls::_getTicketHash)
11400                    }
11401                    _getTicketHash
11402                },
11403                {
11404                    fn canImplementInterfaceForAddress(
11405                        data: &[u8],
11406                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11407                        <canImplementInterfaceForAddressCall as alloy_sol_types::SolCall>::abi_decode_raw(
11408                                data,
11409                            )
11410                            .map(HoprChannelsCalls::canImplementInterfaceForAddress)
11411                    }
11412                    canImplementInterfaceForAddress
11413                },
11414                {
11415                    fn MIN_USED_BALANCE(
11416                        data: &[u8],
11417                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11418                        <MIN_USED_BALANCECall as alloy_sol_types::SolCall>::abi_decode_raw(
11419                                data,
11420                            )
11421                            .map(HoprChannelsCalls::MIN_USED_BALANCE)
11422                    }
11423                    MIN_USED_BALANCE
11424                },
11425                {
11426                    fn ERC777_HOOK_FUND_CHANNEL_SIZE(
11427                        data: &[u8],
11428                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11429                        <ERC777_HOOK_FUND_CHANNEL_SIZECall as alloy_sol_types::SolCall>::abi_decode_raw(
11430                                data,
11431                            )
11432                            .map(HoprChannelsCalls::ERC777_HOOK_FUND_CHANNEL_SIZE)
11433                    }
11434                    ERC777_HOOK_FUND_CHANNEL_SIZE
11435                },
11436                {
11437                    fn closeIncomingChannelSafe(
11438                        data: &[u8],
11439                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11440                        <closeIncomingChannelSafeCall as alloy_sol_types::SolCall>::abi_decode_raw(
11441                                data,
11442                            )
11443                            .map(HoprChannelsCalls::closeIncomingChannelSafe)
11444                    }
11445                    closeIncomingChannelSafe
11446                },
11447                {
11448                    fn MAX_USED_BALANCE(
11449                        data: &[u8],
11450                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11451                        <MAX_USED_BALANCECall as alloy_sol_types::SolCall>::abi_decode_raw(
11452                                data,
11453                            )
11454                            .map(HoprChannelsCalls::MAX_USED_BALANCE)
11455                    }
11456                    MAX_USED_BALANCE
11457                },
11458                {
11459                    fn finalizeOutgoingChannelClosureSafe(
11460                        data: &[u8],
11461                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11462                        <finalizeOutgoingChannelClosureSafeCall as alloy_sol_types::SolCall>::abi_decode_raw(
11463                                data,
11464                            )
11465                            .map(HoprChannelsCalls::finalizeOutgoingChannelClosureSafe)
11466                    }
11467                    finalizeOutgoingChannelClosureSafe
11468                },
11469                {
11470                    fn TOKENS_RECIPIENT_INTERFACE_HASH(
11471                        data: &[u8],
11472                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11473                        <TOKENS_RECIPIENT_INTERFACE_HASHCall as alloy_sol_types::SolCall>::abi_decode_raw(
11474                                data,
11475                            )
11476                            .map(HoprChannelsCalls::TOKENS_RECIPIENT_INTERFACE_HASH)
11477                    }
11478                    TOKENS_RECIPIENT_INTERFACE_HASH
11479                },
11480                {
11481                    fn ERC777_HOOK_FUND_CHANNEL_MULTI_SIZE(
11482                        data: &[u8],
11483                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11484                        <ERC777_HOOK_FUND_CHANNEL_MULTI_SIZECall as alloy_sol_types::SolCall>::abi_decode_raw(
11485                                data,
11486                            )
11487                            .map(HoprChannelsCalls::ERC777_HOOK_FUND_CHANNEL_MULTI_SIZE)
11488                    }
11489                    ERC777_HOOK_FUND_CHANNEL_MULTI_SIZE
11490                },
11491                {
11492                    fn channels(
11493                        data: &[u8],
11494                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11495                        <channelsCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
11496                            .map(HoprChannelsCalls::channels)
11497                    }
11498                    channels
11499                },
11500                {
11501                    fn initiateOutgoingChannelClosure(
11502                        data: &[u8],
11503                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11504                        <initiateOutgoingChannelClosureCall as alloy_sol_types::SolCall>::abi_decode_raw(
11505                                data,
11506                            )
11507                            .map(HoprChannelsCalls::initiateOutgoingChannelClosure)
11508                    }
11509                    initiateOutgoingChannelClosure
11510                },
11511                {
11512                    fn noticePeriodChannelClosure(
11513                        data: &[u8],
11514                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11515                        <noticePeriodChannelClosureCall as alloy_sol_types::SolCall>::abi_decode_raw(
11516                                data,
11517                            )
11518                            .map(HoprChannelsCalls::noticePeriodChannelClosure)
11519                    }
11520                    noticePeriodChannelClosure
11521                },
11522                {
11523                    fn updateDomainSeparator(
11524                        data: &[u8],
11525                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11526                        <updateDomainSeparatorCall as alloy_sol_types::SolCall>::abi_decode_raw(
11527                                data,
11528                            )
11529                            .map(HoprChannelsCalls::updateDomainSeparator)
11530                    }
11531                    updateDomainSeparator
11532                },
11533                {
11534                    fn _isWinningTicket(
11535                        data: &[u8],
11536                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11537                        <_isWinningTicketCall as alloy_sol_types::SolCall>::abi_decode_raw(
11538                                data,
11539                            )
11540                            .map(HoprChannelsCalls::_isWinningTicket)
11541                    }
11542                    _isWinningTicket
11543                },
11544                {
11545                    fn multicall(
11546                        data: &[u8],
11547                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11548                        <multicallCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
11549                            .map(HoprChannelsCalls::multicall)
11550                    }
11551                    multicall
11552                },
11553                {
11554                    fn _currentBlockTimestamp(
11555                        data: &[u8],
11556                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11557                        <_currentBlockTimestampCall as alloy_sol_types::SolCall>::abi_decode_raw(
11558                                data,
11559                            )
11560                            .map(HoprChannelsCalls::_currentBlockTimestamp)
11561                    }
11562                    _currentBlockTimestamp
11563                },
11564                {
11565                    fn initiateOutgoingChannelClosureSafe(
11566                        data: &[u8],
11567                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11568                        <initiateOutgoingChannelClosureSafeCall as alloy_sol_types::SolCall>::abi_decode_raw(
11569                                data,
11570                            )
11571                            .map(HoprChannelsCalls::initiateOutgoingChannelClosureSafe)
11572                    }
11573                    initiateOutgoingChannelClosureSafe
11574                },
11575                {
11576                    fn _getChannelId(
11577                        data: &[u8],
11578                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11579                        <_getChannelIdCall as alloy_sol_types::SolCall>::abi_decode_raw(
11580                                data,
11581                            )
11582                            .map(HoprChannelsCalls::_getChannelId)
11583                    }
11584                    _getChannelId
11585                },
11586                {
11587                    fn ledgerDomainSeparator(
11588                        data: &[u8],
11589                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11590                        <ledgerDomainSeparatorCall as alloy_sol_types::SolCall>::abi_decode_raw(
11591                                data,
11592                            )
11593                            .map(HoprChannelsCalls::ledgerDomainSeparator)
11594                    }
11595                    ledgerDomainSeparator
11596                },
11597                {
11598                    fn updateLedgerDomainSeparator(
11599                        data: &[u8],
11600                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11601                        <updateLedgerDomainSeparatorCall as alloy_sol_types::SolCall>::abi_decode_raw(
11602                                data,
11603                            )
11604                            .map(HoprChannelsCalls::updateLedgerDomainSeparator)
11605                    }
11606                    updateLedgerDomainSeparator
11607                },
11608                {
11609                    fn LEDGER_VERSION(
11610                        data: &[u8],
11611                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11612                        <LEDGER_VERSIONCall as alloy_sol_types::SolCall>::abi_decode_raw(
11613                                data,
11614                            )
11615                            .map(HoprChannelsCalls::LEDGER_VERSION)
11616                    }
11617                    LEDGER_VERSION
11618                },
11619                {
11620                    fn domainSeparator(
11621                        data: &[u8],
11622                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11623                        <domainSeparatorCall as alloy_sol_types::SolCall>::abi_decode_raw(
11624                                data,
11625                            )
11626                            .map(HoprChannelsCalls::domainSeparator)
11627                    }
11628                    domainSeparator
11629                },
11630                {
11631                    fn token(data: &[u8]) -> alloy_sol_types::Result<HoprChannelsCalls> {
11632                        <tokenCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
11633                            .map(HoprChannelsCalls::token)
11634                    }
11635                    token
11636                },
11637                {
11638                    fn fundChannel(
11639                        data: &[u8],
11640                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11641                        <fundChannelCall as alloy_sol_types::SolCall>::abi_decode_raw(
11642                                data,
11643                            )
11644                            .map(HoprChannelsCalls::fundChannel)
11645                    }
11646                    fundChannel
11647                },
11648                {
11649                    fn redeemTicket(
11650                        data: &[u8],
11651                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11652                        <redeemTicketCall as alloy_sol_types::SolCall>::abi_decode_raw(
11653                                data,
11654                            )
11655                            .map(HoprChannelsCalls::redeemTicket)
11656                    }
11657                    redeemTicket
11658                },
11659                {
11660                    fn VERSION(
11661                        data: &[u8],
11662                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11663                        <VERSIONCall as alloy_sol_types::SolCall>::abi_decode_raw(data)
11664                            .map(HoprChannelsCalls::VERSION)
11665                    }
11666                    VERSION
11667                },
11668            ];
11669            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
11670                return Err(
11671                    alloy_sol_types::Error::unknown_selector(
11672                        <Self as alloy_sol_types::SolInterface>::NAME,
11673                        selector,
11674                    ),
11675                );
11676            };
11677            DECODE_SHIMS[idx](data)
11678        }
11679        #[inline]
11680        #[allow(non_snake_case)]
11681        fn abi_decode_raw_validate(
11682            selector: [u8; 4],
11683            data: &[u8],
11684        ) -> alloy_sol_types::Result<Self> {
11685            static DECODE_VALIDATE_SHIMS: &[fn(
11686                &[u8],
11687            ) -> alloy_sol_types::Result<HoprChannelsCalls>] = &[
11688                {
11689                    fn tokensReceived(
11690                        data: &[u8],
11691                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11692                        <tokensReceivedCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11693                                data,
11694                            )
11695                            .map(HoprChannelsCalls::tokensReceived)
11696                    }
11697                    tokensReceived
11698                },
11699                {
11700                    fn fundChannelSafe(
11701                        data: &[u8],
11702                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11703                        <fundChannelSafeCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11704                                data,
11705                            )
11706                            .map(HoprChannelsCalls::fundChannelSafe)
11707                    }
11708                    fundChannelSafe
11709                },
11710                {
11711                    fn redeemTicketSafe(
11712                        data: &[u8],
11713                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11714                        <redeemTicketSafeCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11715                                data,
11716                            )
11717                            .map(HoprChannelsCalls::redeemTicketSafe)
11718                    }
11719                    redeemTicketSafe
11720                },
11721                {
11722                    fn closeIncomingChannel(
11723                        data: &[u8],
11724                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11725                        <closeIncomingChannelCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11726                                data,
11727                            )
11728                            .map(HoprChannelsCalls::closeIncomingChannel)
11729                    }
11730                    closeIncomingChannel
11731                },
11732                {
11733                    fn finalizeOutgoingChannelClosure(
11734                        data: &[u8],
11735                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11736                        <finalizeOutgoingChannelClosureCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11737                                data,
11738                            )
11739                            .map(HoprChannelsCalls::finalizeOutgoingChannelClosure)
11740                    }
11741                    finalizeOutgoingChannelClosure
11742                },
11743                {
11744                    fn _getTicketHash(
11745                        data: &[u8],
11746                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11747                        <_getTicketHashCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11748                                data,
11749                            )
11750                            .map(HoprChannelsCalls::_getTicketHash)
11751                    }
11752                    _getTicketHash
11753                },
11754                {
11755                    fn canImplementInterfaceForAddress(
11756                        data: &[u8],
11757                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11758                        <canImplementInterfaceForAddressCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11759                                data,
11760                            )
11761                            .map(HoprChannelsCalls::canImplementInterfaceForAddress)
11762                    }
11763                    canImplementInterfaceForAddress
11764                },
11765                {
11766                    fn MIN_USED_BALANCE(
11767                        data: &[u8],
11768                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11769                        <MIN_USED_BALANCECall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11770                                data,
11771                            )
11772                            .map(HoprChannelsCalls::MIN_USED_BALANCE)
11773                    }
11774                    MIN_USED_BALANCE
11775                },
11776                {
11777                    fn ERC777_HOOK_FUND_CHANNEL_SIZE(
11778                        data: &[u8],
11779                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11780                        <ERC777_HOOK_FUND_CHANNEL_SIZECall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11781                                data,
11782                            )
11783                            .map(HoprChannelsCalls::ERC777_HOOK_FUND_CHANNEL_SIZE)
11784                    }
11785                    ERC777_HOOK_FUND_CHANNEL_SIZE
11786                },
11787                {
11788                    fn closeIncomingChannelSafe(
11789                        data: &[u8],
11790                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11791                        <closeIncomingChannelSafeCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11792                                data,
11793                            )
11794                            .map(HoprChannelsCalls::closeIncomingChannelSafe)
11795                    }
11796                    closeIncomingChannelSafe
11797                },
11798                {
11799                    fn MAX_USED_BALANCE(
11800                        data: &[u8],
11801                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11802                        <MAX_USED_BALANCECall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11803                                data,
11804                            )
11805                            .map(HoprChannelsCalls::MAX_USED_BALANCE)
11806                    }
11807                    MAX_USED_BALANCE
11808                },
11809                {
11810                    fn finalizeOutgoingChannelClosureSafe(
11811                        data: &[u8],
11812                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11813                        <finalizeOutgoingChannelClosureSafeCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11814                                data,
11815                            )
11816                            .map(HoprChannelsCalls::finalizeOutgoingChannelClosureSafe)
11817                    }
11818                    finalizeOutgoingChannelClosureSafe
11819                },
11820                {
11821                    fn TOKENS_RECIPIENT_INTERFACE_HASH(
11822                        data: &[u8],
11823                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11824                        <TOKENS_RECIPIENT_INTERFACE_HASHCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11825                                data,
11826                            )
11827                            .map(HoprChannelsCalls::TOKENS_RECIPIENT_INTERFACE_HASH)
11828                    }
11829                    TOKENS_RECIPIENT_INTERFACE_HASH
11830                },
11831                {
11832                    fn ERC777_HOOK_FUND_CHANNEL_MULTI_SIZE(
11833                        data: &[u8],
11834                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11835                        <ERC777_HOOK_FUND_CHANNEL_MULTI_SIZECall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11836                                data,
11837                            )
11838                            .map(HoprChannelsCalls::ERC777_HOOK_FUND_CHANNEL_MULTI_SIZE)
11839                    }
11840                    ERC777_HOOK_FUND_CHANNEL_MULTI_SIZE
11841                },
11842                {
11843                    fn channels(
11844                        data: &[u8],
11845                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11846                        <channelsCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11847                                data,
11848                            )
11849                            .map(HoprChannelsCalls::channels)
11850                    }
11851                    channels
11852                },
11853                {
11854                    fn initiateOutgoingChannelClosure(
11855                        data: &[u8],
11856                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11857                        <initiateOutgoingChannelClosureCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11858                                data,
11859                            )
11860                            .map(HoprChannelsCalls::initiateOutgoingChannelClosure)
11861                    }
11862                    initiateOutgoingChannelClosure
11863                },
11864                {
11865                    fn noticePeriodChannelClosure(
11866                        data: &[u8],
11867                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11868                        <noticePeriodChannelClosureCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11869                                data,
11870                            )
11871                            .map(HoprChannelsCalls::noticePeriodChannelClosure)
11872                    }
11873                    noticePeriodChannelClosure
11874                },
11875                {
11876                    fn updateDomainSeparator(
11877                        data: &[u8],
11878                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11879                        <updateDomainSeparatorCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11880                                data,
11881                            )
11882                            .map(HoprChannelsCalls::updateDomainSeparator)
11883                    }
11884                    updateDomainSeparator
11885                },
11886                {
11887                    fn _isWinningTicket(
11888                        data: &[u8],
11889                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11890                        <_isWinningTicketCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11891                                data,
11892                            )
11893                            .map(HoprChannelsCalls::_isWinningTicket)
11894                    }
11895                    _isWinningTicket
11896                },
11897                {
11898                    fn multicall(
11899                        data: &[u8],
11900                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11901                        <multicallCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11902                                data,
11903                            )
11904                            .map(HoprChannelsCalls::multicall)
11905                    }
11906                    multicall
11907                },
11908                {
11909                    fn _currentBlockTimestamp(
11910                        data: &[u8],
11911                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11912                        <_currentBlockTimestampCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11913                                data,
11914                            )
11915                            .map(HoprChannelsCalls::_currentBlockTimestamp)
11916                    }
11917                    _currentBlockTimestamp
11918                },
11919                {
11920                    fn initiateOutgoingChannelClosureSafe(
11921                        data: &[u8],
11922                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11923                        <initiateOutgoingChannelClosureSafeCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11924                                data,
11925                            )
11926                            .map(HoprChannelsCalls::initiateOutgoingChannelClosureSafe)
11927                    }
11928                    initiateOutgoingChannelClosureSafe
11929                },
11930                {
11931                    fn _getChannelId(
11932                        data: &[u8],
11933                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11934                        <_getChannelIdCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11935                                data,
11936                            )
11937                            .map(HoprChannelsCalls::_getChannelId)
11938                    }
11939                    _getChannelId
11940                },
11941                {
11942                    fn ledgerDomainSeparator(
11943                        data: &[u8],
11944                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11945                        <ledgerDomainSeparatorCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11946                                data,
11947                            )
11948                            .map(HoprChannelsCalls::ledgerDomainSeparator)
11949                    }
11950                    ledgerDomainSeparator
11951                },
11952                {
11953                    fn updateLedgerDomainSeparator(
11954                        data: &[u8],
11955                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11956                        <updateLedgerDomainSeparatorCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11957                                data,
11958                            )
11959                            .map(HoprChannelsCalls::updateLedgerDomainSeparator)
11960                    }
11961                    updateLedgerDomainSeparator
11962                },
11963                {
11964                    fn LEDGER_VERSION(
11965                        data: &[u8],
11966                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11967                        <LEDGER_VERSIONCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11968                                data,
11969                            )
11970                            .map(HoprChannelsCalls::LEDGER_VERSION)
11971                    }
11972                    LEDGER_VERSION
11973                },
11974                {
11975                    fn domainSeparator(
11976                        data: &[u8],
11977                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11978                        <domainSeparatorCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11979                                data,
11980                            )
11981                            .map(HoprChannelsCalls::domainSeparator)
11982                    }
11983                    domainSeparator
11984                },
11985                {
11986                    fn token(data: &[u8]) -> alloy_sol_types::Result<HoprChannelsCalls> {
11987                        <tokenCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11988                                data,
11989                            )
11990                            .map(HoprChannelsCalls::token)
11991                    }
11992                    token
11993                },
11994                {
11995                    fn fundChannel(
11996                        data: &[u8],
11997                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
11998                        <fundChannelCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
11999                                data,
12000                            )
12001                            .map(HoprChannelsCalls::fundChannel)
12002                    }
12003                    fundChannel
12004                },
12005                {
12006                    fn redeemTicket(
12007                        data: &[u8],
12008                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
12009                        <redeemTicketCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
12010                                data,
12011                            )
12012                            .map(HoprChannelsCalls::redeemTicket)
12013                    }
12014                    redeemTicket
12015                },
12016                {
12017                    fn VERSION(
12018                        data: &[u8],
12019                    ) -> alloy_sol_types::Result<HoprChannelsCalls> {
12020                        <VERSIONCall as alloy_sol_types::SolCall>::abi_decode_raw_validate(
12021                                data,
12022                            )
12023                            .map(HoprChannelsCalls::VERSION)
12024                    }
12025                    VERSION
12026                },
12027            ];
12028            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
12029                return Err(
12030                    alloy_sol_types::Error::unknown_selector(
12031                        <Self as alloy_sol_types::SolInterface>::NAME,
12032                        selector,
12033                    ),
12034                );
12035            };
12036            DECODE_VALIDATE_SHIMS[idx](data)
12037        }
12038        #[inline]
12039        fn abi_encoded_size(&self) -> usize {
12040            match self {
12041                Self::ERC777_HOOK_FUND_CHANNEL_MULTI_SIZE(inner) => {
12042                    <ERC777_HOOK_FUND_CHANNEL_MULTI_SIZECall as alloy_sol_types::SolCall>::abi_encoded_size(
12043                        inner,
12044                    )
12045                }
12046                Self::ERC777_HOOK_FUND_CHANNEL_SIZE(inner) => {
12047                    <ERC777_HOOK_FUND_CHANNEL_SIZECall as alloy_sol_types::SolCall>::abi_encoded_size(
12048                        inner,
12049                    )
12050                }
12051                Self::LEDGER_VERSION(inner) => {
12052                    <LEDGER_VERSIONCall as alloy_sol_types::SolCall>::abi_encoded_size(
12053                        inner,
12054                    )
12055                }
12056                Self::MAX_USED_BALANCE(inner) => {
12057                    <MAX_USED_BALANCECall as alloy_sol_types::SolCall>::abi_encoded_size(
12058                        inner,
12059                    )
12060                }
12061                Self::MIN_USED_BALANCE(inner) => {
12062                    <MIN_USED_BALANCECall as alloy_sol_types::SolCall>::abi_encoded_size(
12063                        inner,
12064                    )
12065                }
12066                Self::TOKENS_RECIPIENT_INTERFACE_HASH(inner) => {
12067                    <TOKENS_RECIPIENT_INTERFACE_HASHCall as alloy_sol_types::SolCall>::abi_encoded_size(
12068                        inner,
12069                    )
12070                }
12071                Self::VERSION(inner) => {
12072                    <VERSIONCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
12073                }
12074                Self::_currentBlockTimestamp(inner) => {
12075                    <_currentBlockTimestampCall as alloy_sol_types::SolCall>::abi_encoded_size(
12076                        inner,
12077                    )
12078                }
12079                Self::_getChannelId(inner) => {
12080                    <_getChannelIdCall as alloy_sol_types::SolCall>::abi_encoded_size(
12081                        inner,
12082                    )
12083                }
12084                Self::_getTicketHash(inner) => {
12085                    <_getTicketHashCall as alloy_sol_types::SolCall>::abi_encoded_size(
12086                        inner,
12087                    )
12088                }
12089                Self::_isWinningTicket(inner) => {
12090                    <_isWinningTicketCall as alloy_sol_types::SolCall>::abi_encoded_size(
12091                        inner,
12092                    )
12093                }
12094                Self::canImplementInterfaceForAddress(inner) => {
12095                    <canImplementInterfaceForAddressCall as alloy_sol_types::SolCall>::abi_encoded_size(
12096                        inner,
12097                    )
12098                }
12099                Self::channels(inner) => {
12100                    <channelsCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
12101                }
12102                Self::closeIncomingChannel(inner) => {
12103                    <closeIncomingChannelCall as alloy_sol_types::SolCall>::abi_encoded_size(
12104                        inner,
12105                    )
12106                }
12107                Self::closeIncomingChannelSafe(inner) => {
12108                    <closeIncomingChannelSafeCall as alloy_sol_types::SolCall>::abi_encoded_size(
12109                        inner,
12110                    )
12111                }
12112                Self::domainSeparator(inner) => {
12113                    <domainSeparatorCall as alloy_sol_types::SolCall>::abi_encoded_size(
12114                        inner,
12115                    )
12116                }
12117                Self::finalizeOutgoingChannelClosure(inner) => {
12118                    <finalizeOutgoingChannelClosureCall as alloy_sol_types::SolCall>::abi_encoded_size(
12119                        inner,
12120                    )
12121                }
12122                Self::finalizeOutgoingChannelClosureSafe(inner) => {
12123                    <finalizeOutgoingChannelClosureSafeCall as alloy_sol_types::SolCall>::abi_encoded_size(
12124                        inner,
12125                    )
12126                }
12127                Self::fundChannel(inner) => {
12128                    <fundChannelCall as alloy_sol_types::SolCall>::abi_encoded_size(
12129                        inner,
12130                    )
12131                }
12132                Self::fundChannelSafe(inner) => {
12133                    <fundChannelSafeCall as alloy_sol_types::SolCall>::abi_encoded_size(
12134                        inner,
12135                    )
12136                }
12137                Self::initiateOutgoingChannelClosure(inner) => {
12138                    <initiateOutgoingChannelClosureCall as alloy_sol_types::SolCall>::abi_encoded_size(
12139                        inner,
12140                    )
12141                }
12142                Self::initiateOutgoingChannelClosureSafe(inner) => {
12143                    <initiateOutgoingChannelClosureSafeCall as alloy_sol_types::SolCall>::abi_encoded_size(
12144                        inner,
12145                    )
12146                }
12147                Self::ledgerDomainSeparator(inner) => {
12148                    <ledgerDomainSeparatorCall as alloy_sol_types::SolCall>::abi_encoded_size(
12149                        inner,
12150                    )
12151                }
12152                Self::multicall(inner) => {
12153                    <multicallCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
12154                }
12155                Self::noticePeriodChannelClosure(inner) => {
12156                    <noticePeriodChannelClosureCall as alloy_sol_types::SolCall>::abi_encoded_size(
12157                        inner,
12158                    )
12159                }
12160                Self::redeemTicket(inner) => {
12161                    <redeemTicketCall as alloy_sol_types::SolCall>::abi_encoded_size(
12162                        inner,
12163                    )
12164                }
12165                Self::redeemTicketSafe(inner) => {
12166                    <redeemTicketSafeCall as alloy_sol_types::SolCall>::abi_encoded_size(
12167                        inner,
12168                    )
12169                }
12170                Self::token(inner) => {
12171                    <tokenCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
12172                }
12173                Self::tokensReceived(inner) => {
12174                    <tokensReceivedCall as alloy_sol_types::SolCall>::abi_encoded_size(
12175                        inner,
12176                    )
12177                }
12178                Self::updateDomainSeparator(inner) => {
12179                    <updateDomainSeparatorCall as alloy_sol_types::SolCall>::abi_encoded_size(
12180                        inner,
12181                    )
12182                }
12183                Self::updateLedgerDomainSeparator(inner) => {
12184                    <updateLedgerDomainSeparatorCall as alloy_sol_types::SolCall>::abi_encoded_size(
12185                        inner,
12186                    )
12187                }
12188            }
12189        }
12190        #[inline]
12191        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
12192            match self {
12193                Self::ERC777_HOOK_FUND_CHANNEL_MULTI_SIZE(inner) => {
12194                    <ERC777_HOOK_FUND_CHANNEL_MULTI_SIZECall as alloy_sol_types::SolCall>::abi_encode_raw(
12195                        inner,
12196                        out,
12197                    )
12198                }
12199                Self::ERC777_HOOK_FUND_CHANNEL_SIZE(inner) => {
12200                    <ERC777_HOOK_FUND_CHANNEL_SIZECall as alloy_sol_types::SolCall>::abi_encode_raw(
12201                        inner,
12202                        out,
12203                    )
12204                }
12205                Self::LEDGER_VERSION(inner) => {
12206                    <LEDGER_VERSIONCall as alloy_sol_types::SolCall>::abi_encode_raw(
12207                        inner,
12208                        out,
12209                    )
12210                }
12211                Self::MAX_USED_BALANCE(inner) => {
12212                    <MAX_USED_BALANCECall as alloy_sol_types::SolCall>::abi_encode_raw(
12213                        inner,
12214                        out,
12215                    )
12216                }
12217                Self::MIN_USED_BALANCE(inner) => {
12218                    <MIN_USED_BALANCECall as alloy_sol_types::SolCall>::abi_encode_raw(
12219                        inner,
12220                        out,
12221                    )
12222                }
12223                Self::TOKENS_RECIPIENT_INTERFACE_HASH(inner) => {
12224                    <TOKENS_RECIPIENT_INTERFACE_HASHCall as alloy_sol_types::SolCall>::abi_encode_raw(
12225                        inner,
12226                        out,
12227                    )
12228                }
12229                Self::VERSION(inner) => {
12230                    <VERSIONCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
12231                }
12232                Self::_currentBlockTimestamp(inner) => {
12233                    <_currentBlockTimestampCall as alloy_sol_types::SolCall>::abi_encode_raw(
12234                        inner,
12235                        out,
12236                    )
12237                }
12238                Self::_getChannelId(inner) => {
12239                    <_getChannelIdCall as alloy_sol_types::SolCall>::abi_encode_raw(
12240                        inner,
12241                        out,
12242                    )
12243                }
12244                Self::_getTicketHash(inner) => {
12245                    <_getTicketHashCall as alloy_sol_types::SolCall>::abi_encode_raw(
12246                        inner,
12247                        out,
12248                    )
12249                }
12250                Self::_isWinningTicket(inner) => {
12251                    <_isWinningTicketCall as alloy_sol_types::SolCall>::abi_encode_raw(
12252                        inner,
12253                        out,
12254                    )
12255                }
12256                Self::canImplementInterfaceForAddress(inner) => {
12257                    <canImplementInterfaceForAddressCall as alloy_sol_types::SolCall>::abi_encode_raw(
12258                        inner,
12259                        out,
12260                    )
12261                }
12262                Self::channels(inner) => {
12263                    <channelsCall as alloy_sol_types::SolCall>::abi_encode_raw(
12264                        inner,
12265                        out,
12266                    )
12267                }
12268                Self::closeIncomingChannel(inner) => {
12269                    <closeIncomingChannelCall as alloy_sol_types::SolCall>::abi_encode_raw(
12270                        inner,
12271                        out,
12272                    )
12273                }
12274                Self::closeIncomingChannelSafe(inner) => {
12275                    <closeIncomingChannelSafeCall as alloy_sol_types::SolCall>::abi_encode_raw(
12276                        inner,
12277                        out,
12278                    )
12279                }
12280                Self::domainSeparator(inner) => {
12281                    <domainSeparatorCall as alloy_sol_types::SolCall>::abi_encode_raw(
12282                        inner,
12283                        out,
12284                    )
12285                }
12286                Self::finalizeOutgoingChannelClosure(inner) => {
12287                    <finalizeOutgoingChannelClosureCall as alloy_sol_types::SolCall>::abi_encode_raw(
12288                        inner,
12289                        out,
12290                    )
12291                }
12292                Self::finalizeOutgoingChannelClosureSafe(inner) => {
12293                    <finalizeOutgoingChannelClosureSafeCall as alloy_sol_types::SolCall>::abi_encode_raw(
12294                        inner,
12295                        out,
12296                    )
12297                }
12298                Self::fundChannel(inner) => {
12299                    <fundChannelCall as alloy_sol_types::SolCall>::abi_encode_raw(
12300                        inner,
12301                        out,
12302                    )
12303                }
12304                Self::fundChannelSafe(inner) => {
12305                    <fundChannelSafeCall as alloy_sol_types::SolCall>::abi_encode_raw(
12306                        inner,
12307                        out,
12308                    )
12309                }
12310                Self::initiateOutgoingChannelClosure(inner) => {
12311                    <initiateOutgoingChannelClosureCall as alloy_sol_types::SolCall>::abi_encode_raw(
12312                        inner,
12313                        out,
12314                    )
12315                }
12316                Self::initiateOutgoingChannelClosureSafe(inner) => {
12317                    <initiateOutgoingChannelClosureSafeCall as alloy_sol_types::SolCall>::abi_encode_raw(
12318                        inner,
12319                        out,
12320                    )
12321                }
12322                Self::ledgerDomainSeparator(inner) => {
12323                    <ledgerDomainSeparatorCall as alloy_sol_types::SolCall>::abi_encode_raw(
12324                        inner,
12325                        out,
12326                    )
12327                }
12328                Self::multicall(inner) => {
12329                    <multicallCall as alloy_sol_types::SolCall>::abi_encode_raw(
12330                        inner,
12331                        out,
12332                    )
12333                }
12334                Self::noticePeriodChannelClosure(inner) => {
12335                    <noticePeriodChannelClosureCall as alloy_sol_types::SolCall>::abi_encode_raw(
12336                        inner,
12337                        out,
12338                    )
12339                }
12340                Self::redeemTicket(inner) => {
12341                    <redeemTicketCall as alloy_sol_types::SolCall>::abi_encode_raw(
12342                        inner,
12343                        out,
12344                    )
12345                }
12346                Self::redeemTicketSafe(inner) => {
12347                    <redeemTicketSafeCall as alloy_sol_types::SolCall>::abi_encode_raw(
12348                        inner,
12349                        out,
12350                    )
12351                }
12352                Self::token(inner) => {
12353                    <tokenCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
12354                }
12355                Self::tokensReceived(inner) => {
12356                    <tokensReceivedCall as alloy_sol_types::SolCall>::abi_encode_raw(
12357                        inner,
12358                        out,
12359                    )
12360                }
12361                Self::updateDomainSeparator(inner) => {
12362                    <updateDomainSeparatorCall as alloy_sol_types::SolCall>::abi_encode_raw(
12363                        inner,
12364                        out,
12365                    )
12366                }
12367                Self::updateLedgerDomainSeparator(inner) => {
12368                    <updateLedgerDomainSeparatorCall as alloy_sol_types::SolCall>::abi_encode_raw(
12369                        inner,
12370                        out,
12371                    )
12372                }
12373            }
12374        }
12375    }
12376    ///Container for all the [`HoprChannels`](self) custom errors.
12377    #[derive(serde::Serialize, serde::Deserialize)]
12378    #[derive(Debug, PartialEq, Eq, Hash)]
12379    pub enum HoprChannelsErrors {
12380        #[allow(missing_docs)]
12381        AlreadyInitialized(AlreadyInitialized),
12382        #[allow(missing_docs)]
12383        BalanceExceedsGlobalPerChannelAllowance(BalanceExceedsGlobalPerChannelAllowance),
12384        #[allow(missing_docs)]
12385        ContractNotResponsible(ContractNotResponsible),
12386        #[allow(missing_docs)]
12387        InsufficientChannelBalance(InsufficientChannelBalance),
12388        #[allow(missing_docs)]
12389        InvalidAggregatedTicketInterval(InvalidAggregatedTicketInterval),
12390        #[allow(missing_docs)]
12391        InvalidBalance(InvalidBalance),
12392        #[allow(missing_docs)]
12393        InvalidCurvePoint(InvalidCurvePoint),
12394        #[allow(missing_docs)]
12395        InvalidFieldElement(InvalidFieldElement),
12396        #[allow(missing_docs)]
12397        InvalidNoticePeriod(InvalidNoticePeriod),
12398        #[allow(missing_docs)]
12399        InvalidPointWitness(InvalidPointWitness),
12400        #[allow(missing_docs)]
12401        InvalidSafeAddress(InvalidSafeAddress),
12402        #[allow(missing_docs)]
12403        InvalidTicketSignature(InvalidTicketSignature),
12404        #[allow(missing_docs)]
12405        InvalidTokenRecipient(InvalidTokenRecipient),
12406        #[allow(missing_docs)]
12407        InvalidTokensReceivedUsage(InvalidTokensReceivedUsage),
12408        #[allow(missing_docs)]
12409        InvalidVRFProof(InvalidVRFProof),
12410        #[allow(missing_docs)]
12411        MultiSigUninitialized(MultiSigUninitialized),
12412        #[allow(missing_docs)]
12413        NoticePeriodNotDue(NoticePeriodNotDue),
12414        #[allow(missing_docs)]
12415        SourceEqualsDestination(SourceEqualsDestination),
12416        #[allow(missing_docs)]
12417        TicketIsNotAWin(TicketIsNotAWin),
12418        #[allow(missing_docs)]
12419        TokenTransferFailed(TokenTransferFailed),
12420        #[allow(missing_docs)]
12421        WrongChannelState(WrongChannelState),
12422        #[allow(missing_docs)]
12423        WrongToken(WrongToken),
12424        #[allow(missing_docs)]
12425        ZeroAddress(ZeroAddress),
12426    }
12427    #[automatically_derived]
12428    impl HoprChannelsErrors {
12429        /// All the selectors of this enum.
12430        ///
12431        /// Note that the selectors might not be in the same order as the variants.
12432        /// No guarantees are made about the order of the selectors.
12433        ///
12434        /// Prefer using `SolInterface` methods instead.
12435        pub const SELECTORS: &'static [[u8; 4usize]] = &[
12436            [4u8, 92u8, 75u8, 2u8],
12437            [13u8, 193u8, 73u8, 240u8],
12438            [58u8, 228u8, 237u8, 107u8],
12439            [69u8, 74u8, 32u8, 200u8],
12440            [73u8, 148u8, 99u8, 193u8],
12441            [105u8, 238u8, 111u8, 40u8],
12442            [113u8, 100u8, 3u8, 42u8],
12443            [114u8, 69u8, 74u8, 130u8],
12444            [142u8, 157u8, 124u8, 94u8],
12445            [149u8, 253u8, 189u8, 184u8],
12446            [151u8, 163u8, 174u8, 210u8],
12447            [160u8, 243u8, 254u8, 234u8],
12448            [164u8, 243u8, 187u8, 228u8],
12449            [172u8, 213u8, 168u8, 35u8],
12450            [177u8, 71u8, 99u8, 108u8],
12451            [185u8, 196u8, 145u8, 8u8],
12452            [197u8, 46u8, 62u8, 255u8],
12453            [205u8, 221u8, 83u8, 86u8],
12454            [208u8, 220u8, 60u8, 30u8],
12455            [234u8, 192u8, 211u8, 137u8],
12456            [237u8, 253u8, 205u8, 152u8],
12457            [238u8, 131u8, 92u8, 137u8],
12458            [249u8, 238u8, 145u8, 7u8],
12459        ];
12460    }
12461    #[automatically_derived]
12462    impl alloy_sol_types::SolInterface for HoprChannelsErrors {
12463        const NAME: &'static str = "HoprChannelsErrors";
12464        const MIN_DATA_LENGTH: usize = 0usize;
12465        const COUNT: usize = 23usize;
12466        #[inline]
12467        fn selector(&self) -> [u8; 4] {
12468            match self {
12469                Self::AlreadyInitialized(_) => {
12470                    <AlreadyInitialized as alloy_sol_types::SolError>::SELECTOR
12471                }
12472                Self::BalanceExceedsGlobalPerChannelAllowance(_) => {
12473                    <BalanceExceedsGlobalPerChannelAllowance as alloy_sol_types::SolError>::SELECTOR
12474                }
12475                Self::ContractNotResponsible(_) => {
12476                    <ContractNotResponsible as alloy_sol_types::SolError>::SELECTOR
12477                }
12478                Self::InsufficientChannelBalance(_) => {
12479                    <InsufficientChannelBalance as alloy_sol_types::SolError>::SELECTOR
12480                }
12481                Self::InvalidAggregatedTicketInterval(_) => {
12482                    <InvalidAggregatedTicketInterval as alloy_sol_types::SolError>::SELECTOR
12483                }
12484                Self::InvalidBalance(_) => {
12485                    <InvalidBalance as alloy_sol_types::SolError>::SELECTOR
12486                }
12487                Self::InvalidCurvePoint(_) => {
12488                    <InvalidCurvePoint as alloy_sol_types::SolError>::SELECTOR
12489                }
12490                Self::InvalidFieldElement(_) => {
12491                    <InvalidFieldElement as alloy_sol_types::SolError>::SELECTOR
12492                }
12493                Self::InvalidNoticePeriod(_) => {
12494                    <InvalidNoticePeriod as alloy_sol_types::SolError>::SELECTOR
12495                }
12496                Self::InvalidPointWitness(_) => {
12497                    <InvalidPointWitness as alloy_sol_types::SolError>::SELECTOR
12498                }
12499                Self::InvalidSafeAddress(_) => {
12500                    <InvalidSafeAddress as alloy_sol_types::SolError>::SELECTOR
12501                }
12502                Self::InvalidTicketSignature(_) => {
12503                    <InvalidTicketSignature as alloy_sol_types::SolError>::SELECTOR
12504                }
12505                Self::InvalidTokenRecipient(_) => {
12506                    <InvalidTokenRecipient as alloy_sol_types::SolError>::SELECTOR
12507                }
12508                Self::InvalidTokensReceivedUsage(_) => {
12509                    <InvalidTokensReceivedUsage as alloy_sol_types::SolError>::SELECTOR
12510                }
12511                Self::InvalidVRFProof(_) => {
12512                    <InvalidVRFProof as alloy_sol_types::SolError>::SELECTOR
12513                }
12514                Self::MultiSigUninitialized(_) => {
12515                    <MultiSigUninitialized as alloy_sol_types::SolError>::SELECTOR
12516                }
12517                Self::NoticePeriodNotDue(_) => {
12518                    <NoticePeriodNotDue as alloy_sol_types::SolError>::SELECTOR
12519                }
12520                Self::SourceEqualsDestination(_) => {
12521                    <SourceEqualsDestination as alloy_sol_types::SolError>::SELECTOR
12522                }
12523                Self::TicketIsNotAWin(_) => {
12524                    <TicketIsNotAWin as alloy_sol_types::SolError>::SELECTOR
12525                }
12526                Self::TokenTransferFailed(_) => {
12527                    <TokenTransferFailed as alloy_sol_types::SolError>::SELECTOR
12528                }
12529                Self::WrongChannelState(_) => {
12530                    <WrongChannelState as alloy_sol_types::SolError>::SELECTOR
12531                }
12532                Self::WrongToken(_) => {
12533                    <WrongToken as alloy_sol_types::SolError>::SELECTOR
12534                }
12535                Self::ZeroAddress(_) => {
12536                    <ZeroAddress as alloy_sol_types::SolError>::SELECTOR
12537                }
12538            }
12539        }
12540        #[inline]
12541        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
12542            Self::SELECTORS.get(i).copied()
12543        }
12544        #[inline]
12545        fn valid_selector(selector: [u8; 4]) -> bool {
12546            Self::SELECTORS.binary_search(&selector).is_ok()
12547        }
12548        #[inline]
12549        #[allow(non_snake_case)]
12550        fn abi_decode_raw(
12551            selector: [u8; 4],
12552            data: &[u8],
12553        ) -> alloy_sol_types::Result<Self> {
12554            static DECODE_SHIMS: &[fn(
12555                &[u8],
12556            ) -> alloy_sol_types::Result<HoprChannelsErrors>] = &[
12557                {
12558                    fn TokenTransferFailed(
12559                        data: &[u8],
12560                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12561                        <TokenTransferFailed as alloy_sol_types::SolError>::abi_decode_raw(
12562                                data,
12563                            )
12564                            .map(HoprChannelsErrors::TokenTransferFailed)
12565                    }
12566                    TokenTransferFailed
12567                },
12568                {
12569                    fn AlreadyInitialized(
12570                        data: &[u8],
12571                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12572                        <AlreadyInitialized as alloy_sol_types::SolError>::abi_decode_raw(
12573                                data,
12574                            )
12575                            .map(HoprChannelsErrors::AlreadyInitialized)
12576                    }
12577                    AlreadyInitialized
12578                },
12579                {
12580                    fn InvalidFieldElement(
12581                        data: &[u8],
12582                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12583                        <InvalidFieldElement as alloy_sol_types::SolError>::abi_decode_raw(
12584                                data,
12585                            )
12586                            .map(HoprChannelsErrors::InvalidFieldElement)
12587                    }
12588                    InvalidFieldElement
12589                },
12590                {
12591                    fn MultiSigUninitialized(
12592                        data: &[u8],
12593                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12594                        <MultiSigUninitialized as alloy_sol_types::SolError>::abi_decode_raw(
12595                                data,
12596                            )
12597                            .map(HoprChannelsErrors::MultiSigUninitialized)
12598                    }
12599                    MultiSigUninitialized
12600                },
12601                {
12602                    fn WrongChannelState(
12603                        data: &[u8],
12604                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12605                        <WrongChannelState as alloy_sol_types::SolError>::abi_decode_raw(
12606                                data,
12607                            )
12608                            .map(HoprChannelsErrors::WrongChannelState)
12609                    }
12610                    WrongChannelState
12611                },
12612                {
12613                    fn InvalidTokensReceivedUsage(
12614                        data: &[u8],
12615                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12616                        <InvalidTokensReceivedUsage as alloy_sol_types::SolError>::abi_decode_raw(
12617                                data,
12618                            )
12619                            .map(HoprChannelsErrors::InvalidTokensReceivedUsage)
12620                    }
12621                    InvalidTokensReceivedUsage
12622                },
12623                {
12624                    fn NoticePeriodNotDue(
12625                        data: &[u8],
12626                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12627                        <NoticePeriodNotDue as alloy_sol_types::SolError>::abi_decode_raw(
12628                                data,
12629                            )
12630                            .map(HoprChannelsErrors::NoticePeriodNotDue)
12631                    }
12632                    NoticePeriodNotDue
12633                },
12634                {
12635                    fn InvalidCurvePoint(
12636                        data: &[u8],
12637                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12638                        <InvalidCurvePoint as alloy_sol_types::SolError>::abi_decode_raw(
12639                                data,
12640                            )
12641                            .map(HoprChannelsErrors::InvalidCurvePoint)
12642                    }
12643                    InvalidCurvePoint
12644                },
12645                {
12646                    fn InvalidSafeAddress(
12647                        data: &[u8],
12648                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12649                        <InvalidSafeAddress as alloy_sol_types::SolError>::abi_decode_raw(
12650                                data,
12651                            )
12652                            .map(HoprChannelsErrors::InvalidSafeAddress)
12653                    }
12654                    InvalidSafeAddress
12655                },
12656                {
12657                    fn InvalidVRFProof(
12658                        data: &[u8],
12659                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12660                        <InvalidVRFProof as alloy_sol_types::SolError>::abi_decode_raw(
12661                                data,
12662                            )
12663                            .map(HoprChannelsErrors::InvalidVRFProof)
12664                    }
12665                    InvalidVRFProof
12666                },
12667                {
12668                    fn SourceEqualsDestination(
12669                        data: &[u8],
12670                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12671                        <SourceEqualsDestination as alloy_sol_types::SolError>::abi_decode_raw(
12672                                data,
12673                            )
12674                            .map(HoprChannelsErrors::SourceEqualsDestination)
12675                    }
12676                    SourceEqualsDestination
12677                },
12678                {
12679                    fn WrongToken(
12680                        data: &[u8],
12681                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12682                        <WrongToken as alloy_sol_types::SolError>::abi_decode_raw(data)
12683                            .map(HoprChannelsErrors::WrongToken)
12684                    }
12685                    WrongToken
12686                },
12687                {
12688                    fn BalanceExceedsGlobalPerChannelAllowance(
12689                        data: &[u8],
12690                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12691                        <BalanceExceedsGlobalPerChannelAllowance as alloy_sol_types::SolError>::abi_decode_raw(
12692                                data,
12693                            )
12694                            .map(
12695                                HoprChannelsErrors::BalanceExceedsGlobalPerChannelAllowance,
12696                            )
12697                    }
12698                    BalanceExceedsGlobalPerChannelAllowance
12699                },
12700                {
12701                    fn ContractNotResponsible(
12702                        data: &[u8],
12703                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12704                        <ContractNotResponsible as alloy_sol_types::SolError>::abi_decode_raw(
12705                                data,
12706                            )
12707                            .map(HoprChannelsErrors::ContractNotResponsible)
12708                    }
12709                    ContractNotResponsible
12710                },
12711                {
12712                    fn InsufficientChannelBalance(
12713                        data: &[u8],
12714                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12715                        <InsufficientChannelBalance as alloy_sol_types::SolError>::abi_decode_raw(
12716                                data,
12717                            )
12718                            .map(HoprChannelsErrors::InsufficientChannelBalance)
12719                    }
12720                    InsufficientChannelBalance
12721                },
12722                {
12723                    fn InvalidTokenRecipient(
12724                        data: &[u8],
12725                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12726                        <InvalidTokenRecipient as alloy_sol_types::SolError>::abi_decode_raw(
12727                                data,
12728                            )
12729                            .map(HoprChannelsErrors::InvalidTokenRecipient)
12730                    }
12731                    InvalidTokenRecipient
12732                },
12733                {
12734                    fn InvalidBalance(
12735                        data: &[u8],
12736                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12737                        <InvalidBalance as alloy_sol_types::SolError>::abi_decode_raw(
12738                                data,
12739                            )
12740                            .map(HoprChannelsErrors::InvalidBalance)
12741                    }
12742                    InvalidBalance
12743                },
12744                {
12745                    fn InvalidTicketSignature(
12746                        data: &[u8],
12747                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12748                        <InvalidTicketSignature as alloy_sol_types::SolError>::abi_decode_raw(
12749                                data,
12750                            )
12751                            .map(HoprChannelsErrors::InvalidTicketSignature)
12752                    }
12753                    InvalidTicketSignature
12754                },
12755                {
12756                    fn InvalidAggregatedTicketInterval(
12757                        data: &[u8],
12758                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12759                        <InvalidAggregatedTicketInterval as alloy_sol_types::SolError>::abi_decode_raw(
12760                                data,
12761                            )
12762                            .map(HoprChannelsErrors::InvalidAggregatedTicketInterval)
12763                    }
12764                    InvalidAggregatedTicketInterval
12765                },
12766                {
12767                    fn ZeroAddress(
12768                        data: &[u8],
12769                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12770                        <ZeroAddress as alloy_sol_types::SolError>::abi_decode_raw(data)
12771                            .map(HoprChannelsErrors::ZeroAddress)
12772                    }
12773                    ZeroAddress
12774                },
12775                {
12776                    fn InvalidPointWitness(
12777                        data: &[u8],
12778                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12779                        <InvalidPointWitness as alloy_sol_types::SolError>::abi_decode_raw(
12780                                data,
12781                            )
12782                            .map(HoprChannelsErrors::InvalidPointWitness)
12783                    }
12784                    InvalidPointWitness
12785                },
12786                {
12787                    fn TicketIsNotAWin(
12788                        data: &[u8],
12789                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12790                        <TicketIsNotAWin as alloy_sol_types::SolError>::abi_decode_raw(
12791                                data,
12792                            )
12793                            .map(HoprChannelsErrors::TicketIsNotAWin)
12794                    }
12795                    TicketIsNotAWin
12796                },
12797                {
12798                    fn InvalidNoticePeriod(
12799                        data: &[u8],
12800                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12801                        <InvalidNoticePeriod as alloy_sol_types::SolError>::abi_decode_raw(
12802                                data,
12803                            )
12804                            .map(HoprChannelsErrors::InvalidNoticePeriod)
12805                    }
12806                    InvalidNoticePeriod
12807                },
12808            ];
12809            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
12810                return Err(
12811                    alloy_sol_types::Error::unknown_selector(
12812                        <Self as alloy_sol_types::SolInterface>::NAME,
12813                        selector,
12814                    ),
12815                );
12816            };
12817            DECODE_SHIMS[idx](data)
12818        }
12819        #[inline]
12820        #[allow(non_snake_case)]
12821        fn abi_decode_raw_validate(
12822            selector: [u8; 4],
12823            data: &[u8],
12824        ) -> alloy_sol_types::Result<Self> {
12825            static DECODE_VALIDATE_SHIMS: &[fn(
12826                &[u8],
12827            ) -> alloy_sol_types::Result<HoprChannelsErrors>] = &[
12828                {
12829                    fn TokenTransferFailed(
12830                        data: &[u8],
12831                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12832                        <TokenTransferFailed as alloy_sol_types::SolError>::abi_decode_raw_validate(
12833                                data,
12834                            )
12835                            .map(HoprChannelsErrors::TokenTransferFailed)
12836                    }
12837                    TokenTransferFailed
12838                },
12839                {
12840                    fn AlreadyInitialized(
12841                        data: &[u8],
12842                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12843                        <AlreadyInitialized as alloy_sol_types::SolError>::abi_decode_raw_validate(
12844                                data,
12845                            )
12846                            .map(HoprChannelsErrors::AlreadyInitialized)
12847                    }
12848                    AlreadyInitialized
12849                },
12850                {
12851                    fn InvalidFieldElement(
12852                        data: &[u8],
12853                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12854                        <InvalidFieldElement as alloy_sol_types::SolError>::abi_decode_raw_validate(
12855                                data,
12856                            )
12857                            .map(HoprChannelsErrors::InvalidFieldElement)
12858                    }
12859                    InvalidFieldElement
12860                },
12861                {
12862                    fn MultiSigUninitialized(
12863                        data: &[u8],
12864                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12865                        <MultiSigUninitialized as alloy_sol_types::SolError>::abi_decode_raw_validate(
12866                                data,
12867                            )
12868                            .map(HoprChannelsErrors::MultiSigUninitialized)
12869                    }
12870                    MultiSigUninitialized
12871                },
12872                {
12873                    fn WrongChannelState(
12874                        data: &[u8],
12875                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12876                        <WrongChannelState as alloy_sol_types::SolError>::abi_decode_raw_validate(
12877                                data,
12878                            )
12879                            .map(HoprChannelsErrors::WrongChannelState)
12880                    }
12881                    WrongChannelState
12882                },
12883                {
12884                    fn InvalidTokensReceivedUsage(
12885                        data: &[u8],
12886                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12887                        <InvalidTokensReceivedUsage as alloy_sol_types::SolError>::abi_decode_raw_validate(
12888                                data,
12889                            )
12890                            .map(HoprChannelsErrors::InvalidTokensReceivedUsage)
12891                    }
12892                    InvalidTokensReceivedUsage
12893                },
12894                {
12895                    fn NoticePeriodNotDue(
12896                        data: &[u8],
12897                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12898                        <NoticePeriodNotDue as alloy_sol_types::SolError>::abi_decode_raw_validate(
12899                                data,
12900                            )
12901                            .map(HoprChannelsErrors::NoticePeriodNotDue)
12902                    }
12903                    NoticePeriodNotDue
12904                },
12905                {
12906                    fn InvalidCurvePoint(
12907                        data: &[u8],
12908                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12909                        <InvalidCurvePoint as alloy_sol_types::SolError>::abi_decode_raw_validate(
12910                                data,
12911                            )
12912                            .map(HoprChannelsErrors::InvalidCurvePoint)
12913                    }
12914                    InvalidCurvePoint
12915                },
12916                {
12917                    fn InvalidSafeAddress(
12918                        data: &[u8],
12919                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12920                        <InvalidSafeAddress as alloy_sol_types::SolError>::abi_decode_raw_validate(
12921                                data,
12922                            )
12923                            .map(HoprChannelsErrors::InvalidSafeAddress)
12924                    }
12925                    InvalidSafeAddress
12926                },
12927                {
12928                    fn InvalidVRFProof(
12929                        data: &[u8],
12930                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12931                        <InvalidVRFProof as alloy_sol_types::SolError>::abi_decode_raw_validate(
12932                                data,
12933                            )
12934                            .map(HoprChannelsErrors::InvalidVRFProof)
12935                    }
12936                    InvalidVRFProof
12937                },
12938                {
12939                    fn SourceEqualsDestination(
12940                        data: &[u8],
12941                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12942                        <SourceEqualsDestination as alloy_sol_types::SolError>::abi_decode_raw_validate(
12943                                data,
12944                            )
12945                            .map(HoprChannelsErrors::SourceEqualsDestination)
12946                    }
12947                    SourceEqualsDestination
12948                },
12949                {
12950                    fn WrongToken(
12951                        data: &[u8],
12952                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12953                        <WrongToken as alloy_sol_types::SolError>::abi_decode_raw_validate(
12954                                data,
12955                            )
12956                            .map(HoprChannelsErrors::WrongToken)
12957                    }
12958                    WrongToken
12959                },
12960                {
12961                    fn BalanceExceedsGlobalPerChannelAllowance(
12962                        data: &[u8],
12963                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12964                        <BalanceExceedsGlobalPerChannelAllowance as alloy_sol_types::SolError>::abi_decode_raw_validate(
12965                                data,
12966                            )
12967                            .map(
12968                                HoprChannelsErrors::BalanceExceedsGlobalPerChannelAllowance,
12969                            )
12970                    }
12971                    BalanceExceedsGlobalPerChannelAllowance
12972                },
12973                {
12974                    fn ContractNotResponsible(
12975                        data: &[u8],
12976                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12977                        <ContractNotResponsible as alloy_sol_types::SolError>::abi_decode_raw_validate(
12978                                data,
12979                            )
12980                            .map(HoprChannelsErrors::ContractNotResponsible)
12981                    }
12982                    ContractNotResponsible
12983                },
12984                {
12985                    fn InsufficientChannelBalance(
12986                        data: &[u8],
12987                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12988                        <InsufficientChannelBalance as alloy_sol_types::SolError>::abi_decode_raw_validate(
12989                                data,
12990                            )
12991                            .map(HoprChannelsErrors::InsufficientChannelBalance)
12992                    }
12993                    InsufficientChannelBalance
12994                },
12995                {
12996                    fn InvalidTokenRecipient(
12997                        data: &[u8],
12998                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
12999                        <InvalidTokenRecipient as alloy_sol_types::SolError>::abi_decode_raw_validate(
13000                                data,
13001                            )
13002                            .map(HoprChannelsErrors::InvalidTokenRecipient)
13003                    }
13004                    InvalidTokenRecipient
13005                },
13006                {
13007                    fn InvalidBalance(
13008                        data: &[u8],
13009                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
13010                        <InvalidBalance as alloy_sol_types::SolError>::abi_decode_raw_validate(
13011                                data,
13012                            )
13013                            .map(HoprChannelsErrors::InvalidBalance)
13014                    }
13015                    InvalidBalance
13016                },
13017                {
13018                    fn InvalidTicketSignature(
13019                        data: &[u8],
13020                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
13021                        <InvalidTicketSignature as alloy_sol_types::SolError>::abi_decode_raw_validate(
13022                                data,
13023                            )
13024                            .map(HoprChannelsErrors::InvalidTicketSignature)
13025                    }
13026                    InvalidTicketSignature
13027                },
13028                {
13029                    fn InvalidAggregatedTicketInterval(
13030                        data: &[u8],
13031                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
13032                        <InvalidAggregatedTicketInterval as alloy_sol_types::SolError>::abi_decode_raw_validate(
13033                                data,
13034                            )
13035                            .map(HoprChannelsErrors::InvalidAggregatedTicketInterval)
13036                    }
13037                    InvalidAggregatedTicketInterval
13038                },
13039                {
13040                    fn ZeroAddress(
13041                        data: &[u8],
13042                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
13043                        <ZeroAddress as alloy_sol_types::SolError>::abi_decode_raw_validate(
13044                                data,
13045                            )
13046                            .map(HoprChannelsErrors::ZeroAddress)
13047                    }
13048                    ZeroAddress
13049                },
13050                {
13051                    fn InvalidPointWitness(
13052                        data: &[u8],
13053                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
13054                        <InvalidPointWitness as alloy_sol_types::SolError>::abi_decode_raw_validate(
13055                                data,
13056                            )
13057                            .map(HoprChannelsErrors::InvalidPointWitness)
13058                    }
13059                    InvalidPointWitness
13060                },
13061                {
13062                    fn TicketIsNotAWin(
13063                        data: &[u8],
13064                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
13065                        <TicketIsNotAWin as alloy_sol_types::SolError>::abi_decode_raw_validate(
13066                                data,
13067                            )
13068                            .map(HoprChannelsErrors::TicketIsNotAWin)
13069                    }
13070                    TicketIsNotAWin
13071                },
13072                {
13073                    fn InvalidNoticePeriod(
13074                        data: &[u8],
13075                    ) -> alloy_sol_types::Result<HoprChannelsErrors> {
13076                        <InvalidNoticePeriod as alloy_sol_types::SolError>::abi_decode_raw_validate(
13077                                data,
13078                            )
13079                            .map(HoprChannelsErrors::InvalidNoticePeriod)
13080                    }
13081                    InvalidNoticePeriod
13082                },
13083            ];
13084            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
13085                return Err(
13086                    alloy_sol_types::Error::unknown_selector(
13087                        <Self as alloy_sol_types::SolInterface>::NAME,
13088                        selector,
13089                    ),
13090                );
13091            };
13092            DECODE_VALIDATE_SHIMS[idx](data)
13093        }
13094        #[inline]
13095        fn abi_encoded_size(&self) -> usize {
13096            match self {
13097                Self::AlreadyInitialized(inner) => {
13098                    <AlreadyInitialized as alloy_sol_types::SolError>::abi_encoded_size(
13099                        inner,
13100                    )
13101                }
13102                Self::BalanceExceedsGlobalPerChannelAllowance(inner) => {
13103                    <BalanceExceedsGlobalPerChannelAllowance as alloy_sol_types::SolError>::abi_encoded_size(
13104                        inner,
13105                    )
13106                }
13107                Self::ContractNotResponsible(inner) => {
13108                    <ContractNotResponsible as alloy_sol_types::SolError>::abi_encoded_size(
13109                        inner,
13110                    )
13111                }
13112                Self::InsufficientChannelBalance(inner) => {
13113                    <InsufficientChannelBalance as alloy_sol_types::SolError>::abi_encoded_size(
13114                        inner,
13115                    )
13116                }
13117                Self::InvalidAggregatedTicketInterval(inner) => {
13118                    <InvalidAggregatedTicketInterval as alloy_sol_types::SolError>::abi_encoded_size(
13119                        inner,
13120                    )
13121                }
13122                Self::InvalidBalance(inner) => {
13123                    <InvalidBalance as alloy_sol_types::SolError>::abi_encoded_size(
13124                        inner,
13125                    )
13126                }
13127                Self::InvalidCurvePoint(inner) => {
13128                    <InvalidCurvePoint as alloy_sol_types::SolError>::abi_encoded_size(
13129                        inner,
13130                    )
13131                }
13132                Self::InvalidFieldElement(inner) => {
13133                    <InvalidFieldElement as alloy_sol_types::SolError>::abi_encoded_size(
13134                        inner,
13135                    )
13136                }
13137                Self::InvalidNoticePeriod(inner) => {
13138                    <InvalidNoticePeriod as alloy_sol_types::SolError>::abi_encoded_size(
13139                        inner,
13140                    )
13141                }
13142                Self::InvalidPointWitness(inner) => {
13143                    <InvalidPointWitness as alloy_sol_types::SolError>::abi_encoded_size(
13144                        inner,
13145                    )
13146                }
13147                Self::InvalidSafeAddress(inner) => {
13148                    <InvalidSafeAddress as alloy_sol_types::SolError>::abi_encoded_size(
13149                        inner,
13150                    )
13151                }
13152                Self::InvalidTicketSignature(inner) => {
13153                    <InvalidTicketSignature as alloy_sol_types::SolError>::abi_encoded_size(
13154                        inner,
13155                    )
13156                }
13157                Self::InvalidTokenRecipient(inner) => {
13158                    <InvalidTokenRecipient as alloy_sol_types::SolError>::abi_encoded_size(
13159                        inner,
13160                    )
13161                }
13162                Self::InvalidTokensReceivedUsage(inner) => {
13163                    <InvalidTokensReceivedUsage as alloy_sol_types::SolError>::abi_encoded_size(
13164                        inner,
13165                    )
13166                }
13167                Self::InvalidVRFProof(inner) => {
13168                    <InvalidVRFProof as alloy_sol_types::SolError>::abi_encoded_size(
13169                        inner,
13170                    )
13171                }
13172                Self::MultiSigUninitialized(inner) => {
13173                    <MultiSigUninitialized as alloy_sol_types::SolError>::abi_encoded_size(
13174                        inner,
13175                    )
13176                }
13177                Self::NoticePeriodNotDue(inner) => {
13178                    <NoticePeriodNotDue as alloy_sol_types::SolError>::abi_encoded_size(
13179                        inner,
13180                    )
13181                }
13182                Self::SourceEqualsDestination(inner) => {
13183                    <SourceEqualsDestination as alloy_sol_types::SolError>::abi_encoded_size(
13184                        inner,
13185                    )
13186                }
13187                Self::TicketIsNotAWin(inner) => {
13188                    <TicketIsNotAWin as alloy_sol_types::SolError>::abi_encoded_size(
13189                        inner,
13190                    )
13191                }
13192                Self::TokenTransferFailed(inner) => {
13193                    <TokenTransferFailed as alloy_sol_types::SolError>::abi_encoded_size(
13194                        inner,
13195                    )
13196                }
13197                Self::WrongChannelState(inner) => {
13198                    <WrongChannelState as alloy_sol_types::SolError>::abi_encoded_size(
13199                        inner,
13200                    )
13201                }
13202                Self::WrongToken(inner) => {
13203                    <WrongToken as alloy_sol_types::SolError>::abi_encoded_size(inner)
13204                }
13205                Self::ZeroAddress(inner) => {
13206                    <ZeroAddress as alloy_sol_types::SolError>::abi_encoded_size(inner)
13207                }
13208            }
13209        }
13210        #[inline]
13211        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
13212            match self {
13213                Self::AlreadyInitialized(inner) => {
13214                    <AlreadyInitialized as alloy_sol_types::SolError>::abi_encode_raw(
13215                        inner,
13216                        out,
13217                    )
13218                }
13219                Self::BalanceExceedsGlobalPerChannelAllowance(inner) => {
13220                    <BalanceExceedsGlobalPerChannelAllowance as alloy_sol_types::SolError>::abi_encode_raw(
13221                        inner,
13222                        out,
13223                    )
13224                }
13225                Self::ContractNotResponsible(inner) => {
13226                    <ContractNotResponsible as alloy_sol_types::SolError>::abi_encode_raw(
13227                        inner,
13228                        out,
13229                    )
13230                }
13231                Self::InsufficientChannelBalance(inner) => {
13232                    <InsufficientChannelBalance as alloy_sol_types::SolError>::abi_encode_raw(
13233                        inner,
13234                        out,
13235                    )
13236                }
13237                Self::InvalidAggregatedTicketInterval(inner) => {
13238                    <InvalidAggregatedTicketInterval as alloy_sol_types::SolError>::abi_encode_raw(
13239                        inner,
13240                        out,
13241                    )
13242                }
13243                Self::InvalidBalance(inner) => {
13244                    <InvalidBalance as alloy_sol_types::SolError>::abi_encode_raw(
13245                        inner,
13246                        out,
13247                    )
13248                }
13249                Self::InvalidCurvePoint(inner) => {
13250                    <InvalidCurvePoint as alloy_sol_types::SolError>::abi_encode_raw(
13251                        inner,
13252                        out,
13253                    )
13254                }
13255                Self::InvalidFieldElement(inner) => {
13256                    <InvalidFieldElement as alloy_sol_types::SolError>::abi_encode_raw(
13257                        inner,
13258                        out,
13259                    )
13260                }
13261                Self::InvalidNoticePeriod(inner) => {
13262                    <InvalidNoticePeriod as alloy_sol_types::SolError>::abi_encode_raw(
13263                        inner,
13264                        out,
13265                    )
13266                }
13267                Self::InvalidPointWitness(inner) => {
13268                    <InvalidPointWitness as alloy_sol_types::SolError>::abi_encode_raw(
13269                        inner,
13270                        out,
13271                    )
13272                }
13273                Self::InvalidSafeAddress(inner) => {
13274                    <InvalidSafeAddress as alloy_sol_types::SolError>::abi_encode_raw(
13275                        inner,
13276                        out,
13277                    )
13278                }
13279                Self::InvalidTicketSignature(inner) => {
13280                    <InvalidTicketSignature as alloy_sol_types::SolError>::abi_encode_raw(
13281                        inner,
13282                        out,
13283                    )
13284                }
13285                Self::InvalidTokenRecipient(inner) => {
13286                    <InvalidTokenRecipient as alloy_sol_types::SolError>::abi_encode_raw(
13287                        inner,
13288                        out,
13289                    )
13290                }
13291                Self::InvalidTokensReceivedUsage(inner) => {
13292                    <InvalidTokensReceivedUsage as alloy_sol_types::SolError>::abi_encode_raw(
13293                        inner,
13294                        out,
13295                    )
13296                }
13297                Self::InvalidVRFProof(inner) => {
13298                    <InvalidVRFProof as alloy_sol_types::SolError>::abi_encode_raw(
13299                        inner,
13300                        out,
13301                    )
13302                }
13303                Self::MultiSigUninitialized(inner) => {
13304                    <MultiSigUninitialized as alloy_sol_types::SolError>::abi_encode_raw(
13305                        inner,
13306                        out,
13307                    )
13308                }
13309                Self::NoticePeriodNotDue(inner) => {
13310                    <NoticePeriodNotDue as alloy_sol_types::SolError>::abi_encode_raw(
13311                        inner,
13312                        out,
13313                    )
13314                }
13315                Self::SourceEqualsDestination(inner) => {
13316                    <SourceEqualsDestination as alloy_sol_types::SolError>::abi_encode_raw(
13317                        inner,
13318                        out,
13319                    )
13320                }
13321                Self::TicketIsNotAWin(inner) => {
13322                    <TicketIsNotAWin as alloy_sol_types::SolError>::abi_encode_raw(
13323                        inner,
13324                        out,
13325                    )
13326                }
13327                Self::TokenTransferFailed(inner) => {
13328                    <TokenTransferFailed as alloy_sol_types::SolError>::abi_encode_raw(
13329                        inner,
13330                        out,
13331                    )
13332                }
13333                Self::WrongChannelState(inner) => {
13334                    <WrongChannelState as alloy_sol_types::SolError>::abi_encode_raw(
13335                        inner,
13336                        out,
13337                    )
13338                }
13339                Self::WrongToken(inner) => {
13340                    <WrongToken as alloy_sol_types::SolError>::abi_encode_raw(inner, out)
13341                }
13342                Self::ZeroAddress(inner) => {
13343                    <ZeroAddress as alloy_sol_types::SolError>::abi_encode_raw(
13344                        inner,
13345                        out,
13346                    )
13347                }
13348            }
13349        }
13350    }
13351    ///Container for all the [`HoprChannels`](self) events.
13352    #[derive(serde::Serialize, serde::Deserialize)]
13353    #[derive(Debug, PartialEq, Eq, Hash)]
13354    pub enum HoprChannelsEvents {
13355        #[allow(missing_docs)]
13356        ChannelBalanceDecreased(ChannelBalanceDecreased),
13357        #[allow(missing_docs)]
13358        ChannelBalanceIncreased(ChannelBalanceIncreased),
13359        #[allow(missing_docs)]
13360        ChannelClosed(ChannelClosed),
13361        #[allow(missing_docs)]
13362        ChannelOpened(ChannelOpened),
13363        #[allow(missing_docs)]
13364        DomainSeparatorUpdated(DomainSeparatorUpdated),
13365        #[allow(missing_docs)]
13366        LedgerDomainSeparatorUpdated(LedgerDomainSeparatorUpdated),
13367        #[allow(missing_docs)]
13368        OutgoingChannelClosureInitiated(OutgoingChannelClosureInitiated),
13369        #[allow(missing_docs)]
13370        TicketRedeemed(TicketRedeemed),
13371    }
13372    #[automatically_derived]
13373    impl HoprChannelsEvents {
13374        /// All the selectors of this enum.
13375        ///
13376        /// Note that the selectors might not be in the same order as the variants.
13377        /// No guarantees are made about the order of the selectors.
13378        ///
13379        /// Prefer using `SolInterface` methods instead.
13380        pub const SELECTORS: &'static [[u8; 32usize]] = &[
13381            [
13382                7u8, 181u8, 201u8, 80u8, 89u8, 127u8, 195u8, 190u8, 217u8, 46u8, 42u8,
13383                211u8, 127u8, 168u8, 79u8, 112u8, 22u8, 85u8, 172u8, 179u8, 114u8, 152u8,
13384                46u8, 72u8, 111u8, 95u8, 173u8, 54u8, 7u8, 240u8, 74u8, 92u8,
13385            ],
13386            [
13387                34u8, 226u8, 164u8, 34u8, 168u8, 134u8, 6u8, 86u8, 163u8, 163u8, 60u8,
13388                250u8, 29u8, 175u8, 119u8, 30u8, 118u8, 121u8, 140u8, 229u8, 100u8,
13389                151u8, 71u8, 149u8, 114u8, 53u8, 2u8, 93u8, 225u8, 46u8, 11u8, 36u8,
13390            ],
13391            [
13392                95u8, 161u8, 114u8, 70u8, 211u8, 165u8, 214u8, 141u8, 66u8, 186u8, 169u8,
13393                76u8, 222u8, 51u8, 4u8, 33u8, 128u8, 183u8, 131u8, 163u8, 153u8, 192u8,
13394                43u8, 246u8, 58u8, 194u8, 7u8, 110u8, 15u8, 112u8, 135u8, 56u8,
13395            ],
13396            [
13397                113u8, 101u8, 226u8, 235u8, 199u8, 206u8, 53u8, 204u8, 152u8, 203u8,
13398                118u8, 102u8, 249u8, 148u8, 91u8, 54u8, 23u8, 243u8, 243u8, 99u8, 38u8,
13399                183u8, 109u8, 24u8, 147u8, 123u8, 165u8, 254u8, 207u8, 24u8, 115u8, 154u8,
13400            ],
13401            [
13402                119u8, 31u8, 82u8, 64u8, 174u8, 95u8, 216u8, 167u8, 100u8, 13u8, 63u8,
13403                184u8, 47u8, 167u8, 10u8, 171u8, 47u8, 177u8, 219u8, 243u8, 95u8, 46u8,
13404                244u8, 100u8, 248u8, 80u8, 153u8, 70u8, 113u8, 118u8, 100u8, 197u8,
13405            ],
13406            [
13407                164u8, 63u8, 173u8, 131u8, 146u8, 15u8, 208u8, 148u8, 69u8, 133u8, 94u8,
13408                133u8, 78u8, 115u8, 201u8, 197u8, 50u8, 225u8, 116u8, 2u8, 201u8, 206u8,
13409                176u8, 153u8, 147u8, 162u8, 57u8, 40u8, 67u8, 165u8, 189u8, 185u8,
13410            ],
13411            [
13412                206u8, 234u8, 178u8, 238u8, 249u8, 152u8, 193u8, 127u8, 233u8, 111u8,
13413                48u8, 248u8, 63u8, 191u8, 60u8, 85u8, 252u8, 80u8, 71u8, 246u8, 228u8,
13414                12u8, 85u8, 160u8, 207u8, 114u8, 210u8, 54u8, 233u8, 210u8, 186u8, 114u8,
13415            ],
13416            [
13417                221u8, 144u8, 249u8, 56u8, 35u8, 3u8, 53u8, 229u8, 157u8, 201u8, 37u8,
13418                197u8, 126u8, 203u8, 14u8, 39u8, 162u8, 140u8, 45u8, 135u8, 53u8, 110u8,
13419                49u8, 240u8, 12u8, 213u8, 85u8, 74u8, 189u8, 108u8, 27u8, 45u8,
13420            ],
13421        ];
13422    }
13423    #[automatically_derived]
13424    impl alloy_sol_types::SolEventInterface for HoprChannelsEvents {
13425        const NAME: &'static str = "HoprChannelsEvents";
13426        const COUNT: usize = 8usize;
13427        fn decode_raw_log(
13428            topics: &[alloy_sol_types::Word],
13429            data: &[u8],
13430        ) -> alloy_sol_types::Result<Self> {
13431            match topics.first().copied() {
13432                Some(
13433                    <ChannelBalanceDecreased as alloy_sol_types::SolEvent>::SIGNATURE_HASH,
13434                ) => {
13435                    <ChannelBalanceDecreased as alloy_sol_types::SolEvent>::decode_raw_log(
13436                            topics,
13437                            data,
13438                        )
13439                        .map(Self::ChannelBalanceDecreased)
13440                }
13441                Some(
13442                    <ChannelBalanceIncreased as alloy_sol_types::SolEvent>::SIGNATURE_HASH,
13443                ) => {
13444                    <ChannelBalanceIncreased as alloy_sol_types::SolEvent>::decode_raw_log(
13445                            topics,
13446                            data,
13447                        )
13448                        .map(Self::ChannelBalanceIncreased)
13449                }
13450                Some(<ChannelClosed as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
13451                    <ChannelClosed as alloy_sol_types::SolEvent>::decode_raw_log(
13452                            topics,
13453                            data,
13454                        )
13455                        .map(Self::ChannelClosed)
13456                }
13457                Some(<ChannelOpened as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
13458                    <ChannelOpened as alloy_sol_types::SolEvent>::decode_raw_log(
13459                            topics,
13460                            data,
13461                        )
13462                        .map(Self::ChannelOpened)
13463                }
13464                Some(
13465                    <DomainSeparatorUpdated as alloy_sol_types::SolEvent>::SIGNATURE_HASH,
13466                ) => {
13467                    <DomainSeparatorUpdated as alloy_sol_types::SolEvent>::decode_raw_log(
13468                            topics,
13469                            data,
13470                        )
13471                        .map(Self::DomainSeparatorUpdated)
13472                }
13473                Some(
13474                    <LedgerDomainSeparatorUpdated as alloy_sol_types::SolEvent>::SIGNATURE_HASH,
13475                ) => {
13476                    <LedgerDomainSeparatorUpdated as alloy_sol_types::SolEvent>::decode_raw_log(
13477                            topics,
13478                            data,
13479                        )
13480                        .map(Self::LedgerDomainSeparatorUpdated)
13481                }
13482                Some(
13483                    <OutgoingChannelClosureInitiated as alloy_sol_types::SolEvent>::SIGNATURE_HASH,
13484                ) => {
13485                    <OutgoingChannelClosureInitiated as alloy_sol_types::SolEvent>::decode_raw_log(
13486                            topics,
13487                            data,
13488                        )
13489                        .map(Self::OutgoingChannelClosureInitiated)
13490                }
13491                Some(<TicketRedeemed as alloy_sol_types::SolEvent>::SIGNATURE_HASH) => {
13492                    <TicketRedeemed as alloy_sol_types::SolEvent>::decode_raw_log(
13493                            topics,
13494                            data,
13495                        )
13496                        .map(Self::TicketRedeemed)
13497                }
13498                _ => {
13499                    alloy_sol_types::private::Err(alloy_sol_types::Error::InvalidLog {
13500                        name: <Self as alloy_sol_types::SolEventInterface>::NAME,
13501                        log: alloy_sol_types::private::Box::new(
13502                            alloy_sol_types::private::LogData::new_unchecked(
13503                                topics.to_vec(),
13504                                data.to_vec().into(),
13505                            ),
13506                        ),
13507                    })
13508                }
13509            }
13510        }
13511    }
13512    #[automatically_derived]
13513    impl alloy_sol_types::private::IntoLogData for HoprChannelsEvents {
13514        fn to_log_data(&self) -> alloy_sol_types::private::LogData {
13515            match self {
13516                Self::ChannelBalanceDecreased(inner) => {
13517                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
13518                }
13519                Self::ChannelBalanceIncreased(inner) => {
13520                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
13521                }
13522                Self::ChannelClosed(inner) => {
13523                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
13524                }
13525                Self::ChannelOpened(inner) => {
13526                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
13527                }
13528                Self::DomainSeparatorUpdated(inner) => {
13529                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
13530                }
13531                Self::LedgerDomainSeparatorUpdated(inner) => {
13532                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
13533                }
13534                Self::OutgoingChannelClosureInitiated(inner) => {
13535                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
13536                }
13537                Self::TicketRedeemed(inner) => {
13538                    alloy_sol_types::private::IntoLogData::to_log_data(inner)
13539                }
13540            }
13541        }
13542        fn into_log_data(self) -> alloy_sol_types::private::LogData {
13543            match self {
13544                Self::ChannelBalanceDecreased(inner) => {
13545                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
13546                }
13547                Self::ChannelBalanceIncreased(inner) => {
13548                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
13549                }
13550                Self::ChannelClosed(inner) => {
13551                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
13552                }
13553                Self::ChannelOpened(inner) => {
13554                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
13555                }
13556                Self::DomainSeparatorUpdated(inner) => {
13557                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
13558                }
13559                Self::LedgerDomainSeparatorUpdated(inner) => {
13560                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
13561                }
13562                Self::OutgoingChannelClosureInitiated(inner) => {
13563                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
13564                }
13565                Self::TicketRedeemed(inner) => {
13566                    alloy_sol_types::private::IntoLogData::into_log_data(inner)
13567                }
13568            }
13569        }
13570    }
13571    use alloy::contract as alloy_contract;
13572    /**Creates a new wrapper around an on-chain [`HoprChannels`](self) contract instance.
13573
13574See the [wrapper's documentation](`HoprChannelsInstance`) for more details.*/
13575    #[inline]
13576    pub const fn new<
13577        P: alloy_contract::private::Provider<N>,
13578        N: alloy_contract::private::Network,
13579    >(
13580        address: alloy_sol_types::private::Address,
13581        provider: P,
13582    ) -> HoprChannelsInstance<P, N> {
13583        HoprChannelsInstance::<P, N>::new(address, provider)
13584    }
13585    /**Deploys this contract using the given `provider` and constructor arguments, if any.
13586
13587Returns a new instance of the contract, if the deployment was successful.
13588
13589For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
13590    #[inline]
13591    pub fn deploy<
13592        P: alloy_contract::private::Provider<N>,
13593        N: alloy_contract::private::Network,
13594    >(
13595        provider: P,
13596        _token: alloy::sol_types::private::Address,
13597        _noticePeriodChannelClosure: <Timestamp as alloy::sol_types::SolType>::RustType,
13598        _safeRegistry: alloy::sol_types::private::Address,
13599    ) -> impl ::core::future::Future<
13600        Output = alloy_contract::Result<HoprChannelsInstance<P, N>>,
13601    > {
13602        HoprChannelsInstance::<
13603            P,
13604            N,
13605        >::deploy(provider, _token, _noticePeriodChannelClosure, _safeRegistry)
13606    }
13607    /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
13608and constructor arguments, if any.
13609
13610This is a simple wrapper around creating a `RawCallBuilder` with the data set to
13611the bytecode concatenated with the constructor's ABI-encoded arguments.*/
13612    #[inline]
13613    pub fn deploy_builder<
13614        P: alloy_contract::private::Provider<N>,
13615        N: alloy_contract::private::Network,
13616    >(
13617        provider: P,
13618        _token: alloy::sol_types::private::Address,
13619        _noticePeriodChannelClosure: <Timestamp as alloy::sol_types::SolType>::RustType,
13620        _safeRegistry: alloy::sol_types::private::Address,
13621    ) -> alloy_contract::RawCallBuilder<P, N> {
13622        HoprChannelsInstance::<
13623            P,
13624            N,
13625        >::deploy_builder(provider, _token, _noticePeriodChannelClosure, _safeRegistry)
13626    }
13627    /**A [`HoprChannels`](self) instance.
13628
13629Contains type-safe methods for interacting with an on-chain instance of the
13630[`HoprChannels`](self) contract located at a given `address`, using a given
13631provider `P`.
13632
13633If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
13634documentation on how to provide it), the `deploy` and `deploy_builder` methods can
13635be used to deploy a new instance of the contract.
13636
13637See the [module-level documentation](self) for all the available methods.*/
13638    #[derive(Clone)]
13639    pub struct HoprChannelsInstance<P, N = alloy_contract::private::Ethereum> {
13640        address: alloy_sol_types::private::Address,
13641        provider: P,
13642        _network: ::core::marker::PhantomData<N>,
13643    }
13644    #[automatically_derived]
13645    impl<P, N> ::core::fmt::Debug for HoprChannelsInstance<P, N> {
13646        #[inline]
13647        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
13648            f.debug_tuple("HoprChannelsInstance").field(&self.address).finish()
13649        }
13650    }
13651    /// Instantiation and getters/setters.
13652    #[automatically_derived]
13653    impl<
13654        P: alloy_contract::private::Provider<N>,
13655        N: alloy_contract::private::Network,
13656    > HoprChannelsInstance<P, N> {
13657        /**Creates a new wrapper around an on-chain [`HoprChannels`](self) contract instance.
13658
13659See the [wrapper's documentation](`HoprChannelsInstance`) for more details.*/
13660        #[inline]
13661        pub const fn new(
13662            address: alloy_sol_types::private::Address,
13663            provider: P,
13664        ) -> Self {
13665            Self {
13666                address,
13667                provider,
13668                _network: ::core::marker::PhantomData,
13669            }
13670        }
13671        /**Deploys this contract using the given `provider` and constructor arguments, if any.
13672
13673Returns a new instance of the contract, if the deployment was successful.
13674
13675For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
13676        #[inline]
13677        pub async fn deploy(
13678            provider: P,
13679            _token: alloy::sol_types::private::Address,
13680            _noticePeriodChannelClosure: <Timestamp as alloy::sol_types::SolType>::RustType,
13681            _safeRegistry: alloy::sol_types::private::Address,
13682        ) -> alloy_contract::Result<HoprChannelsInstance<P, N>> {
13683            let call_builder = Self::deploy_builder(
13684                provider,
13685                _token,
13686                _noticePeriodChannelClosure,
13687                _safeRegistry,
13688            );
13689            let contract_address = call_builder.deploy().await?;
13690            Ok(Self::new(contract_address, call_builder.provider))
13691        }
13692        /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
13693and constructor arguments, if any.
13694
13695This is a simple wrapper around creating a `RawCallBuilder` with the data set to
13696the bytecode concatenated with the constructor's ABI-encoded arguments.*/
13697        #[inline]
13698        pub fn deploy_builder(
13699            provider: P,
13700            _token: alloy::sol_types::private::Address,
13701            _noticePeriodChannelClosure: <Timestamp as alloy::sol_types::SolType>::RustType,
13702            _safeRegistry: alloy::sol_types::private::Address,
13703        ) -> alloy_contract::RawCallBuilder<P, N> {
13704            alloy_contract::RawCallBuilder::new_raw_deploy(
13705                provider,
13706                [
13707                    &BYTECODE[..],
13708                    &alloy_sol_types::SolConstructor::abi_encode(
13709                        &constructorCall {
13710                            _token,
13711                            _noticePeriodChannelClosure,
13712                            _safeRegistry,
13713                        },
13714                    )[..],
13715                ]
13716                    .concat()
13717                    .into(),
13718            )
13719        }
13720        /// Returns a reference to the address.
13721        #[inline]
13722        pub const fn address(&self) -> &alloy_sol_types::private::Address {
13723            &self.address
13724        }
13725        /// Sets the address.
13726        #[inline]
13727        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
13728            self.address = address;
13729        }
13730        /// Sets the address and returns `self`.
13731        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
13732            self.set_address(address);
13733            self
13734        }
13735        /// Returns a reference to the provider.
13736        #[inline]
13737        pub const fn provider(&self) -> &P {
13738            &self.provider
13739        }
13740    }
13741    impl<P: ::core::clone::Clone, N> HoprChannelsInstance<&P, N> {
13742        /// Clones the provider and returns a new instance with the cloned provider.
13743        #[inline]
13744        pub fn with_cloned_provider(self) -> HoprChannelsInstance<P, N> {
13745            HoprChannelsInstance {
13746                address: self.address,
13747                provider: ::core::clone::Clone::clone(&self.provider),
13748                _network: ::core::marker::PhantomData,
13749            }
13750        }
13751    }
13752    /// Function calls.
13753    #[automatically_derived]
13754    impl<
13755        P: alloy_contract::private::Provider<N>,
13756        N: alloy_contract::private::Network,
13757    > HoprChannelsInstance<P, N> {
13758        /// Creates a new call builder using this contract instance's provider and address.
13759        ///
13760        /// Note that the call can be any function call, not just those defined in this
13761        /// contract. Prefer using the other methods for building type-safe contract calls.
13762        pub fn call_builder<C: alloy_sol_types::SolCall>(
13763            &self,
13764            call: &C,
13765        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
13766            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
13767        }
13768        ///Creates a new call builder for the [`ERC777_HOOK_FUND_CHANNEL_MULTI_SIZE`] function.
13769        pub fn ERC777_HOOK_FUND_CHANNEL_MULTI_SIZE(
13770            &self,
13771        ) -> alloy_contract::SolCallBuilder<
13772            &P,
13773            ERC777_HOOK_FUND_CHANNEL_MULTI_SIZECall,
13774            N,
13775        > {
13776            self.call_builder(&ERC777_HOOK_FUND_CHANNEL_MULTI_SIZECall)
13777        }
13778        ///Creates a new call builder for the [`ERC777_HOOK_FUND_CHANNEL_SIZE`] function.
13779        pub fn ERC777_HOOK_FUND_CHANNEL_SIZE(
13780            &self,
13781        ) -> alloy_contract::SolCallBuilder<&P, ERC777_HOOK_FUND_CHANNEL_SIZECall, N> {
13782            self.call_builder(&ERC777_HOOK_FUND_CHANNEL_SIZECall)
13783        }
13784        ///Creates a new call builder for the [`LEDGER_VERSION`] function.
13785        pub fn LEDGER_VERSION(
13786            &self,
13787        ) -> alloy_contract::SolCallBuilder<&P, LEDGER_VERSIONCall, N> {
13788            self.call_builder(&LEDGER_VERSIONCall)
13789        }
13790        ///Creates a new call builder for the [`MAX_USED_BALANCE`] function.
13791        pub fn MAX_USED_BALANCE(
13792            &self,
13793        ) -> alloy_contract::SolCallBuilder<&P, MAX_USED_BALANCECall, N> {
13794            self.call_builder(&MAX_USED_BALANCECall)
13795        }
13796        ///Creates a new call builder for the [`MIN_USED_BALANCE`] function.
13797        pub fn MIN_USED_BALANCE(
13798            &self,
13799        ) -> alloy_contract::SolCallBuilder<&P, MIN_USED_BALANCECall, N> {
13800            self.call_builder(&MIN_USED_BALANCECall)
13801        }
13802        ///Creates a new call builder for the [`TOKENS_RECIPIENT_INTERFACE_HASH`] function.
13803        pub fn TOKENS_RECIPIENT_INTERFACE_HASH(
13804            &self,
13805        ) -> alloy_contract::SolCallBuilder<&P, TOKENS_RECIPIENT_INTERFACE_HASHCall, N> {
13806            self.call_builder(&TOKENS_RECIPIENT_INTERFACE_HASHCall)
13807        }
13808        ///Creates a new call builder for the [`VERSION`] function.
13809        pub fn VERSION(&self) -> alloy_contract::SolCallBuilder<&P, VERSIONCall, N> {
13810            self.call_builder(&VERSIONCall)
13811        }
13812        ///Creates a new call builder for the [`_currentBlockTimestamp`] function.
13813        pub fn _currentBlockTimestamp(
13814            &self,
13815        ) -> alloy_contract::SolCallBuilder<&P, _currentBlockTimestampCall, N> {
13816            self.call_builder(&_currentBlockTimestampCall)
13817        }
13818        ///Creates a new call builder for the [`_getChannelId`] function.
13819        pub fn _getChannelId(
13820            &self,
13821            source: alloy::sol_types::private::Address,
13822            destination: alloy::sol_types::private::Address,
13823        ) -> alloy_contract::SolCallBuilder<&P, _getChannelIdCall, N> {
13824            self.call_builder(
13825                &_getChannelIdCall {
13826                    source,
13827                    destination,
13828                },
13829            )
13830        }
13831        ///Creates a new call builder for the [`_getTicketHash`] function.
13832        pub fn _getTicketHash(
13833            &self,
13834            redeemable: <RedeemableTicket as alloy::sol_types::SolType>::RustType,
13835        ) -> alloy_contract::SolCallBuilder<&P, _getTicketHashCall, N> {
13836            self.call_builder(&_getTicketHashCall { redeemable })
13837        }
13838        ///Creates a new call builder for the [`_isWinningTicket`] function.
13839        pub fn _isWinningTicket(
13840            &self,
13841            ticketHash: alloy::sol_types::private::FixedBytes<32>,
13842            redeemable: <RedeemableTicket as alloy::sol_types::SolType>::RustType,
13843            params: <HoprCrypto::VRFParameters as alloy::sol_types::SolType>::RustType,
13844        ) -> alloy_contract::SolCallBuilder<&P, _isWinningTicketCall, N> {
13845            self.call_builder(
13846                &_isWinningTicketCall {
13847                    ticketHash,
13848                    redeemable,
13849                    params,
13850                },
13851            )
13852        }
13853        ///Creates a new call builder for the [`canImplementInterfaceForAddress`] function.
13854        pub fn canImplementInterfaceForAddress(
13855            &self,
13856            interfaceHash: alloy::sol_types::private::FixedBytes<32>,
13857            account: alloy::sol_types::private::Address,
13858        ) -> alloy_contract::SolCallBuilder<&P, canImplementInterfaceForAddressCall, N> {
13859            self.call_builder(
13860                &canImplementInterfaceForAddressCall {
13861                    interfaceHash,
13862                    account,
13863                },
13864            )
13865        }
13866        ///Creates a new call builder for the [`channels`] function.
13867        pub fn channels(
13868            &self,
13869            _0: alloy::sol_types::private::FixedBytes<32>,
13870        ) -> alloy_contract::SolCallBuilder<&P, channelsCall, N> {
13871            self.call_builder(&channelsCall(_0))
13872        }
13873        ///Creates a new call builder for the [`closeIncomingChannel`] function.
13874        pub fn closeIncomingChannel(
13875            &self,
13876            source: alloy::sol_types::private::Address,
13877        ) -> alloy_contract::SolCallBuilder<&P, closeIncomingChannelCall, N> {
13878            self.call_builder(&closeIncomingChannelCall { source })
13879        }
13880        ///Creates a new call builder for the [`closeIncomingChannelSafe`] function.
13881        pub fn closeIncomingChannelSafe(
13882            &self,
13883            selfAddress: alloy::sol_types::private::Address,
13884            source: alloy::sol_types::private::Address,
13885        ) -> alloy_contract::SolCallBuilder<&P, closeIncomingChannelSafeCall, N> {
13886            self.call_builder(
13887                &closeIncomingChannelSafeCall {
13888                    selfAddress,
13889                    source,
13890                },
13891            )
13892        }
13893        ///Creates a new call builder for the [`domainSeparator`] function.
13894        pub fn domainSeparator(
13895            &self,
13896        ) -> alloy_contract::SolCallBuilder<&P, domainSeparatorCall, N> {
13897            self.call_builder(&domainSeparatorCall)
13898        }
13899        ///Creates a new call builder for the [`finalizeOutgoingChannelClosure`] function.
13900        pub fn finalizeOutgoingChannelClosure(
13901            &self,
13902            destination: alloy::sol_types::private::Address,
13903        ) -> alloy_contract::SolCallBuilder<&P, finalizeOutgoingChannelClosureCall, N> {
13904            self.call_builder(
13905                &finalizeOutgoingChannelClosureCall {
13906                    destination,
13907                },
13908            )
13909        }
13910        ///Creates a new call builder for the [`finalizeOutgoingChannelClosureSafe`] function.
13911        pub fn finalizeOutgoingChannelClosureSafe(
13912            &self,
13913            selfAddress: alloy::sol_types::private::Address,
13914            destination: alloy::sol_types::private::Address,
13915        ) -> alloy_contract::SolCallBuilder<
13916            &P,
13917            finalizeOutgoingChannelClosureSafeCall,
13918            N,
13919        > {
13920            self.call_builder(
13921                &finalizeOutgoingChannelClosureSafeCall {
13922                    selfAddress,
13923                    destination,
13924                },
13925            )
13926        }
13927        ///Creates a new call builder for the [`fundChannel`] function.
13928        pub fn fundChannel(
13929            &self,
13930            account: alloy::sol_types::private::Address,
13931            amount: <Balance as alloy::sol_types::SolType>::RustType,
13932        ) -> alloy_contract::SolCallBuilder<&P, fundChannelCall, N> {
13933            self.call_builder(&fundChannelCall { account, amount })
13934        }
13935        ///Creates a new call builder for the [`fundChannelSafe`] function.
13936        pub fn fundChannelSafe(
13937            &self,
13938            selfAddress: alloy::sol_types::private::Address,
13939            account: alloy::sol_types::private::Address,
13940            amount: <Balance as alloy::sol_types::SolType>::RustType,
13941        ) -> alloy_contract::SolCallBuilder<&P, fundChannelSafeCall, N> {
13942            self.call_builder(
13943                &fundChannelSafeCall {
13944                    selfAddress,
13945                    account,
13946                    amount,
13947                },
13948            )
13949        }
13950        ///Creates a new call builder for the [`initiateOutgoingChannelClosure`] function.
13951        pub fn initiateOutgoingChannelClosure(
13952            &self,
13953            destination: alloy::sol_types::private::Address,
13954        ) -> alloy_contract::SolCallBuilder<&P, initiateOutgoingChannelClosureCall, N> {
13955            self.call_builder(
13956                &initiateOutgoingChannelClosureCall {
13957                    destination,
13958                },
13959            )
13960        }
13961        ///Creates a new call builder for the [`initiateOutgoingChannelClosureSafe`] function.
13962        pub fn initiateOutgoingChannelClosureSafe(
13963            &self,
13964            selfAddress: alloy::sol_types::private::Address,
13965            destination: alloy::sol_types::private::Address,
13966        ) -> alloy_contract::SolCallBuilder<
13967            &P,
13968            initiateOutgoingChannelClosureSafeCall,
13969            N,
13970        > {
13971            self.call_builder(
13972                &initiateOutgoingChannelClosureSafeCall {
13973                    selfAddress,
13974                    destination,
13975                },
13976            )
13977        }
13978        ///Creates a new call builder for the [`ledgerDomainSeparator`] function.
13979        pub fn ledgerDomainSeparator(
13980            &self,
13981        ) -> alloy_contract::SolCallBuilder<&P, ledgerDomainSeparatorCall, N> {
13982            self.call_builder(&ledgerDomainSeparatorCall)
13983        }
13984        ///Creates a new call builder for the [`multicall`] function.
13985        pub fn multicall(
13986            &self,
13987            data: alloy::sol_types::private::Vec<alloy::sol_types::private::Bytes>,
13988        ) -> alloy_contract::SolCallBuilder<&P, multicallCall, N> {
13989            self.call_builder(&multicallCall { data })
13990        }
13991        ///Creates a new call builder for the [`noticePeriodChannelClosure`] function.
13992        pub fn noticePeriodChannelClosure(
13993            &self,
13994        ) -> alloy_contract::SolCallBuilder<&P, noticePeriodChannelClosureCall, N> {
13995            self.call_builder(&noticePeriodChannelClosureCall)
13996        }
13997        ///Creates a new call builder for the [`redeemTicket`] function.
13998        pub fn redeemTicket(
13999            &self,
14000            redeemable: <RedeemableTicket as alloy::sol_types::SolType>::RustType,
14001            params: <HoprCrypto::VRFParameters as alloy::sol_types::SolType>::RustType,
14002        ) -> alloy_contract::SolCallBuilder<&P, redeemTicketCall, N> {
14003            self.call_builder(
14004                &redeemTicketCall {
14005                    redeemable,
14006                    params,
14007                },
14008            )
14009        }
14010        ///Creates a new call builder for the [`redeemTicketSafe`] function.
14011        pub fn redeemTicketSafe(
14012            &self,
14013            selfAddress: alloy::sol_types::private::Address,
14014            redeemable: <RedeemableTicket as alloy::sol_types::SolType>::RustType,
14015            params: <HoprCrypto::VRFParameters as alloy::sol_types::SolType>::RustType,
14016        ) -> alloy_contract::SolCallBuilder<&P, redeemTicketSafeCall, N> {
14017            self.call_builder(
14018                &redeemTicketSafeCall {
14019                    selfAddress,
14020                    redeemable,
14021                    params,
14022                },
14023            )
14024        }
14025        ///Creates a new call builder for the [`token`] function.
14026        pub fn token(&self) -> alloy_contract::SolCallBuilder<&P, tokenCall, N> {
14027            self.call_builder(&tokenCall)
14028        }
14029        ///Creates a new call builder for the [`tokensReceived`] function.
14030        pub fn tokensReceived(
14031            &self,
14032            _0: alloy::sol_types::private::Address,
14033            from: alloy::sol_types::private::Address,
14034            to: alloy::sol_types::private::Address,
14035            amount: alloy::sol_types::private::primitives::aliases::U256,
14036            userData: alloy::sol_types::private::Bytes,
14037            _5: alloy::sol_types::private::Bytes,
14038        ) -> alloy_contract::SolCallBuilder<&P, tokensReceivedCall, N> {
14039            self.call_builder(
14040                &tokensReceivedCall {
14041                    _0,
14042                    from,
14043                    to,
14044                    amount,
14045                    userData,
14046                    _5,
14047                },
14048            )
14049        }
14050        ///Creates a new call builder for the [`updateDomainSeparator`] function.
14051        pub fn updateDomainSeparator(
14052            &self,
14053        ) -> alloy_contract::SolCallBuilder<&P, updateDomainSeparatorCall, N> {
14054            self.call_builder(&updateDomainSeparatorCall)
14055        }
14056        ///Creates a new call builder for the [`updateLedgerDomainSeparator`] function.
14057        pub fn updateLedgerDomainSeparator(
14058            &self,
14059        ) -> alloy_contract::SolCallBuilder<&P, updateLedgerDomainSeparatorCall, N> {
14060            self.call_builder(&updateLedgerDomainSeparatorCall)
14061        }
14062    }
14063    /// Event filters.
14064    #[automatically_derived]
14065    impl<
14066        P: alloy_contract::private::Provider<N>,
14067        N: alloy_contract::private::Network,
14068    > HoprChannelsInstance<P, N> {
14069        /// Creates a new event filter using this contract instance's provider and address.
14070        ///
14071        /// Note that the type can be any event, not just those defined in this contract.
14072        /// Prefer using the other methods for building type-safe event filters.
14073        pub fn event_filter<E: alloy_sol_types::SolEvent>(
14074            &self,
14075        ) -> alloy_contract::Event<&P, E, N> {
14076            alloy_contract::Event::new_sol(&self.provider, &self.address)
14077        }
14078        ///Creates a new event filter for the [`ChannelBalanceDecreased`] event.
14079        pub fn ChannelBalanceDecreased_filter(
14080            &self,
14081        ) -> alloy_contract::Event<&P, ChannelBalanceDecreased, N> {
14082            self.event_filter::<ChannelBalanceDecreased>()
14083        }
14084        ///Creates a new event filter for the [`ChannelBalanceIncreased`] event.
14085        pub fn ChannelBalanceIncreased_filter(
14086            &self,
14087        ) -> alloy_contract::Event<&P, ChannelBalanceIncreased, N> {
14088            self.event_filter::<ChannelBalanceIncreased>()
14089        }
14090        ///Creates a new event filter for the [`ChannelClosed`] event.
14091        pub fn ChannelClosed_filter(
14092            &self,
14093        ) -> alloy_contract::Event<&P, ChannelClosed, N> {
14094            self.event_filter::<ChannelClosed>()
14095        }
14096        ///Creates a new event filter for the [`ChannelOpened`] event.
14097        pub fn ChannelOpened_filter(
14098            &self,
14099        ) -> alloy_contract::Event<&P, ChannelOpened, N> {
14100            self.event_filter::<ChannelOpened>()
14101        }
14102        ///Creates a new event filter for the [`DomainSeparatorUpdated`] event.
14103        pub fn DomainSeparatorUpdated_filter(
14104            &self,
14105        ) -> alloy_contract::Event<&P, DomainSeparatorUpdated, N> {
14106            self.event_filter::<DomainSeparatorUpdated>()
14107        }
14108        ///Creates a new event filter for the [`LedgerDomainSeparatorUpdated`] event.
14109        pub fn LedgerDomainSeparatorUpdated_filter(
14110            &self,
14111        ) -> alloy_contract::Event<&P, LedgerDomainSeparatorUpdated, N> {
14112            self.event_filter::<LedgerDomainSeparatorUpdated>()
14113        }
14114        ///Creates a new event filter for the [`OutgoingChannelClosureInitiated`] event.
14115        pub fn OutgoingChannelClosureInitiated_filter(
14116            &self,
14117        ) -> alloy_contract::Event<&P, OutgoingChannelClosureInitiated, N> {
14118            self.event_filter::<OutgoingChannelClosureInitiated>()
14119        }
14120        ///Creates a new event filter for the [`TicketRedeemed`] event.
14121        pub fn TicketRedeemed_filter(
14122            &self,
14123        ) -> alloy_contract::Event<&P, TicketRedeemed, N> {
14124            self.event_filter::<TicketRedeemed>()
14125        }
14126    }
14127}