Skip to main content

hotshot_contract_adapter/bindings/
plonk_verifier.rs

1///Module containing a contract's types and functions.
2/**
3
4```solidity
5library BN254 {
6    type BaseField is uint256;
7    type ScalarField is uint256;
8    struct G1Point { BaseField x; BaseField y; }
9}
10```*/
11#[allow(
12    non_camel_case_types,
13    non_snake_case,
14    clippy::pub_underscore_fields,
15    clippy::style,
16    clippy::empty_structs_with_brackets
17)]
18pub mod BN254 {
19    use super::*;
20    use alloy::sol_types as alloy_sol_types;
21    #[derive(serde::Serialize, serde::Deserialize)]
22    #[derive(Default, Debug, PartialEq, Eq, Hash)]
23    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
24    #[derive(Clone)]
25    pub struct BaseField(alloy::sol_types::private::primitives::aliases::U256);
26    const _: () = {
27        use alloy::sol_types as alloy_sol_types;
28        #[automatically_derived]
29        impl alloy_sol_types::private::SolTypeValue<BaseField>
30        for alloy::sol_types::private::primitives::aliases::U256 {
31            #[inline]
32            fn stv_to_tokens(
33                &self,
34            ) -> <alloy::sol_types::sol_data::Uint<
35                256,
36            > as alloy_sol_types::SolType>::Token<'_> {
37                alloy_sol_types::private::SolTypeValue::<
38                    alloy::sol_types::sol_data::Uint<256>,
39                >::stv_to_tokens(self)
40            }
41            #[inline]
42            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
43                <alloy::sol_types::sol_data::Uint<
44                    256,
45                > as alloy_sol_types::SolType>::tokenize(self)
46                    .0
47            }
48            #[inline]
49            fn stv_abi_encode_packed_to(
50                &self,
51                out: &mut alloy_sol_types::private::Vec<u8>,
52            ) {
53                <alloy::sol_types::sol_data::Uint<
54                    256,
55                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
56            }
57            #[inline]
58            fn stv_abi_packed_encoded_size(&self) -> usize {
59                <alloy::sol_types::sol_data::Uint<
60                    256,
61                > as alloy_sol_types::SolType>::abi_encoded_size(self)
62            }
63        }
64        impl BaseField {
65            /// The Solidity type name.
66            pub const NAME: &'static str = stringify!(BaseField);
67            /// Convert from the underlying value type.
68            #[inline]
69            pub const fn from_underlying(
70                value: alloy::sol_types::private::primitives::aliases::U256,
71            ) -> Self {
72                Self(value)
73            }
74            /// Return the underlying value.
75            #[inline]
76            pub const fn into_underlying(
77                self,
78            ) -> alloy::sol_types::private::primitives::aliases::U256 {
79                self.0
80            }
81            /// Return the single encoding of this value, delegating to the
82            /// underlying type.
83            #[inline]
84            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
85                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
86            }
87            /// Return the packed encoding of this value, delegating to the
88            /// underlying type.
89            #[inline]
90            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
91                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
92            }
93        }
94        #[automatically_derived]
95        impl From<alloy::sol_types::private::primitives::aliases::U256> for BaseField {
96            fn from(
97                value: alloy::sol_types::private::primitives::aliases::U256,
98            ) -> Self {
99                Self::from_underlying(value)
100            }
101        }
102        #[automatically_derived]
103        impl From<BaseField> for alloy::sol_types::private::primitives::aliases::U256 {
104            fn from(value: BaseField) -> Self {
105                value.into_underlying()
106            }
107        }
108        #[automatically_derived]
109        impl alloy_sol_types::SolType for BaseField {
110            type RustType = alloy::sol_types::private::primitives::aliases::U256;
111            type Token<'a> = <alloy::sol_types::sol_data::Uint<
112                256,
113            > as alloy_sol_types::SolType>::Token<'a>;
114            const SOL_NAME: &'static str = Self::NAME;
115            const ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
116                256,
117            > as alloy_sol_types::SolType>::ENCODED_SIZE;
118            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
119                256,
120            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
121            #[inline]
122            fn valid_token(token: &Self::Token<'_>) -> bool {
123                Self::type_check(token).is_ok()
124            }
125            #[inline]
126            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
127                <alloy::sol_types::sol_data::Uint<
128                    256,
129                > as alloy_sol_types::SolType>::type_check(token)
130            }
131            #[inline]
132            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
133                <alloy::sol_types::sol_data::Uint<
134                    256,
135                > as alloy_sol_types::SolType>::detokenize(token)
136            }
137        }
138        #[automatically_derived]
139        impl alloy_sol_types::EventTopic for BaseField {
140            #[inline]
141            fn topic_preimage_length(rust: &Self::RustType) -> usize {
142                <alloy::sol_types::sol_data::Uint<
143                    256,
144                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
145            }
146            #[inline]
147            fn encode_topic_preimage(
148                rust: &Self::RustType,
149                out: &mut alloy_sol_types::private::Vec<u8>,
150            ) {
151                <alloy::sol_types::sol_data::Uint<
152                    256,
153                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
154            }
155            #[inline]
156            fn encode_topic(
157                rust: &Self::RustType,
158            ) -> alloy_sol_types::abi::token::WordToken {
159                <alloy::sol_types::sol_data::Uint<
160                    256,
161                > as alloy_sol_types::EventTopic>::encode_topic(rust)
162            }
163        }
164    };
165    #[derive(serde::Serialize, serde::Deserialize)]
166    #[derive(Default, Debug, PartialEq, Eq, Hash)]
167    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
168    #[derive(Clone)]
169    pub struct ScalarField(alloy::sol_types::private::primitives::aliases::U256);
170    const _: () = {
171        use alloy::sol_types as alloy_sol_types;
172        #[automatically_derived]
173        impl alloy_sol_types::private::SolTypeValue<ScalarField>
174        for alloy::sol_types::private::primitives::aliases::U256 {
175            #[inline]
176            fn stv_to_tokens(
177                &self,
178            ) -> <alloy::sol_types::sol_data::Uint<
179                256,
180            > as alloy_sol_types::SolType>::Token<'_> {
181                alloy_sol_types::private::SolTypeValue::<
182                    alloy::sol_types::sol_data::Uint<256>,
183                >::stv_to_tokens(self)
184            }
185            #[inline]
186            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
187                <alloy::sol_types::sol_data::Uint<
188                    256,
189                > as alloy_sol_types::SolType>::tokenize(self)
190                    .0
191            }
192            #[inline]
193            fn stv_abi_encode_packed_to(
194                &self,
195                out: &mut alloy_sol_types::private::Vec<u8>,
196            ) {
197                <alloy::sol_types::sol_data::Uint<
198                    256,
199                > as alloy_sol_types::SolType>::abi_encode_packed_to(self, out)
200            }
201            #[inline]
202            fn stv_abi_packed_encoded_size(&self) -> usize {
203                <alloy::sol_types::sol_data::Uint<
204                    256,
205                > as alloy_sol_types::SolType>::abi_encoded_size(self)
206            }
207        }
208        impl ScalarField {
209            /// The Solidity type name.
210            pub const NAME: &'static str = stringify!(ScalarField);
211            /// Convert from the underlying value type.
212            #[inline]
213            pub const fn from_underlying(
214                value: alloy::sol_types::private::primitives::aliases::U256,
215            ) -> Self {
216                Self(value)
217            }
218            /// Return the underlying value.
219            #[inline]
220            pub const fn into_underlying(
221                self,
222            ) -> alloy::sol_types::private::primitives::aliases::U256 {
223                self.0
224            }
225            /// Return the single encoding of this value, delegating to the
226            /// underlying type.
227            #[inline]
228            pub fn abi_encode(&self) -> alloy_sol_types::private::Vec<u8> {
229                <Self as alloy_sol_types::SolType>::abi_encode(&self.0)
230            }
231            /// Return the packed encoding of this value, delegating to the
232            /// underlying type.
233            #[inline]
234            pub fn abi_encode_packed(&self) -> alloy_sol_types::private::Vec<u8> {
235                <Self as alloy_sol_types::SolType>::abi_encode_packed(&self.0)
236            }
237        }
238        #[automatically_derived]
239        impl From<alloy::sol_types::private::primitives::aliases::U256> for ScalarField {
240            fn from(
241                value: alloy::sol_types::private::primitives::aliases::U256,
242            ) -> Self {
243                Self::from_underlying(value)
244            }
245        }
246        #[automatically_derived]
247        impl From<ScalarField> for alloy::sol_types::private::primitives::aliases::U256 {
248            fn from(value: ScalarField) -> Self {
249                value.into_underlying()
250            }
251        }
252        #[automatically_derived]
253        impl alloy_sol_types::SolType for ScalarField {
254            type RustType = alloy::sol_types::private::primitives::aliases::U256;
255            type Token<'a> = <alloy::sol_types::sol_data::Uint<
256                256,
257            > as alloy_sol_types::SolType>::Token<'a>;
258            const SOL_NAME: &'static str = Self::NAME;
259            const ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
260                256,
261            > as alloy_sol_types::SolType>::ENCODED_SIZE;
262            const PACKED_ENCODED_SIZE: Option<usize> = <alloy::sol_types::sol_data::Uint<
263                256,
264            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
265            #[inline]
266            fn valid_token(token: &Self::Token<'_>) -> bool {
267                Self::type_check(token).is_ok()
268            }
269            #[inline]
270            fn type_check(token: &Self::Token<'_>) -> alloy_sol_types::Result<()> {
271                <alloy::sol_types::sol_data::Uint<
272                    256,
273                > as alloy_sol_types::SolType>::type_check(token)
274            }
275            #[inline]
276            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
277                <alloy::sol_types::sol_data::Uint<
278                    256,
279                > as alloy_sol_types::SolType>::detokenize(token)
280            }
281        }
282        #[automatically_derived]
283        impl alloy_sol_types::EventTopic for ScalarField {
284            #[inline]
285            fn topic_preimage_length(rust: &Self::RustType) -> usize {
286                <alloy::sol_types::sol_data::Uint<
287                    256,
288                > as alloy_sol_types::EventTopic>::topic_preimage_length(rust)
289            }
290            #[inline]
291            fn encode_topic_preimage(
292                rust: &Self::RustType,
293                out: &mut alloy_sol_types::private::Vec<u8>,
294            ) {
295                <alloy::sol_types::sol_data::Uint<
296                    256,
297                > as alloy_sol_types::EventTopic>::encode_topic_preimage(rust, out)
298            }
299            #[inline]
300            fn encode_topic(
301                rust: &Self::RustType,
302            ) -> alloy_sol_types::abi::token::WordToken {
303                <alloy::sol_types::sol_data::Uint<
304                    256,
305                > as alloy_sol_types::EventTopic>::encode_topic(rust)
306            }
307        }
308    };
309    #[derive(serde::Serialize, serde::Deserialize)]
310    #[derive(Default, Debug, PartialEq, Eq, Hash)]
311    /**```solidity
312struct G1Point { BaseField x; BaseField y; }
313```*/
314    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
315    #[derive(Clone)]
316    pub struct G1Point {
317        #[allow(missing_docs)]
318        pub x: <BaseField as alloy::sol_types::SolType>::RustType,
319        #[allow(missing_docs)]
320        pub y: <BaseField as alloy::sol_types::SolType>::RustType,
321    }
322    #[allow(
323        non_camel_case_types,
324        non_snake_case,
325        clippy::pub_underscore_fields,
326        clippy::style
327    )]
328    const _: () = {
329        use alloy::sol_types as alloy_sol_types;
330        #[doc(hidden)]
331        #[allow(dead_code)]
332        type UnderlyingSolTuple<'a> = (BaseField, BaseField);
333        #[doc(hidden)]
334        type UnderlyingRustTuple<'a> = (
335            <BaseField as alloy::sol_types::SolType>::RustType,
336            <BaseField as alloy::sol_types::SolType>::RustType,
337        );
338        #[cfg(test)]
339        #[allow(dead_code, unreachable_patterns)]
340        fn _type_assertion(
341            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
342        ) {
343            match _t {
344                alloy_sol_types::private::AssertTypeEq::<
345                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
346                >(_) => {}
347            }
348        }
349        #[automatically_derived]
350        #[doc(hidden)]
351        impl ::core::convert::From<G1Point> for UnderlyingRustTuple<'_> {
352            fn from(value: G1Point) -> Self {
353                (value.x, value.y)
354            }
355        }
356        #[automatically_derived]
357        #[doc(hidden)]
358        impl ::core::convert::From<UnderlyingRustTuple<'_>> for G1Point {
359            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
360                Self { x: tuple.0, y: tuple.1 }
361            }
362        }
363        #[automatically_derived]
364        impl alloy_sol_types::SolValue for G1Point {
365            type SolType = Self;
366        }
367        #[automatically_derived]
368        impl alloy_sol_types::private::SolTypeValue<Self> for G1Point {
369            #[inline]
370            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
371                (
372                    <BaseField as alloy_sol_types::SolType>::tokenize(&self.x),
373                    <BaseField as alloy_sol_types::SolType>::tokenize(&self.y),
374                )
375            }
376            #[inline]
377            fn stv_abi_encoded_size(&self) -> usize {
378                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
379                    return size;
380                }
381                let tuple = <UnderlyingRustTuple<
382                    '_,
383                > as ::core::convert::From<Self>>::from(self.clone());
384                <UnderlyingSolTuple<
385                    '_,
386                > as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
387            }
388            #[inline]
389            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
390                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
391            }
392            #[inline]
393            fn stv_abi_encode_packed_to(
394                &self,
395                out: &mut alloy_sol_types::private::Vec<u8>,
396            ) {
397                let tuple = <UnderlyingRustTuple<
398                    '_,
399                > as ::core::convert::From<Self>>::from(self.clone());
400                <UnderlyingSolTuple<
401                    '_,
402                > as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out)
403            }
404            #[inline]
405            fn stv_abi_packed_encoded_size(&self) -> usize {
406                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
407                    return size;
408                }
409                let tuple = <UnderlyingRustTuple<
410                    '_,
411                > as ::core::convert::From<Self>>::from(self.clone());
412                <UnderlyingSolTuple<
413                    '_,
414                > as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple)
415            }
416        }
417        #[automatically_derived]
418        impl alloy_sol_types::SolType for G1Point {
419            type RustType = Self;
420            type Token<'a> = <UnderlyingSolTuple<
421                'a,
422            > as alloy_sol_types::SolType>::Token<'a>;
423            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
424            const ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
425                '_,
426            > as alloy_sol_types::SolType>::ENCODED_SIZE;
427            const PACKED_ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
428                '_,
429            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
430            #[inline]
431            fn valid_token(token: &Self::Token<'_>) -> bool {
432                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
433            }
434            #[inline]
435            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
436                let tuple = <UnderlyingSolTuple<
437                    '_,
438                > as alloy_sol_types::SolType>::detokenize(token);
439                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
440            }
441        }
442        #[automatically_derived]
443        impl alloy_sol_types::SolStruct for G1Point {
444            const NAME: &'static str = "G1Point";
445            #[inline]
446            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
447                alloy_sol_types::private::Cow::Borrowed("G1Point(uint256 x,uint256 y)")
448            }
449            #[inline]
450            fn eip712_components() -> alloy_sol_types::private::Vec<
451                alloy_sol_types::private::Cow<'static, str>,
452            > {
453                alloy_sol_types::private::Vec::new()
454            }
455            #[inline]
456            fn eip712_encode_type() -> alloy_sol_types::private::Cow<'static, str> {
457                <Self as alloy_sol_types::SolStruct>::eip712_root_type()
458            }
459            #[inline]
460            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
461                [
462                    <BaseField as alloy_sol_types::SolType>::eip712_data_word(&self.x).0,
463                    <BaseField as alloy_sol_types::SolType>::eip712_data_word(&self.y).0,
464                ]
465                    .concat()
466            }
467        }
468        #[automatically_derived]
469        impl alloy_sol_types::EventTopic for G1Point {
470            #[inline]
471            fn topic_preimage_length(rust: &Self::RustType) -> usize {
472                0usize
473                    + <BaseField as alloy_sol_types::EventTopic>::topic_preimage_length(
474                        &rust.x,
475                    )
476                    + <BaseField as alloy_sol_types::EventTopic>::topic_preimage_length(
477                        &rust.y,
478                    )
479            }
480            #[inline]
481            fn encode_topic_preimage(
482                rust: &Self::RustType,
483                out: &mut alloy_sol_types::private::Vec<u8>,
484            ) {
485                out.reserve(
486                    <Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust),
487                );
488                <BaseField as alloy_sol_types::EventTopic>::encode_topic_preimage(
489                    &rust.x,
490                    out,
491                );
492                <BaseField as alloy_sol_types::EventTopic>::encode_topic_preimage(
493                    &rust.y,
494                    out,
495                );
496            }
497            #[inline]
498            fn encode_topic(
499                rust: &Self::RustType,
500            ) -> alloy_sol_types::abi::token::WordToken {
501                let mut out = alloy_sol_types::private::Vec::new();
502                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(
503                    rust,
504                    &mut out,
505                );
506                alloy_sol_types::abi::token::WordToken(
507                    alloy_sol_types::private::keccak256(out),
508                )
509            }
510        }
511    };
512    use alloy::contract as alloy_contract;
513    /**Creates a new wrapper around an on-chain [`BN254`](self) contract instance.
514
515See the [wrapper's documentation](`BN254Instance`) for more details.*/
516    #[inline]
517    pub const fn new<
518        P: alloy_contract::private::Provider<N>,
519        N: alloy_contract::private::Network,
520    >(address: alloy_sol_types::private::Address, __provider: P) -> BN254Instance<P, N> {
521        BN254Instance::<P, N>::new(address, __provider)
522    }
523    /**A [`BN254`](self) instance.
524
525Contains type-safe methods for interacting with an on-chain instance of the
526[`BN254`](self) contract located at a given `address`, using a given
527provider `P`.
528
529If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
530documentation on how to provide it), the `deploy` and `deploy_builder` methods can
531be used to deploy a new instance of the contract.
532
533See the [module-level documentation](self) for all the available methods.*/
534    #[derive(Clone)]
535    pub struct BN254Instance<P, N = alloy_contract::private::Ethereum> {
536        address: alloy_sol_types::private::Address,
537        provider: P,
538        _network: ::core::marker::PhantomData<N>,
539    }
540    #[automatically_derived]
541    impl<P, N> ::core::fmt::Debug for BN254Instance<P, N> {
542        #[inline]
543        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
544            f.debug_tuple("BN254Instance").field(&self.address).finish()
545        }
546    }
547    /// Instantiation and getters/setters.
548    impl<
549        P: alloy_contract::private::Provider<N>,
550        N: alloy_contract::private::Network,
551    > BN254Instance<P, N> {
552        /**Creates a new wrapper around an on-chain [`BN254`](self) contract instance.
553
554See the [wrapper's documentation](`BN254Instance`) for more details.*/
555        #[inline]
556        pub const fn new(
557            address: alloy_sol_types::private::Address,
558            __provider: P,
559        ) -> Self {
560            Self {
561                address,
562                provider: __provider,
563                _network: ::core::marker::PhantomData,
564            }
565        }
566        /// Returns a reference to the address.
567        #[inline]
568        pub const fn address(&self) -> &alloy_sol_types::private::Address {
569            &self.address
570        }
571        /// Sets the address.
572        #[inline]
573        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
574            self.address = address;
575        }
576        /// Sets the address and returns `self`.
577        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
578            self.set_address(address);
579            self
580        }
581        /// Returns a reference to the provider.
582        #[inline]
583        pub const fn provider(&self) -> &P {
584            &self.provider
585        }
586    }
587    impl<P: ::core::clone::Clone, N> BN254Instance<&P, N> {
588        /// Clones the provider and returns a new instance with the cloned provider.
589        #[inline]
590        pub fn with_cloned_provider(self) -> BN254Instance<P, N> {
591            BN254Instance {
592                address: self.address,
593                provider: ::core::clone::Clone::clone(&self.provider),
594                _network: ::core::marker::PhantomData,
595            }
596        }
597    }
598    /// Function calls.
599    impl<
600        P: alloy_contract::private::Provider<N>,
601        N: alloy_contract::private::Network,
602    > BN254Instance<P, N> {
603        /// Creates a new call builder using this contract instance's provider and address.
604        ///
605        /// Note that the call can be any function call, not just those defined in this
606        /// contract. Prefer using the other methods for building type-safe contract calls.
607        pub fn call_builder<C: alloy_sol_types::SolCall>(
608            &self,
609            call: &C,
610        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
611            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
612        }
613    }
614    /// Event filters.
615    impl<
616        P: alloy_contract::private::Provider<N>,
617        N: alloy_contract::private::Network,
618    > BN254Instance<P, N> {
619        /// Creates a new event filter using this contract instance's provider and address.
620        ///
621        /// Note that the type can be any event, not just those defined in this contract.
622        /// Prefer using the other methods for building type-safe event filters.
623        pub fn event_filter<E: alloy_sol_types::SolEvent>(
624            &self,
625        ) -> alloy_contract::Event<&P, E, N> {
626            alloy_contract::Event::new_sol(&self.provider, &self.address)
627        }
628    }
629}
630///Module containing a contract's types and functions.
631/**
632
633```solidity
634library IPlonkVerifier {
635    struct PlonkProof { BN254.G1Point wire0; BN254.G1Point wire1; BN254.G1Point wire2; BN254.G1Point wire3; BN254.G1Point wire4; BN254.G1Point prodPerm; BN254.G1Point split0; BN254.G1Point split1; BN254.G1Point split2; BN254.G1Point split3; BN254.G1Point split4; BN254.G1Point zeta; BN254.G1Point zetaOmega; BN254.ScalarField wireEval0; BN254.ScalarField wireEval1; BN254.ScalarField wireEval2; BN254.ScalarField wireEval3; BN254.ScalarField wireEval4; BN254.ScalarField sigmaEval0; BN254.ScalarField sigmaEval1; BN254.ScalarField sigmaEval2; BN254.ScalarField sigmaEval3; BN254.ScalarField prodPermZetaOmegaEval; }
636    struct VerifyingKey { uint256 domainSize; uint256 numInputs; BN254.G1Point sigma0; BN254.G1Point sigma1; BN254.G1Point sigma2; BN254.G1Point sigma3; BN254.G1Point sigma4; BN254.G1Point q1; BN254.G1Point q2; BN254.G1Point q3; BN254.G1Point q4; BN254.G1Point qM12; BN254.G1Point qM34; BN254.G1Point qO; BN254.G1Point qC; BN254.G1Point qH1; BN254.G1Point qH2; BN254.G1Point qH3; BN254.G1Point qH4; BN254.G1Point qEcc; bytes32 g2LSB; bytes32 g2MSB; }
637}
638```*/
639#[allow(
640    non_camel_case_types,
641    non_snake_case,
642    clippy::pub_underscore_fields,
643    clippy::style,
644    clippy::empty_structs_with_brackets
645)]
646pub mod IPlonkVerifier {
647    use super::*;
648    use alloy::sol_types as alloy_sol_types;
649    #[derive(serde::Serialize, serde::Deserialize)]
650    #[derive(Default, Debug, PartialEq, Eq, Hash)]
651    /**```solidity
652struct PlonkProof { BN254.G1Point wire0; BN254.G1Point wire1; BN254.G1Point wire2; BN254.G1Point wire3; BN254.G1Point wire4; BN254.G1Point prodPerm; BN254.G1Point split0; BN254.G1Point split1; BN254.G1Point split2; BN254.G1Point split3; BN254.G1Point split4; BN254.G1Point zeta; BN254.G1Point zetaOmega; BN254.ScalarField wireEval0; BN254.ScalarField wireEval1; BN254.ScalarField wireEval2; BN254.ScalarField wireEval3; BN254.ScalarField wireEval4; BN254.ScalarField sigmaEval0; BN254.ScalarField sigmaEval1; BN254.ScalarField sigmaEval2; BN254.ScalarField sigmaEval3; BN254.ScalarField prodPermZetaOmegaEval; }
653```*/
654    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
655    #[derive(Clone)]
656    pub struct PlonkProof {
657        #[allow(missing_docs)]
658        pub wire0: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
659        #[allow(missing_docs)]
660        pub wire1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
661        #[allow(missing_docs)]
662        pub wire2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
663        #[allow(missing_docs)]
664        pub wire3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
665        #[allow(missing_docs)]
666        pub wire4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
667        #[allow(missing_docs)]
668        pub prodPerm: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
669        #[allow(missing_docs)]
670        pub split0: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
671        #[allow(missing_docs)]
672        pub split1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
673        #[allow(missing_docs)]
674        pub split2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
675        #[allow(missing_docs)]
676        pub split3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
677        #[allow(missing_docs)]
678        pub split4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
679        #[allow(missing_docs)]
680        pub zeta: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
681        #[allow(missing_docs)]
682        pub zetaOmega: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
683        #[allow(missing_docs)]
684        pub wireEval0: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
685        #[allow(missing_docs)]
686        pub wireEval1: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
687        #[allow(missing_docs)]
688        pub wireEval2: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
689        #[allow(missing_docs)]
690        pub wireEval3: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
691        #[allow(missing_docs)]
692        pub wireEval4: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
693        #[allow(missing_docs)]
694        pub sigmaEval0: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
695        #[allow(missing_docs)]
696        pub sigmaEval1: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
697        #[allow(missing_docs)]
698        pub sigmaEval2: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
699        #[allow(missing_docs)]
700        pub sigmaEval3: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
701        #[allow(missing_docs)]
702        pub prodPermZetaOmegaEval: <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
703    }
704    #[allow(
705        non_camel_case_types,
706        non_snake_case,
707        clippy::pub_underscore_fields,
708        clippy::style
709    )]
710    const _: () = {
711        use alloy::sol_types as alloy_sol_types;
712        #[doc(hidden)]
713        #[allow(dead_code)]
714        type UnderlyingSolTuple<'a> = (
715            BN254::G1Point,
716            BN254::G1Point,
717            BN254::G1Point,
718            BN254::G1Point,
719            BN254::G1Point,
720            BN254::G1Point,
721            BN254::G1Point,
722            BN254::G1Point,
723            BN254::G1Point,
724            BN254::G1Point,
725            BN254::G1Point,
726            BN254::G1Point,
727            BN254::G1Point,
728            BN254::ScalarField,
729            BN254::ScalarField,
730            BN254::ScalarField,
731            BN254::ScalarField,
732            BN254::ScalarField,
733            BN254::ScalarField,
734            BN254::ScalarField,
735            BN254::ScalarField,
736            BN254::ScalarField,
737            BN254::ScalarField,
738        );
739        #[doc(hidden)]
740        type UnderlyingRustTuple<'a> = (
741            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
742            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
743            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
744            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
745            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
746            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
747            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
748            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
749            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
750            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
751            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
752            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
753            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
754            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
755            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
756            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
757            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
758            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
759            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
760            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
761            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
762            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
763            <BN254::ScalarField as alloy::sol_types::SolType>::RustType,
764        );
765        #[cfg(test)]
766        #[allow(dead_code, unreachable_patterns)]
767        fn _type_assertion(
768            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
769        ) {
770            match _t {
771                alloy_sol_types::private::AssertTypeEq::<
772                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
773                >(_) => {}
774            }
775        }
776        #[automatically_derived]
777        #[doc(hidden)]
778        impl ::core::convert::From<PlonkProof> for UnderlyingRustTuple<'_> {
779            fn from(value: PlonkProof) -> Self {
780                (
781                    value.wire0,
782                    value.wire1,
783                    value.wire2,
784                    value.wire3,
785                    value.wire4,
786                    value.prodPerm,
787                    value.split0,
788                    value.split1,
789                    value.split2,
790                    value.split3,
791                    value.split4,
792                    value.zeta,
793                    value.zetaOmega,
794                    value.wireEval0,
795                    value.wireEval1,
796                    value.wireEval2,
797                    value.wireEval3,
798                    value.wireEval4,
799                    value.sigmaEval0,
800                    value.sigmaEval1,
801                    value.sigmaEval2,
802                    value.sigmaEval3,
803                    value.prodPermZetaOmegaEval,
804                )
805            }
806        }
807        #[automatically_derived]
808        #[doc(hidden)]
809        impl ::core::convert::From<UnderlyingRustTuple<'_>> for PlonkProof {
810            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
811                Self {
812                    wire0: tuple.0,
813                    wire1: tuple.1,
814                    wire2: tuple.2,
815                    wire3: tuple.3,
816                    wire4: tuple.4,
817                    prodPerm: tuple.5,
818                    split0: tuple.6,
819                    split1: tuple.7,
820                    split2: tuple.8,
821                    split3: tuple.9,
822                    split4: tuple.10,
823                    zeta: tuple.11,
824                    zetaOmega: tuple.12,
825                    wireEval0: tuple.13,
826                    wireEval1: tuple.14,
827                    wireEval2: tuple.15,
828                    wireEval3: tuple.16,
829                    wireEval4: tuple.17,
830                    sigmaEval0: tuple.18,
831                    sigmaEval1: tuple.19,
832                    sigmaEval2: tuple.20,
833                    sigmaEval3: tuple.21,
834                    prodPermZetaOmegaEval: tuple.22,
835                }
836            }
837        }
838        #[automatically_derived]
839        impl alloy_sol_types::SolValue for PlonkProof {
840            type SolType = Self;
841        }
842        #[automatically_derived]
843        impl alloy_sol_types::private::SolTypeValue<Self> for PlonkProof {
844            #[inline]
845            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
846                (
847                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire0),
848                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire1),
849                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire2),
850                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire3),
851                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.wire4),
852                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(
853                        &self.prodPerm,
854                    ),
855                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split0),
856                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split1),
857                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split2),
858                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split3),
859                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.split4),
860                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.zeta),
861                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(
862                        &self.zetaOmega,
863                    ),
864                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
865                        &self.wireEval0,
866                    ),
867                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
868                        &self.wireEval1,
869                    ),
870                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
871                        &self.wireEval2,
872                    ),
873                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
874                        &self.wireEval3,
875                    ),
876                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
877                        &self.wireEval4,
878                    ),
879                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
880                        &self.sigmaEval0,
881                    ),
882                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
883                        &self.sigmaEval1,
884                    ),
885                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
886                        &self.sigmaEval2,
887                    ),
888                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
889                        &self.sigmaEval3,
890                    ),
891                    <BN254::ScalarField as alloy_sol_types::SolType>::tokenize(
892                        &self.prodPermZetaOmegaEval,
893                    ),
894                )
895            }
896            #[inline]
897            fn stv_abi_encoded_size(&self) -> usize {
898                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
899                    return size;
900                }
901                let tuple = <UnderlyingRustTuple<
902                    '_,
903                > as ::core::convert::From<Self>>::from(self.clone());
904                <UnderlyingSolTuple<
905                    '_,
906                > as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
907            }
908            #[inline]
909            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
910                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
911            }
912            #[inline]
913            fn stv_abi_encode_packed_to(
914                &self,
915                out: &mut alloy_sol_types::private::Vec<u8>,
916            ) {
917                let tuple = <UnderlyingRustTuple<
918                    '_,
919                > as ::core::convert::From<Self>>::from(self.clone());
920                <UnderlyingSolTuple<
921                    '_,
922                > as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out)
923            }
924            #[inline]
925            fn stv_abi_packed_encoded_size(&self) -> usize {
926                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
927                    return size;
928                }
929                let tuple = <UnderlyingRustTuple<
930                    '_,
931                > as ::core::convert::From<Self>>::from(self.clone());
932                <UnderlyingSolTuple<
933                    '_,
934                > as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple)
935            }
936        }
937        #[automatically_derived]
938        impl alloy_sol_types::SolType for PlonkProof {
939            type RustType = Self;
940            type Token<'a> = <UnderlyingSolTuple<
941                'a,
942            > as alloy_sol_types::SolType>::Token<'a>;
943            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
944            const ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
945                '_,
946            > as alloy_sol_types::SolType>::ENCODED_SIZE;
947            const PACKED_ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
948                '_,
949            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
950            #[inline]
951            fn valid_token(token: &Self::Token<'_>) -> bool {
952                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
953            }
954            #[inline]
955            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
956                let tuple = <UnderlyingSolTuple<
957                    '_,
958                > as alloy_sol_types::SolType>::detokenize(token);
959                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
960            }
961        }
962        #[automatically_derived]
963        impl alloy_sol_types::SolStruct for PlonkProof {
964            const NAME: &'static str = "PlonkProof";
965            #[inline]
966            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
967                alloy_sol_types::private::Cow::Borrowed(
968                    "PlonkProof(G1Point wire0,G1Point wire1,G1Point wire2,G1Point wire3,G1Point wire4,G1Point prodPerm,G1Point split0,G1Point split1,G1Point split2,G1Point split3,G1Point split4,G1Point zeta,G1Point zetaOmega,uint256 wireEval0,uint256 wireEval1,uint256 wireEval2,uint256 wireEval3,uint256 wireEval4,uint256 sigmaEval0,uint256 sigmaEval1,uint256 sigmaEval2,uint256 sigmaEval3,uint256 prodPermZetaOmegaEval)",
969                )
970            }
971            #[inline]
972            fn eip712_components() -> alloy_sol_types::private::Vec<
973                alloy_sol_types::private::Cow<'static, str>,
974            > {
975                let mut components = alloy_sol_types::private::Vec::with_capacity(13);
976                components
977                    .push(
978                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
979                    );
980                components
981                    .extend(
982                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
983                    );
984                components
985                    .push(
986                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
987                    );
988                components
989                    .extend(
990                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
991                    );
992                components
993                    .push(
994                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
995                    );
996                components
997                    .extend(
998                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
999                    );
1000                components
1001                    .push(
1002                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1003                    );
1004                components
1005                    .extend(
1006                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1007                    );
1008                components
1009                    .push(
1010                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1011                    );
1012                components
1013                    .extend(
1014                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1015                    );
1016                components
1017                    .push(
1018                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1019                    );
1020                components
1021                    .extend(
1022                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1023                    );
1024                components
1025                    .push(
1026                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1027                    );
1028                components
1029                    .extend(
1030                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1031                    );
1032                components
1033                    .push(
1034                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1035                    );
1036                components
1037                    .extend(
1038                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1039                    );
1040                components
1041                    .push(
1042                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1043                    );
1044                components
1045                    .extend(
1046                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1047                    );
1048                components
1049                    .push(
1050                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1051                    );
1052                components
1053                    .extend(
1054                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1055                    );
1056                components
1057                    .push(
1058                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1059                    );
1060                components
1061                    .extend(
1062                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1063                    );
1064                components
1065                    .push(
1066                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1067                    );
1068                components
1069                    .extend(
1070                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1071                    );
1072                components
1073                    .push(
1074                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1075                    );
1076                components
1077                    .extend(
1078                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1079                    );
1080                components
1081            }
1082            #[inline]
1083            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
1084                [
1085                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1086                            &self.wire0,
1087                        )
1088                        .0,
1089                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1090                            &self.wire1,
1091                        )
1092                        .0,
1093                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1094                            &self.wire2,
1095                        )
1096                        .0,
1097                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1098                            &self.wire3,
1099                        )
1100                        .0,
1101                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1102                            &self.wire4,
1103                        )
1104                        .0,
1105                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1106                            &self.prodPerm,
1107                        )
1108                        .0,
1109                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1110                            &self.split0,
1111                        )
1112                        .0,
1113                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1114                            &self.split1,
1115                        )
1116                        .0,
1117                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1118                            &self.split2,
1119                        )
1120                        .0,
1121                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1122                            &self.split3,
1123                        )
1124                        .0,
1125                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1126                            &self.split4,
1127                        )
1128                        .0,
1129                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1130                            &self.zeta,
1131                        )
1132                        .0,
1133                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1134                            &self.zetaOmega,
1135                        )
1136                        .0,
1137                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1138                            &self.wireEval0,
1139                        )
1140                        .0,
1141                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1142                            &self.wireEval1,
1143                        )
1144                        .0,
1145                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1146                            &self.wireEval2,
1147                        )
1148                        .0,
1149                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1150                            &self.wireEval3,
1151                        )
1152                        .0,
1153                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1154                            &self.wireEval4,
1155                        )
1156                        .0,
1157                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1158                            &self.sigmaEval0,
1159                        )
1160                        .0,
1161                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1162                            &self.sigmaEval1,
1163                        )
1164                        .0,
1165                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1166                            &self.sigmaEval2,
1167                        )
1168                        .0,
1169                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1170                            &self.sigmaEval3,
1171                        )
1172                        .0,
1173                    <BN254::ScalarField as alloy_sol_types::SolType>::eip712_data_word(
1174                            &self.prodPermZetaOmegaEval,
1175                        )
1176                        .0,
1177                ]
1178                    .concat()
1179            }
1180        }
1181        #[automatically_derived]
1182        impl alloy_sol_types::EventTopic for PlonkProof {
1183            #[inline]
1184            fn topic_preimage_length(rust: &Self::RustType) -> usize {
1185                0usize
1186                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1187                        &rust.wire0,
1188                    )
1189                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1190                        &rust.wire1,
1191                    )
1192                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1193                        &rust.wire2,
1194                    )
1195                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1196                        &rust.wire3,
1197                    )
1198                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1199                        &rust.wire4,
1200                    )
1201                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1202                        &rust.prodPerm,
1203                    )
1204                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1205                        &rust.split0,
1206                    )
1207                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1208                        &rust.split1,
1209                    )
1210                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1211                        &rust.split2,
1212                    )
1213                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1214                        &rust.split3,
1215                    )
1216                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1217                        &rust.split4,
1218                    )
1219                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1220                        &rust.zeta,
1221                    )
1222                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1223                        &rust.zetaOmega,
1224                    )
1225                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1226                        &rust.wireEval0,
1227                    )
1228                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1229                        &rust.wireEval1,
1230                    )
1231                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1232                        &rust.wireEval2,
1233                    )
1234                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1235                        &rust.wireEval3,
1236                    )
1237                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1238                        &rust.wireEval4,
1239                    )
1240                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1241                        &rust.sigmaEval0,
1242                    )
1243                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1244                        &rust.sigmaEval1,
1245                    )
1246                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1247                        &rust.sigmaEval2,
1248                    )
1249                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1250                        &rust.sigmaEval3,
1251                    )
1252                    + <BN254::ScalarField as alloy_sol_types::EventTopic>::topic_preimage_length(
1253                        &rust.prodPermZetaOmegaEval,
1254                    )
1255            }
1256            #[inline]
1257            fn encode_topic_preimage(
1258                rust: &Self::RustType,
1259                out: &mut alloy_sol_types::private::Vec<u8>,
1260            ) {
1261                out.reserve(
1262                    <Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust),
1263                );
1264                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1265                    &rust.wire0,
1266                    out,
1267                );
1268                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1269                    &rust.wire1,
1270                    out,
1271                );
1272                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1273                    &rust.wire2,
1274                    out,
1275                );
1276                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1277                    &rust.wire3,
1278                    out,
1279                );
1280                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1281                    &rust.wire4,
1282                    out,
1283                );
1284                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1285                    &rust.prodPerm,
1286                    out,
1287                );
1288                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1289                    &rust.split0,
1290                    out,
1291                );
1292                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1293                    &rust.split1,
1294                    out,
1295                );
1296                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1297                    &rust.split2,
1298                    out,
1299                );
1300                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1301                    &rust.split3,
1302                    out,
1303                );
1304                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1305                    &rust.split4,
1306                    out,
1307                );
1308                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1309                    &rust.zeta,
1310                    out,
1311                );
1312                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
1313                    &rust.zetaOmega,
1314                    out,
1315                );
1316                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1317                    &rust.wireEval0,
1318                    out,
1319                );
1320                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1321                    &rust.wireEval1,
1322                    out,
1323                );
1324                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1325                    &rust.wireEval2,
1326                    out,
1327                );
1328                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1329                    &rust.wireEval3,
1330                    out,
1331                );
1332                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1333                    &rust.wireEval4,
1334                    out,
1335                );
1336                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1337                    &rust.sigmaEval0,
1338                    out,
1339                );
1340                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1341                    &rust.sigmaEval1,
1342                    out,
1343                );
1344                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1345                    &rust.sigmaEval2,
1346                    out,
1347                );
1348                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1349                    &rust.sigmaEval3,
1350                    out,
1351                );
1352                <BN254::ScalarField as alloy_sol_types::EventTopic>::encode_topic_preimage(
1353                    &rust.prodPermZetaOmegaEval,
1354                    out,
1355                );
1356            }
1357            #[inline]
1358            fn encode_topic(
1359                rust: &Self::RustType,
1360            ) -> alloy_sol_types::abi::token::WordToken {
1361                let mut out = alloy_sol_types::private::Vec::new();
1362                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(
1363                    rust,
1364                    &mut out,
1365                );
1366                alloy_sol_types::abi::token::WordToken(
1367                    alloy_sol_types::private::keccak256(out),
1368                )
1369            }
1370        }
1371    };
1372    #[derive(serde::Serialize, serde::Deserialize)]
1373    #[derive(Default, Debug, PartialEq, Eq, Hash)]
1374    /**```solidity
1375struct VerifyingKey { uint256 domainSize; uint256 numInputs; BN254.G1Point sigma0; BN254.G1Point sigma1; BN254.G1Point sigma2; BN254.G1Point sigma3; BN254.G1Point sigma4; BN254.G1Point q1; BN254.G1Point q2; BN254.G1Point q3; BN254.G1Point q4; BN254.G1Point qM12; BN254.G1Point qM34; BN254.G1Point qO; BN254.G1Point qC; BN254.G1Point qH1; BN254.G1Point qH2; BN254.G1Point qH3; BN254.G1Point qH4; BN254.G1Point qEcc; bytes32 g2LSB; bytes32 g2MSB; }
1376```*/
1377    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
1378    #[derive(Clone)]
1379    pub struct VerifyingKey {
1380        #[allow(missing_docs)]
1381        pub domainSize: alloy::sol_types::private::primitives::aliases::U256,
1382        #[allow(missing_docs)]
1383        pub numInputs: alloy::sol_types::private::primitives::aliases::U256,
1384        #[allow(missing_docs)]
1385        pub sigma0: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1386        #[allow(missing_docs)]
1387        pub sigma1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1388        #[allow(missing_docs)]
1389        pub sigma2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1390        #[allow(missing_docs)]
1391        pub sigma3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1392        #[allow(missing_docs)]
1393        pub sigma4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1394        #[allow(missing_docs)]
1395        pub q1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1396        #[allow(missing_docs)]
1397        pub q2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1398        #[allow(missing_docs)]
1399        pub q3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1400        #[allow(missing_docs)]
1401        pub q4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1402        #[allow(missing_docs)]
1403        pub qM12: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1404        #[allow(missing_docs)]
1405        pub qM34: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1406        #[allow(missing_docs)]
1407        pub qO: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1408        #[allow(missing_docs)]
1409        pub qC: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1410        #[allow(missing_docs)]
1411        pub qH1: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1412        #[allow(missing_docs)]
1413        pub qH2: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1414        #[allow(missing_docs)]
1415        pub qH3: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1416        #[allow(missing_docs)]
1417        pub qH4: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1418        #[allow(missing_docs)]
1419        pub qEcc: <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1420        #[allow(missing_docs)]
1421        pub g2LSB: alloy::sol_types::private::FixedBytes<32>,
1422        #[allow(missing_docs)]
1423        pub g2MSB: alloy::sol_types::private::FixedBytes<32>,
1424    }
1425    #[allow(
1426        non_camel_case_types,
1427        non_snake_case,
1428        clippy::pub_underscore_fields,
1429        clippy::style
1430    )]
1431    const _: () = {
1432        use alloy::sol_types as alloy_sol_types;
1433        #[doc(hidden)]
1434        #[allow(dead_code)]
1435        type UnderlyingSolTuple<'a> = (
1436            alloy::sol_types::sol_data::Uint<256>,
1437            alloy::sol_types::sol_data::Uint<256>,
1438            BN254::G1Point,
1439            BN254::G1Point,
1440            BN254::G1Point,
1441            BN254::G1Point,
1442            BN254::G1Point,
1443            BN254::G1Point,
1444            BN254::G1Point,
1445            BN254::G1Point,
1446            BN254::G1Point,
1447            BN254::G1Point,
1448            BN254::G1Point,
1449            BN254::G1Point,
1450            BN254::G1Point,
1451            BN254::G1Point,
1452            BN254::G1Point,
1453            BN254::G1Point,
1454            BN254::G1Point,
1455            BN254::G1Point,
1456            alloy::sol_types::sol_data::FixedBytes<32>,
1457            alloy::sol_types::sol_data::FixedBytes<32>,
1458        );
1459        #[doc(hidden)]
1460        type UnderlyingRustTuple<'a> = (
1461            alloy::sol_types::private::primitives::aliases::U256,
1462            alloy::sol_types::private::primitives::aliases::U256,
1463            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1464            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1465            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1466            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1467            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1468            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1469            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1470            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1471            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1472            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1473            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1474            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1475            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1476            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1477            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1478            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1479            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1480            <BN254::G1Point as alloy::sol_types::SolType>::RustType,
1481            alloy::sol_types::private::FixedBytes<32>,
1482            alloy::sol_types::private::FixedBytes<32>,
1483        );
1484        #[cfg(test)]
1485        #[allow(dead_code, unreachable_patterns)]
1486        fn _type_assertion(
1487            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
1488        ) {
1489            match _t {
1490                alloy_sol_types::private::AssertTypeEq::<
1491                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
1492                >(_) => {}
1493            }
1494        }
1495        #[automatically_derived]
1496        #[doc(hidden)]
1497        impl ::core::convert::From<VerifyingKey> for UnderlyingRustTuple<'_> {
1498            fn from(value: VerifyingKey) -> Self {
1499                (
1500                    value.domainSize,
1501                    value.numInputs,
1502                    value.sigma0,
1503                    value.sigma1,
1504                    value.sigma2,
1505                    value.sigma3,
1506                    value.sigma4,
1507                    value.q1,
1508                    value.q2,
1509                    value.q3,
1510                    value.q4,
1511                    value.qM12,
1512                    value.qM34,
1513                    value.qO,
1514                    value.qC,
1515                    value.qH1,
1516                    value.qH2,
1517                    value.qH3,
1518                    value.qH4,
1519                    value.qEcc,
1520                    value.g2LSB,
1521                    value.g2MSB,
1522                )
1523            }
1524        }
1525        #[automatically_derived]
1526        #[doc(hidden)]
1527        impl ::core::convert::From<UnderlyingRustTuple<'_>> for VerifyingKey {
1528            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
1529                Self {
1530                    domainSize: tuple.0,
1531                    numInputs: tuple.1,
1532                    sigma0: tuple.2,
1533                    sigma1: tuple.3,
1534                    sigma2: tuple.4,
1535                    sigma3: tuple.5,
1536                    sigma4: tuple.6,
1537                    q1: tuple.7,
1538                    q2: tuple.8,
1539                    q3: tuple.9,
1540                    q4: tuple.10,
1541                    qM12: tuple.11,
1542                    qM34: tuple.12,
1543                    qO: tuple.13,
1544                    qC: tuple.14,
1545                    qH1: tuple.15,
1546                    qH2: tuple.16,
1547                    qH3: tuple.17,
1548                    qH4: tuple.18,
1549                    qEcc: tuple.19,
1550                    g2LSB: tuple.20,
1551                    g2MSB: tuple.21,
1552                }
1553            }
1554        }
1555        #[automatically_derived]
1556        impl alloy_sol_types::SolValue for VerifyingKey {
1557            type SolType = Self;
1558        }
1559        #[automatically_derived]
1560        impl alloy_sol_types::private::SolTypeValue<Self> for VerifyingKey {
1561            #[inline]
1562            fn stv_to_tokens(&self) -> <Self as alloy_sol_types::SolType>::Token<'_> {
1563                (
1564                    <alloy::sol_types::sol_data::Uint<
1565                        256,
1566                    > as alloy_sol_types::SolType>::tokenize(&self.domainSize),
1567                    <alloy::sol_types::sol_data::Uint<
1568                        256,
1569                    > as alloy_sol_types::SolType>::tokenize(&self.numInputs),
1570                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma0),
1571                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma1),
1572                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma2),
1573                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma3),
1574                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.sigma4),
1575                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.q1),
1576                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.q2),
1577                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.q3),
1578                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.q4),
1579                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qM12),
1580                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qM34),
1581                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qO),
1582                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qC),
1583                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qH1),
1584                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qH2),
1585                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qH3),
1586                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qH4),
1587                    <BN254::G1Point as alloy_sol_types::SolType>::tokenize(&self.qEcc),
1588                    <alloy::sol_types::sol_data::FixedBytes<
1589                        32,
1590                    > as alloy_sol_types::SolType>::tokenize(&self.g2LSB),
1591                    <alloy::sol_types::sol_data::FixedBytes<
1592                        32,
1593                    > as alloy_sol_types::SolType>::tokenize(&self.g2MSB),
1594                )
1595            }
1596            #[inline]
1597            fn stv_abi_encoded_size(&self) -> usize {
1598                if let Some(size) = <Self as alloy_sol_types::SolType>::ENCODED_SIZE {
1599                    return size;
1600                }
1601                let tuple = <UnderlyingRustTuple<
1602                    '_,
1603                > as ::core::convert::From<Self>>::from(self.clone());
1604                <UnderlyingSolTuple<
1605                    '_,
1606                > as alloy_sol_types::SolType>::abi_encoded_size(&tuple)
1607            }
1608            #[inline]
1609            fn stv_eip712_data_word(&self) -> alloy_sol_types::Word {
1610                <Self as alloy_sol_types::SolStruct>::eip712_hash_struct(self)
1611            }
1612            #[inline]
1613            fn stv_abi_encode_packed_to(
1614                &self,
1615                out: &mut alloy_sol_types::private::Vec<u8>,
1616            ) {
1617                let tuple = <UnderlyingRustTuple<
1618                    '_,
1619                > as ::core::convert::From<Self>>::from(self.clone());
1620                <UnderlyingSolTuple<
1621                    '_,
1622                > as alloy_sol_types::SolType>::abi_encode_packed_to(&tuple, out)
1623            }
1624            #[inline]
1625            fn stv_abi_packed_encoded_size(&self) -> usize {
1626                if let Some(size) = <Self as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE {
1627                    return size;
1628                }
1629                let tuple = <UnderlyingRustTuple<
1630                    '_,
1631                > as ::core::convert::From<Self>>::from(self.clone());
1632                <UnderlyingSolTuple<
1633                    '_,
1634                > as alloy_sol_types::SolType>::abi_packed_encoded_size(&tuple)
1635            }
1636        }
1637        #[automatically_derived]
1638        impl alloy_sol_types::SolType for VerifyingKey {
1639            type RustType = Self;
1640            type Token<'a> = <UnderlyingSolTuple<
1641                'a,
1642            > as alloy_sol_types::SolType>::Token<'a>;
1643            const SOL_NAME: &'static str = <Self as alloy_sol_types::SolStruct>::NAME;
1644            const ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
1645                '_,
1646            > as alloy_sol_types::SolType>::ENCODED_SIZE;
1647            const PACKED_ENCODED_SIZE: Option<usize> = <UnderlyingSolTuple<
1648                '_,
1649            > as alloy_sol_types::SolType>::PACKED_ENCODED_SIZE;
1650            #[inline]
1651            fn valid_token(token: &Self::Token<'_>) -> bool {
1652                <UnderlyingSolTuple<'_> as alloy_sol_types::SolType>::valid_token(token)
1653            }
1654            #[inline]
1655            fn detokenize(token: Self::Token<'_>) -> Self::RustType {
1656                let tuple = <UnderlyingSolTuple<
1657                    '_,
1658                > as alloy_sol_types::SolType>::detokenize(token);
1659                <Self as ::core::convert::From<UnderlyingRustTuple<'_>>>::from(tuple)
1660            }
1661        }
1662        #[automatically_derived]
1663        impl alloy_sol_types::SolStruct for VerifyingKey {
1664            const NAME: &'static str = "VerifyingKey";
1665            #[inline]
1666            fn eip712_root_type() -> alloy_sol_types::private::Cow<'static, str> {
1667                alloy_sol_types::private::Cow::Borrowed(
1668                    "VerifyingKey(uint256 domainSize,uint256 numInputs,G1Point sigma0,G1Point sigma1,G1Point sigma2,G1Point sigma3,G1Point sigma4,G1Point q1,G1Point q2,G1Point q3,G1Point q4,G1Point qM12,G1Point qM34,G1Point qO,G1Point qC,G1Point qH1,G1Point qH2,G1Point qH3,G1Point qH4,G1Point qEcc,bytes32 g2LSB,bytes32 g2MSB)",
1669                )
1670            }
1671            #[inline]
1672            fn eip712_components() -> alloy_sol_types::private::Vec<
1673                alloy_sol_types::private::Cow<'static, str>,
1674            > {
1675                let mut components = alloy_sol_types::private::Vec::with_capacity(18);
1676                components
1677                    .push(
1678                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1679                    );
1680                components
1681                    .extend(
1682                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1683                    );
1684                components
1685                    .push(
1686                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1687                    );
1688                components
1689                    .extend(
1690                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1691                    );
1692                components
1693                    .push(
1694                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1695                    );
1696                components
1697                    .extend(
1698                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1699                    );
1700                components
1701                    .push(
1702                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1703                    );
1704                components
1705                    .extend(
1706                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1707                    );
1708                components
1709                    .push(
1710                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1711                    );
1712                components
1713                    .extend(
1714                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1715                    );
1716                components
1717                    .push(
1718                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1719                    );
1720                components
1721                    .extend(
1722                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1723                    );
1724                components
1725                    .push(
1726                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1727                    );
1728                components
1729                    .extend(
1730                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1731                    );
1732                components
1733                    .push(
1734                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1735                    );
1736                components
1737                    .extend(
1738                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1739                    );
1740                components
1741                    .push(
1742                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1743                    );
1744                components
1745                    .extend(
1746                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1747                    );
1748                components
1749                    .push(
1750                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1751                    );
1752                components
1753                    .extend(
1754                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1755                    );
1756                components
1757                    .push(
1758                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1759                    );
1760                components
1761                    .extend(
1762                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1763                    );
1764                components
1765                    .push(
1766                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1767                    );
1768                components
1769                    .extend(
1770                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1771                    );
1772                components
1773                    .push(
1774                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1775                    );
1776                components
1777                    .extend(
1778                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1779                    );
1780                components
1781                    .push(
1782                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1783                    );
1784                components
1785                    .extend(
1786                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1787                    );
1788                components
1789                    .push(
1790                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1791                    );
1792                components
1793                    .extend(
1794                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1795                    );
1796                components
1797                    .push(
1798                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1799                    );
1800                components
1801                    .extend(
1802                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1803                    );
1804                components
1805                    .push(
1806                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1807                    );
1808                components
1809                    .extend(
1810                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1811                    );
1812                components
1813                    .push(
1814                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_root_type(),
1815                    );
1816                components
1817                    .extend(
1818                        <BN254::G1Point as alloy_sol_types::SolStruct>::eip712_components(),
1819                    );
1820                components
1821            }
1822            #[inline]
1823            fn eip712_encode_data(&self) -> alloy_sol_types::private::Vec<u8> {
1824                [
1825                    <alloy::sol_types::sol_data::Uint<
1826                        256,
1827                    > as alloy_sol_types::SolType>::eip712_data_word(&self.domainSize)
1828                        .0,
1829                    <alloy::sol_types::sol_data::Uint<
1830                        256,
1831                    > as alloy_sol_types::SolType>::eip712_data_word(&self.numInputs)
1832                        .0,
1833                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1834                            &self.sigma0,
1835                        )
1836                        .0,
1837                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1838                            &self.sigma1,
1839                        )
1840                        .0,
1841                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1842                            &self.sigma2,
1843                        )
1844                        .0,
1845                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1846                            &self.sigma3,
1847                        )
1848                        .0,
1849                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1850                            &self.sigma4,
1851                        )
1852                        .0,
1853                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1854                            &self.q1,
1855                        )
1856                        .0,
1857                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1858                            &self.q2,
1859                        )
1860                        .0,
1861                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1862                            &self.q3,
1863                        )
1864                        .0,
1865                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1866                            &self.q4,
1867                        )
1868                        .0,
1869                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1870                            &self.qM12,
1871                        )
1872                        .0,
1873                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1874                            &self.qM34,
1875                        )
1876                        .0,
1877                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1878                            &self.qO,
1879                        )
1880                        .0,
1881                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1882                            &self.qC,
1883                        )
1884                        .0,
1885                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1886                            &self.qH1,
1887                        )
1888                        .0,
1889                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1890                            &self.qH2,
1891                        )
1892                        .0,
1893                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1894                            &self.qH3,
1895                        )
1896                        .0,
1897                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1898                            &self.qH4,
1899                        )
1900                        .0,
1901                    <BN254::G1Point as alloy_sol_types::SolType>::eip712_data_word(
1902                            &self.qEcc,
1903                        )
1904                        .0,
1905                    <alloy::sol_types::sol_data::FixedBytes<
1906                        32,
1907                    > as alloy_sol_types::SolType>::eip712_data_word(&self.g2LSB)
1908                        .0,
1909                    <alloy::sol_types::sol_data::FixedBytes<
1910                        32,
1911                    > as alloy_sol_types::SolType>::eip712_data_word(&self.g2MSB)
1912                        .0,
1913                ]
1914                    .concat()
1915            }
1916        }
1917        #[automatically_derived]
1918        impl alloy_sol_types::EventTopic for VerifyingKey {
1919            #[inline]
1920            fn topic_preimage_length(rust: &Self::RustType) -> usize {
1921                0usize
1922                    + <alloy::sol_types::sol_data::Uint<
1923                        256,
1924                    > as alloy_sol_types::EventTopic>::topic_preimage_length(
1925                        &rust.domainSize,
1926                    )
1927                    + <alloy::sol_types::sol_data::Uint<
1928                        256,
1929                    > as alloy_sol_types::EventTopic>::topic_preimage_length(
1930                        &rust.numInputs,
1931                    )
1932                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1933                        &rust.sigma0,
1934                    )
1935                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1936                        &rust.sigma1,
1937                    )
1938                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1939                        &rust.sigma2,
1940                    )
1941                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1942                        &rust.sigma3,
1943                    )
1944                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1945                        &rust.sigma4,
1946                    )
1947                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1948                        &rust.q1,
1949                    )
1950                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1951                        &rust.q2,
1952                    )
1953                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1954                        &rust.q3,
1955                    )
1956                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1957                        &rust.q4,
1958                    )
1959                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1960                        &rust.qM12,
1961                    )
1962                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1963                        &rust.qM34,
1964                    )
1965                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1966                        &rust.qO,
1967                    )
1968                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1969                        &rust.qC,
1970                    )
1971                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1972                        &rust.qH1,
1973                    )
1974                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1975                        &rust.qH2,
1976                    )
1977                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1978                        &rust.qH3,
1979                    )
1980                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1981                        &rust.qH4,
1982                    )
1983                    + <BN254::G1Point as alloy_sol_types::EventTopic>::topic_preimage_length(
1984                        &rust.qEcc,
1985                    )
1986                    + <alloy::sol_types::sol_data::FixedBytes<
1987                        32,
1988                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.g2LSB)
1989                    + <alloy::sol_types::sol_data::FixedBytes<
1990                        32,
1991                    > as alloy_sol_types::EventTopic>::topic_preimage_length(&rust.g2MSB)
1992            }
1993            #[inline]
1994            fn encode_topic_preimage(
1995                rust: &Self::RustType,
1996                out: &mut alloy_sol_types::private::Vec<u8>,
1997            ) {
1998                out.reserve(
1999                    <Self as alloy_sol_types::EventTopic>::topic_preimage_length(rust),
2000                );
2001                <alloy::sol_types::sol_data::Uint<
2002                    256,
2003                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
2004                    &rust.domainSize,
2005                    out,
2006                );
2007                <alloy::sol_types::sol_data::Uint<
2008                    256,
2009                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
2010                    &rust.numInputs,
2011                    out,
2012                );
2013                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2014                    &rust.sigma0,
2015                    out,
2016                );
2017                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2018                    &rust.sigma1,
2019                    out,
2020                );
2021                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2022                    &rust.sigma2,
2023                    out,
2024                );
2025                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2026                    &rust.sigma3,
2027                    out,
2028                );
2029                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2030                    &rust.sigma4,
2031                    out,
2032                );
2033                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2034                    &rust.q1,
2035                    out,
2036                );
2037                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2038                    &rust.q2,
2039                    out,
2040                );
2041                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2042                    &rust.q3,
2043                    out,
2044                );
2045                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2046                    &rust.q4,
2047                    out,
2048                );
2049                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2050                    &rust.qM12,
2051                    out,
2052                );
2053                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2054                    &rust.qM34,
2055                    out,
2056                );
2057                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2058                    &rust.qO,
2059                    out,
2060                );
2061                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2062                    &rust.qC,
2063                    out,
2064                );
2065                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2066                    &rust.qH1,
2067                    out,
2068                );
2069                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2070                    &rust.qH2,
2071                    out,
2072                );
2073                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2074                    &rust.qH3,
2075                    out,
2076                );
2077                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2078                    &rust.qH4,
2079                    out,
2080                );
2081                <BN254::G1Point as alloy_sol_types::EventTopic>::encode_topic_preimage(
2082                    &rust.qEcc,
2083                    out,
2084                );
2085                <alloy::sol_types::sol_data::FixedBytes<
2086                    32,
2087                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
2088                    &rust.g2LSB,
2089                    out,
2090                );
2091                <alloy::sol_types::sol_data::FixedBytes<
2092                    32,
2093                > as alloy_sol_types::EventTopic>::encode_topic_preimage(
2094                    &rust.g2MSB,
2095                    out,
2096                );
2097            }
2098            #[inline]
2099            fn encode_topic(
2100                rust: &Self::RustType,
2101            ) -> alloy_sol_types::abi::token::WordToken {
2102                let mut out = alloy_sol_types::private::Vec::new();
2103                <Self as alloy_sol_types::EventTopic>::encode_topic_preimage(
2104                    rust,
2105                    &mut out,
2106                );
2107                alloy_sol_types::abi::token::WordToken(
2108                    alloy_sol_types::private::keccak256(out),
2109                )
2110            }
2111        }
2112    };
2113    use alloy::contract as alloy_contract;
2114    /**Creates a new wrapper around an on-chain [`IPlonkVerifier`](self) contract instance.
2115
2116See the [wrapper's documentation](`IPlonkVerifierInstance`) for more details.*/
2117    #[inline]
2118    pub const fn new<
2119        P: alloy_contract::private::Provider<N>,
2120        N: alloy_contract::private::Network,
2121    >(
2122        address: alloy_sol_types::private::Address,
2123        __provider: P,
2124    ) -> IPlonkVerifierInstance<P, N> {
2125        IPlonkVerifierInstance::<P, N>::new(address, __provider)
2126    }
2127    /**A [`IPlonkVerifier`](self) instance.
2128
2129Contains type-safe methods for interacting with an on-chain instance of the
2130[`IPlonkVerifier`](self) contract located at a given `address`, using a given
2131provider `P`.
2132
2133If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
2134documentation on how to provide it), the `deploy` and `deploy_builder` methods can
2135be used to deploy a new instance of the contract.
2136
2137See the [module-level documentation](self) for all the available methods.*/
2138    #[derive(Clone)]
2139    pub struct IPlonkVerifierInstance<P, N = alloy_contract::private::Ethereum> {
2140        address: alloy_sol_types::private::Address,
2141        provider: P,
2142        _network: ::core::marker::PhantomData<N>,
2143    }
2144    #[automatically_derived]
2145    impl<P, N> ::core::fmt::Debug for IPlonkVerifierInstance<P, N> {
2146        #[inline]
2147        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
2148            f.debug_tuple("IPlonkVerifierInstance").field(&self.address).finish()
2149        }
2150    }
2151    /// Instantiation and getters/setters.
2152    impl<
2153        P: alloy_contract::private::Provider<N>,
2154        N: alloy_contract::private::Network,
2155    > IPlonkVerifierInstance<P, N> {
2156        /**Creates a new wrapper around an on-chain [`IPlonkVerifier`](self) contract instance.
2157
2158See the [wrapper's documentation](`IPlonkVerifierInstance`) for more details.*/
2159        #[inline]
2160        pub const fn new(
2161            address: alloy_sol_types::private::Address,
2162            __provider: P,
2163        ) -> Self {
2164            Self {
2165                address,
2166                provider: __provider,
2167                _network: ::core::marker::PhantomData,
2168            }
2169        }
2170        /// Returns a reference to the address.
2171        #[inline]
2172        pub const fn address(&self) -> &alloy_sol_types::private::Address {
2173            &self.address
2174        }
2175        /// Sets the address.
2176        #[inline]
2177        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
2178            self.address = address;
2179        }
2180        /// Sets the address and returns `self`.
2181        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
2182            self.set_address(address);
2183            self
2184        }
2185        /// Returns a reference to the provider.
2186        #[inline]
2187        pub const fn provider(&self) -> &P {
2188            &self.provider
2189        }
2190    }
2191    impl<P: ::core::clone::Clone, N> IPlonkVerifierInstance<&P, N> {
2192        /// Clones the provider and returns a new instance with the cloned provider.
2193        #[inline]
2194        pub fn with_cloned_provider(self) -> IPlonkVerifierInstance<P, N> {
2195            IPlonkVerifierInstance {
2196                address: self.address,
2197                provider: ::core::clone::Clone::clone(&self.provider),
2198                _network: ::core::marker::PhantomData,
2199            }
2200        }
2201    }
2202    /// Function calls.
2203    impl<
2204        P: alloy_contract::private::Provider<N>,
2205        N: alloy_contract::private::Network,
2206    > IPlonkVerifierInstance<P, N> {
2207        /// Creates a new call builder using this contract instance's provider and address.
2208        ///
2209        /// Note that the call can be any function call, not just those defined in this
2210        /// contract. Prefer using the other methods for building type-safe contract calls.
2211        pub fn call_builder<C: alloy_sol_types::SolCall>(
2212            &self,
2213            call: &C,
2214        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
2215            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
2216        }
2217    }
2218    /// Event filters.
2219    impl<
2220        P: alloy_contract::private::Provider<N>,
2221        N: alloy_contract::private::Network,
2222    > IPlonkVerifierInstance<P, N> {
2223        /// Creates a new event filter using this contract instance's provider and address.
2224        ///
2225        /// Note that the type can be any event, not just those defined in this contract.
2226        /// Prefer using the other methods for building type-safe event filters.
2227        pub fn event_filter<E: alloy_sol_types::SolEvent>(
2228            &self,
2229        ) -> alloy_contract::Event<&P, E, N> {
2230            alloy_contract::Event::new_sol(&self.provider, &self.address)
2231        }
2232    }
2233}
2234/**
2235
2236Generated by the following Solidity interface...
2237```solidity
2238library BN254 {
2239    type BaseField is uint256;
2240    type ScalarField is uint256;
2241    struct G1Point {
2242        BaseField x;
2243        BaseField y;
2244    }
2245}
2246
2247library IPlonkVerifier {
2248    struct PlonkProof {
2249        BN254.G1Point wire0;
2250        BN254.G1Point wire1;
2251        BN254.G1Point wire2;
2252        BN254.G1Point wire3;
2253        BN254.G1Point wire4;
2254        BN254.G1Point prodPerm;
2255        BN254.G1Point split0;
2256        BN254.G1Point split1;
2257        BN254.G1Point split2;
2258        BN254.G1Point split3;
2259        BN254.G1Point split4;
2260        BN254.G1Point zeta;
2261        BN254.G1Point zetaOmega;
2262        BN254.ScalarField wireEval0;
2263        BN254.ScalarField wireEval1;
2264        BN254.ScalarField wireEval2;
2265        BN254.ScalarField wireEval3;
2266        BN254.ScalarField wireEval4;
2267        BN254.ScalarField sigmaEval0;
2268        BN254.ScalarField sigmaEval1;
2269        BN254.ScalarField sigmaEval2;
2270        BN254.ScalarField sigmaEval3;
2271        BN254.ScalarField prodPermZetaOmegaEval;
2272    }
2273    struct VerifyingKey {
2274        uint256 domainSize;
2275        uint256 numInputs;
2276        BN254.G1Point sigma0;
2277        BN254.G1Point sigma1;
2278        BN254.G1Point sigma2;
2279        BN254.G1Point sigma3;
2280        BN254.G1Point sigma4;
2281        BN254.G1Point q1;
2282        BN254.G1Point q2;
2283        BN254.G1Point q3;
2284        BN254.G1Point q4;
2285        BN254.G1Point qM12;
2286        BN254.G1Point qM34;
2287        BN254.G1Point qO;
2288        BN254.G1Point qC;
2289        BN254.G1Point qH1;
2290        BN254.G1Point qH2;
2291        BN254.G1Point qH3;
2292        BN254.G1Point qH4;
2293        BN254.G1Point qEcc;
2294        bytes32 g2LSB;
2295        bytes32 g2MSB;
2296    }
2297}
2298
2299interface PlonkVerifier {
2300    error BN254G1AddFailed();
2301    error BN254PairingProdFailed();
2302    error BN254ScalarInvZero();
2303    error BN254ScalarMulFailed();
2304    error InvalidG1();
2305    error InvalidPlonkArgs();
2306    error InvalidScalar();
2307    error PowPrecompileFailed();
2308    error UnsupportedDegree();
2309    error WrongPlonkVK();
2310
2311    function verify(IPlonkVerifier.VerifyingKey memory verifyingKey, uint256[7] memory publicInput, IPlonkVerifier.PlonkProof memory proof) external view returns (bool);
2312}
2313```
2314
2315...which was generated by the following JSON ABI:
2316```json
2317[
2318  {
2319    "type": "function",
2320    "name": "verify",
2321    "inputs": [
2322      {
2323        "name": "verifyingKey",
2324        "type": "tuple",
2325        "internalType": "struct IPlonkVerifier.VerifyingKey",
2326        "components": [
2327          {
2328            "name": "domainSize",
2329            "type": "uint256",
2330            "internalType": "uint256"
2331          },
2332          {
2333            "name": "numInputs",
2334            "type": "uint256",
2335            "internalType": "uint256"
2336          },
2337          {
2338            "name": "sigma0",
2339            "type": "tuple",
2340            "internalType": "struct BN254.G1Point",
2341            "components": [
2342              {
2343                "name": "x",
2344                "type": "uint256",
2345                "internalType": "BN254.BaseField"
2346              },
2347              {
2348                "name": "y",
2349                "type": "uint256",
2350                "internalType": "BN254.BaseField"
2351              }
2352            ]
2353          },
2354          {
2355            "name": "sigma1",
2356            "type": "tuple",
2357            "internalType": "struct BN254.G1Point",
2358            "components": [
2359              {
2360                "name": "x",
2361                "type": "uint256",
2362                "internalType": "BN254.BaseField"
2363              },
2364              {
2365                "name": "y",
2366                "type": "uint256",
2367                "internalType": "BN254.BaseField"
2368              }
2369            ]
2370          },
2371          {
2372            "name": "sigma2",
2373            "type": "tuple",
2374            "internalType": "struct BN254.G1Point",
2375            "components": [
2376              {
2377                "name": "x",
2378                "type": "uint256",
2379                "internalType": "BN254.BaseField"
2380              },
2381              {
2382                "name": "y",
2383                "type": "uint256",
2384                "internalType": "BN254.BaseField"
2385              }
2386            ]
2387          },
2388          {
2389            "name": "sigma3",
2390            "type": "tuple",
2391            "internalType": "struct BN254.G1Point",
2392            "components": [
2393              {
2394                "name": "x",
2395                "type": "uint256",
2396                "internalType": "BN254.BaseField"
2397              },
2398              {
2399                "name": "y",
2400                "type": "uint256",
2401                "internalType": "BN254.BaseField"
2402              }
2403            ]
2404          },
2405          {
2406            "name": "sigma4",
2407            "type": "tuple",
2408            "internalType": "struct BN254.G1Point",
2409            "components": [
2410              {
2411                "name": "x",
2412                "type": "uint256",
2413                "internalType": "BN254.BaseField"
2414              },
2415              {
2416                "name": "y",
2417                "type": "uint256",
2418                "internalType": "BN254.BaseField"
2419              }
2420            ]
2421          },
2422          {
2423            "name": "q1",
2424            "type": "tuple",
2425            "internalType": "struct BN254.G1Point",
2426            "components": [
2427              {
2428                "name": "x",
2429                "type": "uint256",
2430                "internalType": "BN254.BaseField"
2431              },
2432              {
2433                "name": "y",
2434                "type": "uint256",
2435                "internalType": "BN254.BaseField"
2436              }
2437            ]
2438          },
2439          {
2440            "name": "q2",
2441            "type": "tuple",
2442            "internalType": "struct BN254.G1Point",
2443            "components": [
2444              {
2445                "name": "x",
2446                "type": "uint256",
2447                "internalType": "BN254.BaseField"
2448              },
2449              {
2450                "name": "y",
2451                "type": "uint256",
2452                "internalType": "BN254.BaseField"
2453              }
2454            ]
2455          },
2456          {
2457            "name": "q3",
2458            "type": "tuple",
2459            "internalType": "struct BN254.G1Point",
2460            "components": [
2461              {
2462                "name": "x",
2463                "type": "uint256",
2464                "internalType": "BN254.BaseField"
2465              },
2466              {
2467                "name": "y",
2468                "type": "uint256",
2469                "internalType": "BN254.BaseField"
2470              }
2471            ]
2472          },
2473          {
2474            "name": "q4",
2475            "type": "tuple",
2476            "internalType": "struct BN254.G1Point",
2477            "components": [
2478              {
2479                "name": "x",
2480                "type": "uint256",
2481                "internalType": "BN254.BaseField"
2482              },
2483              {
2484                "name": "y",
2485                "type": "uint256",
2486                "internalType": "BN254.BaseField"
2487              }
2488            ]
2489          },
2490          {
2491            "name": "qM12",
2492            "type": "tuple",
2493            "internalType": "struct BN254.G1Point",
2494            "components": [
2495              {
2496                "name": "x",
2497                "type": "uint256",
2498                "internalType": "BN254.BaseField"
2499              },
2500              {
2501                "name": "y",
2502                "type": "uint256",
2503                "internalType": "BN254.BaseField"
2504              }
2505            ]
2506          },
2507          {
2508            "name": "qM34",
2509            "type": "tuple",
2510            "internalType": "struct BN254.G1Point",
2511            "components": [
2512              {
2513                "name": "x",
2514                "type": "uint256",
2515                "internalType": "BN254.BaseField"
2516              },
2517              {
2518                "name": "y",
2519                "type": "uint256",
2520                "internalType": "BN254.BaseField"
2521              }
2522            ]
2523          },
2524          {
2525            "name": "qO",
2526            "type": "tuple",
2527            "internalType": "struct BN254.G1Point",
2528            "components": [
2529              {
2530                "name": "x",
2531                "type": "uint256",
2532                "internalType": "BN254.BaseField"
2533              },
2534              {
2535                "name": "y",
2536                "type": "uint256",
2537                "internalType": "BN254.BaseField"
2538              }
2539            ]
2540          },
2541          {
2542            "name": "qC",
2543            "type": "tuple",
2544            "internalType": "struct BN254.G1Point",
2545            "components": [
2546              {
2547                "name": "x",
2548                "type": "uint256",
2549                "internalType": "BN254.BaseField"
2550              },
2551              {
2552                "name": "y",
2553                "type": "uint256",
2554                "internalType": "BN254.BaseField"
2555              }
2556            ]
2557          },
2558          {
2559            "name": "qH1",
2560            "type": "tuple",
2561            "internalType": "struct BN254.G1Point",
2562            "components": [
2563              {
2564                "name": "x",
2565                "type": "uint256",
2566                "internalType": "BN254.BaseField"
2567              },
2568              {
2569                "name": "y",
2570                "type": "uint256",
2571                "internalType": "BN254.BaseField"
2572              }
2573            ]
2574          },
2575          {
2576            "name": "qH2",
2577            "type": "tuple",
2578            "internalType": "struct BN254.G1Point",
2579            "components": [
2580              {
2581                "name": "x",
2582                "type": "uint256",
2583                "internalType": "BN254.BaseField"
2584              },
2585              {
2586                "name": "y",
2587                "type": "uint256",
2588                "internalType": "BN254.BaseField"
2589              }
2590            ]
2591          },
2592          {
2593            "name": "qH3",
2594            "type": "tuple",
2595            "internalType": "struct BN254.G1Point",
2596            "components": [
2597              {
2598                "name": "x",
2599                "type": "uint256",
2600                "internalType": "BN254.BaseField"
2601              },
2602              {
2603                "name": "y",
2604                "type": "uint256",
2605                "internalType": "BN254.BaseField"
2606              }
2607            ]
2608          },
2609          {
2610            "name": "qH4",
2611            "type": "tuple",
2612            "internalType": "struct BN254.G1Point",
2613            "components": [
2614              {
2615                "name": "x",
2616                "type": "uint256",
2617                "internalType": "BN254.BaseField"
2618              },
2619              {
2620                "name": "y",
2621                "type": "uint256",
2622                "internalType": "BN254.BaseField"
2623              }
2624            ]
2625          },
2626          {
2627            "name": "qEcc",
2628            "type": "tuple",
2629            "internalType": "struct BN254.G1Point",
2630            "components": [
2631              {
2632                "name": "x",
2633                "type": "uint256",
2634                "internalType": "BN254.BaseField"
2635              },
2636              {
2637                "name": "y",
2638                "type": "uint256",
2639                "internalType": "BN254.BaseField"
2640              }
2641            ]
2642          },
2643          {
2644            "name": "g2LSB",
2645            "type": "bytes32",
2646            "internalType": "bytes32"
2647          },
2648          {
2649            "name": "g2MSB",
2650            "type": "bytes32",
2651            "internalType": "bytes32"
2652          }
2653        ]
2654      },
2655      {
2656        "name": "publicInput",
2657        "type": "uint256[7]",
2658        "internalType": "uint256[7]"
2659      },
2660      {
2661        "name": "proof",
2662        "type": "tuple",
2663        "internalType": "struct IPlonkVerifier.PlonkProof",
2664        "components": [
2665          {
2666            "name": "wire0",
2667            "type": "tuple",
2668            "internalType": "struct BN254.G1Point",
2669            "components": [
2670              {
2671                "name": "x",
2672                "type": "uint256",
2673                "internalType": "BN254.BaseField"
2674              },
2675              {
2676                "name": "y",
2677                "type": "uint256",
2678                "internalType": "BN254.BaseField"
2679              }
2680            ]
2681          },
2682          {
2683            "name": "wire1",
2684            "type": "tuple",
2685            "internalType": "struct BN254.G1Point",
2686            "components": [
2687              {
2688                "name": "x",
2689                "type": "uint256",
2690                "internalType": "BN254.BaseField"
2691              },
2692              {
2693                "name": "y",
2694                "type": "uint256",
2695                "internalType": "BN254.BaseField"
2696              }
2697            ]
2698          },
2699          {
2700            "name": "wire2",
2701            "type": "tuple",
2702            "internalType": "struct BN254.G1Point",
2703            "components": [
2704              {
2705                "name": "x",
2706                "type": "uint256",
2707                "internalType": "BN254.BaseField"
2708              },
2709              {
2710                "name": "y",
2711                "type": "uint256",
2712                "internalType": "BN254.BaseField"
2713              }
2714            ]
2715          },
2716          {
2717            "name": "wire3",
2718            "type": "tuple",
2719            "internalType": "struct BN254.G1Point",
2720            "components": [
2721              {
2722                "name": "x",
2723                "type": "uint256",
2724                "internalType": "BN254.BaseField"
2725              },
2726              {
2727                "name": "y",
2728                "type": "uint256",
2729                "internalType": "BN254.BaseField"
2730              }
2731            ]
2732          },
2733          {
2734            "name": "wire4",
2735            "type": "tuple",
2736            "internalType": "struct BN254.G1Point",
2737            "components": [
2738              {
2739                "name": "x",
2740                "type": "uint256",
2741                "internalType": "BN254.BaseField"
2742              },
2743              {
2744                "name": "y",
2745                "type": "uint256",
2746                "internalType": "BN254.BaseField"
2747              }
2748            ]
2749          },
2750          {
2751            "name": "prodPerm",
2752            "type": "tuple",
2753            "internalType": "struct BN254.G1Point",
2754            "components": [
2755              {
2756                "name": "x",
2757                "type": "uint256",
2758                "internalType": "BN254.BaseField"
2759              },
2760              {
2761                "name": "y",
2762                "type": "uint256",
2763                "internalType": "BN254.BaseField"
2764              }
2765            ]
2766          },
2767          {
2768            "name": "split0",
2769            "type": "tuple",
2770            "internalType": "struct BN254.G1Point",
2771            "components": [
2772              {
2773                "name": "x",
2774                "type": "uint256",
2775                "internalType": "BN254.BaseField"
2776              },
2777              {
2778                "name": "y",
2779                "type": "uint256",
2780                "internalType": "BN254.BaseField"
2781              }
2782            ]
2783          },
2784          {
2785            "name": "split1",
2786            "type": "tuple",
2787            "internalType": "struct BN254.G1Point",
2788            "components": [
2789              {
2790                "name": "x",
2791                "type": "uint256",
2792                "internalType": "BN254.BaseField"
2793              },
2794              {
2795                "name": "y",
2796                "type": "uint256",
2797                "internalType": "BN254.BaseField"
2798              }
2799            ]
2800          },
2801          {
2802            "name": "split2",
2803            "type": "tuple",
2804            "internalType": "struct BN254.G1Point",
2805            "components": [
2806              {
2807                "name": "x",
2808                "type": "uint256",
2809                "internalType": "BN254.BaseField"
2810              },
2811              {
2812                "name": "y",
2813                "type": "uint256",
2814                "internalType": "BN254.BaseField"
2815              }
2816            ]
2817          },
2818          {
2819            "name": "split3",
2820            "type": "tuple",
2821            "internalType": "struct BN254.G1Point",
2822            "components": [
2823              {
2824                "name": "x",
2825                "type": "uint256",
2826                "internalType": "BN254.BaseField"
2827              },
2828              {
2829                "name": "y",
2830                "type": "uint256",
2831                "internalType": "BN254.BaseField"
2832              }
2833            ]
2834          },
2835          {
2836            "name": "split4",
2837            "type": "tuple",
2838            "internalType": "struct BN254.G1Point",
2839            "components": [
2840              {
2841                "name": "x",
2842                "type": "uint256",
2843                "internalType": "BN254.BaseField"
2844              },
2845              {
2846                "name": "y",
2847                "type": "uint256",
2848                "internalType": "BN254.BaseField"
2849              }
2850            ]
2851          },
2852          {
2853            "name": "zeta",
2854            "type": "tuple",
2855            "internalType": "struct BN254.G1Point",
2856            "components": [
2857              {
2858                "name": "x",
2859                "type": "uint256",
2860                "internalType": "BN254.BaseField"
2861              },
2862              {
2863                "name": "y",
2864                "type": "uint256",
2865                "internalType": "BN254.BaseField"
2866              }
2867            ]
2868          },
2869          {
2870            "name": "zetaOmega",
2871            "type": "tuple",
2872            "internalType": "struct BN254.G1Point",
2873            "components": [
2874              {
2875                "name": "x",
2876                "type": "uint256",
2877                "internalType": "BN254.BaseField"
2878              },
2879              {
2880                "name": "y",
2881                "type": "uint256",
2882                "internalType": "BN254.BaseField"
2883              }
2884            ]
2885          },
2886          {
2887            "name": "wireEval0",
2888            "type": "uint256",
2889            "internalType": "BN254.ScalarField"
2890          },
2891          {
2892            "name": "wireEval1",
2893            "type": "uint256",
2894            "internalType": "BN254.ScalarField"
2895          },
2896          {
2897            "name": "wireEval2",
2898            "type": "uint256",
2899            "internalType": "BN254.ScalarField"
2900          },
2901          {
2902            "name": "wireEval3",
2903            "type": "uint256",
2904            "internalType": "BN254.ScalarField"
2905          },
2906          {
2907            "name": "wireEval4",
2908            "type": "uint256",
2909            "internalType": "BN254.ScalarField"
2910          },
2911          {
2912            "name": "sigmaEval0",
2913            "type": "uint256",
2914            "internalType": "BN254.ScalarField"
2915          },
2916          {
2917            "name": "sigmaEval1",
2918            "type": "uint256",
2919            "internalType": "BN254.ScalarField"
2920          },
2921          {
2922            "name": "sigmaEval2",
2923            "type": "uint256",
2924            "internalType": "BN254.ScalarField"
2925          },
2926          {
2927            "name": "sigmaEval3",
2928            "type": "uint256",
2929            "internalType": "BN254.ScalarField"
2930          },
2931          {
2932            "name": "prodPermZetaOmegaEval",
2933            "type": "uint256",
2934            "internalType": "BN254.ScalarField"
2935          }
2936        ]
2937      }
2938    ],
2939    "outputs": [
2940      {
2941        "name": "",
2942        "type": "bool",
2943        "internalType": "bool"
2944      }
2945    ],
2946    "stateMutability": "view"
2947  },
2948  {
2949    "type": "error",
2950    "name": "BN254G1AddFailed",
2951    "inputs": []
2952  },
2953  {
2954    "type": "error",
2955    "name": "BN254PairingProdFailed",
2956    "inputs": []
2957  },
2958  {
2959    "type": "error",
2960    "name": "BN254ScalarInvZero",
2961    "inputs": []
2962  },
2963  {
2964    "type": "error",
2965    "name": "BN254ScalarMulFailed",
2966    "inputs": []
2967  },
2968  {
2969    "type": "error",
2970    "name": "InvalidG1",
2971    "inputs": []
2972  },
2973  {
2974    "type": "error",
2975    "name": "InvalidPlonkArgs",
2976    "inputs": []
2977  },
2978  {
2979    "type": "error",
2980    "name": "InvalidScalar",
2981    "inputs": []
2982  },
2983  {
2984    "type": "error",
2985    "name": "PowPrecompileFailed",
2986    "inputs": []
2987  },
2988  {
2989    "type": "error",
2990    "name": "UnsupportedDegree",
2991    "inputs": []
2992  },
2993  {
2994    "type": "error",
2995    "name": "WrongPlonkVK",
2996    "inputs": []
2997  }
2998]
2999```*/
3000#[allow(
3001    non_camel_case_types,
3002    non_snake_case,
3003    clippy::pub_underscore_fields,
3004    clippy::style,
3005    clippy::empty_structs_with_brackets
3006)]
3007pub mod PlonkVerifier {
3008    use super::*;
3009    use alloy::sol_types as alloy_sol_types;
3010    /// The creation / init bytecode of the contract.
3011    ///
3012    /// ```text
3013    ///0x61217e610034600b8282823980515f1a607314602857634e487b7160e01b5f525f60045260245ffd5b305f52607381538281f3fe7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063ce537a7714610038575b5f5ffd5b61004b610046366004611f0c565b61005f565b604051901515815260200160405180910390f35b5f610069826100d0565b610079835f5b602002015161020b565b61008483600161006f565b61008f83600261006f565b61009a83600361006f565b6100a583600461006f565b6100b083600561006f565b6100bb83600661006f565b6100c684848461023d565b90505b9392505050565b80516100db90610431565b6100e88160200151610431565b6100f58160400151610431565b6101028160600151610431565b61010f8160800151610431565b61011c8160a00151610431565b6101298160c00151610431565b6101368160e00151610431565b610144816101000151610431565b610152816101200151610431565b610160816101400151610431565b61016e816101600151610431565b61017c816101800151610431565b61018a816101a0015161020b565b610198816101c0015161020b565b6101a6816101e0015161020b565b6101b481610200015161020b565b6101c281610220015161020b565b6101d081610240015161020b565b6101de81610260015161020b565b6101ec81610280015161020b565b6101fa816102a0015161020b565b610208816102c0015161020b565b50565b5f5160206121525f395f51905f528110806102395760405163016c173360e21b815260040160405180910390fd5b5050565b5f8360200151600714610263576040516320fa9d8960e11b815260040160405180910390fd5b5f61026f8585856104b0565b90505f61027e865f0151610a10565b90505f610290828460a0015188610dee565b90506102ad60405180604001604052805f81526020015f81525090565b604080518082019091525f80825260208201526102e18761016001516102dc8961018001518860e00151610e4b565b610eae565b91505f5f6102f18b88878c610f15565b91509150610302816102dc8461114d565b925061031b836102dc8b61016001518a60a00151610e4b565b60a08801516040880151602001519194505f5160206121525f395f51905f52918290820990508160e08a01518209905061035e856102dc8d610180015184610e4b565b94505f60405180608001604052807f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b081526020017f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c181526020017f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e5581526020017f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4815250905061041f87826104128961114d565b61041a6111ea565b6112b7565b9e9d5050505050505050505050505050565b805160208201515f917f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4791159015161561046a57505050565b8251602084015182600384858586098509088382830914838210848410161693505050816104ab5760405163279e345360e21b815260040160405180910390fd5b505050565b6104f06040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f5f5160206121525f395f51905f529050604051602081015f815260fe60e01b8152865160c01b6004820152602087015160c01b600c82015261028087015160208201526102a08701516040820152600160608201527f2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a60808201527f1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb02560a08201527f2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a60c08201527f2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e88160e082015260e087015180516101008301526020810151610120830152506101008701518051610140830152602081015161016083015250610120870151805161018083015260208101516101a08301525061014087015180516101c083015260208101516101e083015250610160870151805161020083015260208101516102208301525061018087015180516102408301526020810151610260830152506101e0870151805161028083015260208101516102a08301525061020087015180516102c083015260208101516102e083015250610220870151805161030083015260208101516103208301525061024087015180516103408301526020810151610360830152506101a0870151805161038083015260208101516103a0830152506101c087015180516103c083015260208101516103e0830152506102608701518051610400830152602081015161042083015250604087015180516104408301526020810151610460830152506060870151805161048083015260208101516104a083015250608087015180516104c083015260208101516104e08301525060a0870151805161050083015260208101516105208301525060c08701518051610540830152602081015161056083015250855161058082015260208601516105a082015260408601516105c082015260608601516105e0820152608086015161060082015260a086015161062082015260c086015161064082015284518051610660830152602081015161068083015250602085015180516106a083015260208101516106c083015250604085015180516106e083015260208101516107008301525060608501518051610720830152602081015161074083015250608085015180516107608301526020810151610780830152505f82526107c08220825282825106606085015260208220825282825106608085015260a085015180518252602081015160208301525060608220808352838106855283818209848282099150806020870152508060408601525060c085015180518252602081015160208301525060e085015180516040830152602081015160608301525061010085015180516080830152602081015160a083015250610120850151805160c0830152602081015160e0830152506101408501518051610100830152602081015161012083015250610160822082528282510660a08501526101a085015181526101c085015160208201526101e085015160408201526102008501516060820152610220850151608082015261024085015160a082015261026085015160c082015261028085015160e08201526102a08501516101008201526102c0850151610120820152610160822082528282510660c08501526101608501518051825260208101516020830152506101808501518051604083015260208101516060830152505060a0812082810660e08501525050509392505050565b610a18611be9565b816201000003610b57576040518060600160405280601081526020017f30641e0e92bebef818268d663bcad6dbcfd6c0149170f6d7d350b1b1fa6c100181526020016040518060e00160405280600181526020017eeeb2cb5981ed45649abebde081dcff16c8601de4347e7dd1628ba2daac43b781526020017f2d1ba66f5941dc91017171fa69ec2bd0022a2a2d4115a009a93458fd4e26ecfb81526020017f086812a00ac43ea801669c640171203c41a496671bfbc065ac8db24d52cf31e581526020017f2d965651cdd9e4811f4e51b80ddca8a8b4a93ee17420aae6adaa01c2617c6e8581526020017f12597a56c2e438620b9041b98992ae0d4e705b780057bf7766a2767cece16e1d81526020017f02d94117cd17bcf1290fd67c01155dd40807857dff4a5a0b4dc67befa8aa34fd8152508152509050919050565b816210000003610c97576040518060600160405280601481526020017f30644b6c9c4a72169e4daa317d25f04512ae15c53b34e8f5acd8e155d0a6c10181526020016040518060e00160405280600181526020017f26125da10a0ed06327508aba06d1e303ac616632dbed349f53422da95333785781526020017f2260e724844bca5251829353968e4915305258418357473a5c1d597f613f6cbd81526020017f2087ea2cd664278608fb0ebdb820907f598502c81b6690c185e2bf15cb935f4281526020017f19ddbcaf3a8d46c15c0176fbb5b95e4dc57088ff13f4d1bd84c6bfa57dcdc0e081526020017f05a2c85cfc591789605cae818e37dd4161eef9aa666bec6fe4288d09e6d2341881526020017f11f70e5363258ff4f0d716a653e1dc41f1c64484d7f4b6e219d6377614a3905c8152508152509050919050565b81602003610dd5576040518060600160405280600581526020017f2ee12bff4a2813286a8dc388cd754d9a3ef2490635eba50cb9c2e5e75080000181526020016040518060e00160405280600181526020017f09c532c6306b93d29678200d47c0b2a99c18d51b838eeb1d3eed4c533bb512d081526020017f21082ca216cbbf4e1c6e4f4594dd508c996dfbe1174efb98b11509c6e306460b81526020017f1277ae6415f0ef18f2ba5fb162c39eb7311f386e2d26d64401f4a25da77c253b81526020017f2b337de1c8c14f22ec9b9e2f96afef3652627366f8170a0a948dad4ac1bd5e8081526020017f2fbd4dd2976be55d1a163aa9820fb88dfac5ddce77e1872e90632027327a5ebe81526020017f107aab49e65a67f9da9cd2abf78be38bd9dc1d5db39f81de36bcfa5b4b0390438152508152509050919050565b60405163e2ef09e560e01b815260040160405180910390fd5b610e0f60405180606001604052805f81526020015f81526020015f81525090565b610e198484611368565b808252610e2990859085906113b9565b60208201528051610e3f90859084908690611428565b60408201529392505050565b604080518082019091525f8082526020820152610e66611c0d565b835181526020808501519082015260408082018490525f908360608460075afa905080610ea65760405163033b714d60e31b815260040160405180910390fd5b505092915050565b604080518082019091525f8082526020820152610ec9611c2b565b835181526020808501518183015283516040808401919091529084015160608301525f908360808460065afa905080610ea65760405163302aedb560e11b815260040160405180910390fd5b604080518082019091525f8082526020820152604080518082019091525f80825260208201525f610f4887878787611576565b90505f5160206121525f395f51905f525f610f64888789611a40565b9050610f7081836120f9565b60c08901516101a088015191925090819084908190830984089250610f9c856102dc8a5f015184610e4b565b955083828209905083846101c08a0151830984089250610fc4866102dc8a6020015184610e4b565b955083828209905083846101e08a0151830984089250610fec866102dc8a6040015184610e4b565b955083828209905083846102008a0151830984089250611014866102dc8a6060015184610e4b565b955083828209905083846102208a015183098408925061103c866102dc8a6080015184610e4b565b955083828209905083846102408a0151830984089250611064866102dc8d6040015184610e4b565b955083828209905083846102608a015183098408925061108c866102dc8d6060015184610e4b565b955083828209905083846102808a01518309840892506110b4866102dc8d6080015184610e4b565b955083828209905083846102a08a01518309840892506110dc866102dc8d60a0015184610e4b565b95505f8a60e00151905084856102c08b0151830985089350611106876102dc8b60a0015184610e4b565b965061113c6111366040805180820182525f80825260209182015281518083019092526001825260029082015290565b85610e4b565b975050505050505094509492505050565b604080518082019091525f8082526020820152815160208301511590151615611174575090565b6040518060400160405280835f015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516111b89190612132565b6111e2907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476120f9565b905292915050565b61121160405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b5f5f5f6040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e0820152602085015161010082015284516101208201526060850151610140820152604085015161016082015260205f6101808360085afa9150505f5191508061135a5760405163c206334f60e01b815260040160405180910390fd5b50151590505b949350505050565b81515f905f5160206121525f395f51905f52908380156113a9578493505f5b8281101561139d57838586099450600101611387565b506001840393506113b0565b6001830393505b50505092915050565b5f826001036113ca575060016100c9565b815f036113d857505f6100c9565b60208401515f5160206121525f395f51905f52905f908281860990508580156114065760018703925061140d565b6001840392505b5061141782611b2b565b915082828209979650505050505050565b5f5f5160206121525f395f51905f528282036114a15760015f5b60078110156114965781860361147357868160078110611464576114646120e5565b60200201519350505050611360565b82806114815761148161211e565b60408901516020015183099150600101611442565b505f92505050611360565b6114a9611c49565b6040870151600160c0838101828152920190805b60078110156114ea5760208403935085868a85518903088309808552601f199093019291506001016114bd565b505050505f5f5f90506001838960408c01515f5b600781101561153e578882518a85518c88518a0909098981880896505088898d84518c0308860994506020938401939283019291909101906001016114fe565b50505050809250505f61155083611b2b565b905060208a015185818909965050848187099550848287099a9950505050505050505050565b604080518082019091525f80825260208201525f5f5f5f5f5f5160206121525f395f51905f52905060808901518160208a015160208c0151099550895194508160a08b015160608c0151099350816101a089015185089250818184089250818584099450817f2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a85099250816101c089015184089250818184089250818584099450817f1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb02585099250816101e089015184089250818184089250818584099450817f2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a850992508161020089015184089250818184089250818584099450817f2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e881850992508161022089015184089250818184089250508084830993508084860894506116e38760a0015186610e4b565b9550885160608a015160808b0151838284099750836102c08b015189099750836102408b015183099550836101a08b015187089550838187089550838689099750836102608b015183099550836101c08b015187089550838187089550838689099750836102808b015183099550836101e08b015187089550838187089550838689099750836102a08b015183099550836102008b0151870895508381870895505050508083860994506117aa866102dc8c60c0015188856117a591906120f9565b610e4b565b95506117c3866102dc8c60e001518a6101a00151610e4b565b95506117dd866102dc8c61010001518a6101c00151610e4b565b95506117f7866102dc8c61012001518a6101e00151610e4b565b9550611811866102dc8c61014001518a6102000151610e4b565b9550806101c08801516101a0890151099250611836866102dc8c610160015186610e4b565b9550806102008801516101e089015109925061185b866102dc8c610180015186610e4b565b95506101a0870151925080838409915080828309915080828409925061188a866102dc8c6101e0015186610e4b565b95506101c087015192508083840991508082830991508082840992506118b9866102dc8c610200015186610e4b565b95506101e087015192508083840991508082830991508082840992506118e8866102dc8c610220015186610e4b565b95506102008701519250808384099150808283099150808284099250611917866102dc8c610240015186610e4b565b9550611934866102dc8c6101a001516117a58b6102200151611bbd565b9550611945868b6101c00151610eae565b9550806101c08801516101a0890151099250806101e0880151840992508061020088015184099250806102208801518409925061198b866102dc8c610260015186610e4b565b9550611999885f0151611bbd565b94506119ad866102dc8960c0015188610e4b565b955080600189510860a08a01519093508190800991508082840992508083860994506119e1866102dc8960e0015188610e4b565b95508083860994506119fc866102dc89610100015188610e4b565b9550808386099450611a17866102dc89610120015188610e4b565b9550808386099450611a32866102dc89610140015188610e4b565b9a9950505050505050505050565b5f5f5f5160206121525f395f51905f5290505f836020015190505f846040015190505f60019050606088015160808901516101a08901516102408a01518788898387098a868608088609945050506101c08901516102608a01518788898387098a868608088609945050506101e08901516102808a01518788898387098a868608088609945050506102008901516102a08a01518788898387098a8686080886099450505061022089015191506102c0890151868782898587080985099350505050875160208901518586868309870385089650508485838309860387089998505050505050505050565b5f815f03611b4c5760405163d6dbbb0d60e01b815260040160405180910390fd5b5f5f5f5160206121525f395f51905f52905060405160208152602080820152602060408201528460608201526002820360808201528160a082015260205f60c08360055afa9250505f51925081611bb657604051630c9d3e9960e21b815260040160405180910390fd5b5050919050565b5f5f5160206121525f395f51905f52821560018114611be0578382039250611bb6565b505f9392505050565b60405180606001604052805f81526020015f8152602001611c08611c49565b905290565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060e001604052806007906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b6040516102e0810167ffffffffffffffff81118282101715611c9f57611c9f611c67565b60405290565b6040516102c0810167ffffffffffffffff81118282101715611c9f57611c9f611c67565b5f60408284031215611cd9575f5ffd5b6040805190810167ffffffffffffffff81118282101715611cfc57611cfc611c67565b604052823581526020928301359281019290925250919050565b5f82601f830112611d25575f5ffd5b60405160e0810167ffffffffffffffff81118282101715611d4857611d48611c67565b6040528060e0840185811115611d5c575f5ffd5b845b81811015611d76578035835260209283019201611d5e565b509195945050505050565b5f6104808284031215611d92575f5ffd5b611d9a611c7b565b9050611da68383611cc9565b8152611db58360408401611cc9565b6020820152611dc78360808401611cc9565b6040820152611dd98360c08401611cc9565b6060820152611dec836101008401611cc9565b6080820152611dff836101408401611cc9565b60a0820152611e12836101808401611cc9565b60c0820152611e25836101c08401611cc9565b60e0820152611e38836102008401611cc9565b610100820152611e4c836102408401611cc9565b610120820152611e60836102808401611cc9565b610140820152611e74836102c08401611cc9565b610160820152611e88836103008401611cc9565b6101808201526103408201356101a08201526103608201356101c08201526103808201356101e08201526103a08201356102008201526103c08201356102208201526103e08201356102408201526104008201356102608201526104208201356102808201526104408201356102a0820152610460909101356102c0820152919050565b5f5f5f838503610a60811215611f20575f5ffd5b610500811215611f2e575f5ffd5b50611f37611ca5565b8435815260208086013590820152611f528660408701611cc9565b6040820152611f648660808701611cc9565b6060820152611f768660c08701611cc9565b6080820152611f89866101008701611cc9565b60a0820152611f9c866101408701611cc9565b60c0820152611faf866101808701611cc9565b60e0820152611fc2866101c08701611cc9565b610100820152611fd6866102008701611cc9565b610120820152611fea866102408701611cc9565b610140820152611ffe866102808701611cc9565b610160820152612012866102c08701611cc9565b610180820152612026866103008701611cc9565b6101a082015261203a866103408701611cc9565b6101c082015261204e866103808701611cc9565b6101e0820152612062866103c08701611cc9565b610200820152612076866104008701611cc9565b61022082015261208a866104408701611cc9565b61024082015261209e866104808701611cc9565b6102608201526104c08501356102808201526104e08501356102a082015292506120cc856105008601611d16565b91506120dc856105e08601611d81565b90509250925092565b634e487b7160e01b5f52603260045260245ffd5b8181038181111561211857634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52601260045260245ffd5b5f8261214c57634e487b7160e01b5f52601260045260245ffd5b50069056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a164736f6c6343000823000a
3014    /// ```
3015    #[rustfmt::skip]
3016    #[allow(clippy::all)]
3017    pub static BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
3018        b"a!~a\x004`\x0B\x82\x82\x829\x80Q_\x1A`s\x14`(WcNH{q`\xE0\x1B_R_`\x04R`$_\xFD[0_R`s\x81S\x82\x81\xF3\xFEs\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\x046\x10a\x004W_5`\xE0\x1C\x80c\xCESzw\x14a\08W[__\xFD[a\0Ka\0F6`\x04a\x1F\x0CV[a\0_V[`@Q\x90\x15\x15\x81R` \x01`@Q\x80\x91\x03\x90\xF3[_a\0i\x82a\0\xD0V[a\0y\x83_[` \x02\x01Qa\x02\x0BV[a\0\x84\x83`\x01a\0oV[a\0\x8F\x83`\x02a\0oV[a\0\x9A\x83`\x03a\0oV[a\0\xA5\x83`\x04a\0oV[a\0\xB0\x83`\x05a\0oV[a\0\xBB\x83`\x06a\0oV[a\0\xC6\x84\x84\x84a\x02=V[\x90P[\x93\x92PPPV[\x80Qa\0\xDB\x90a\x041V[a\0\xE8\x81` \x01Qa\x041V[a\0\xF5\x81`@\x01Qa\x041V[a\x01\x02\x81``\x01Qa\x041V[a\x01\x0F\x81`\x80\x01Qa\x041V[a\x01\x1C\x81`\xA0\x01Qa\x041V[a\x01)\x81`\xC0\x01Qa\x041V[a\x016\x81`\xE0\x01Qa\x041V[a\x01D\x81a\x01\0\x01Qa\x041V[a\x01R\x81a\x01 \x01Qa\x041V[a\x01`\x81a\x01@\x01Qa\x041V[a\x01n\x81a\x01`\x01Qa\x041V[a\x01|\x81a\x01\x80\x01Qa\x041V[a\x01\x8A\x81a\x01\xA0\x01Qa\x02\x0BV[a\x01\x98\x81a\x01\xC0\x01Qa\x02\x0BV[a\x01\xA6\x81a\x01\xE0\x01Qa\x02\x0BV[a\x01\xB4\x81a\x02\0\x01Qa\x02\x0BV[a\x01\xC2\x81a\x02 \x01Qa\x02\x0BV[a\x01\xD0\x81a\x02@\x01Qa\x02\x0BV[a\x01\xDE\x81a\x02`\x01Qa\x02\x0BV[a\x01\xEC\x81a\x02\x80\x01Qa\x02\x0BV[a\x01\xFA\x81a\x02\xA0\x01Qa\x02\x0BV[a\x02\x08\x81a\x02\xC0\x01Qa\x02\x0BV[PV[_Q` a!R_9_Q\x90_R\x81\x10\x80a\x029W`@Qc\x01l\x173`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPV[_\x83` \x01Q`\x07\x14a\x02cW`@Qc \xFA\x9D\x89`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_a\x02o\x85\x85\x85a\x04\xB0V[\x90P_a\x02~\x86_\x01Qa\n\x10V[\x90P_a\x02\x90\x82\x84`\xA0\x01Q\x88a\r\xEEV[\x90Pa\x02\xAD`@Q\x80`@\x01`@R\x80_\x81R` \x01_\x81RP\x90V[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x02\xE1\x87a\x01`\x01Qa\x02\xDC\x89a\x01\x80\x01Q\x88`\xE0\x01Qa\x0EKV[a\x0E\xAEV[\x91P__a\x02\xF1\x8B\x88\x87\x8Ca\x0F\x15V[\x91P\x91Pa\x03\x02\x81a\x02\xDC\x84a\x11MV[\x92Pa\x03\x1B\x83a\x02\xDC\x8Ba\x01`\x01Q\x8A`\xA0\x01Qa\x0EKV[`\xA0\x88\x01Q`@\x88\x01Q` \x01Q\x91\x94P_Q` a!R_9_Q\x90_R\x91\x82\x90\x82\t\x90P\x81`\xE0\x8A\x01Q\x82\t\x90Pa\x03^\x85a\x02\xDC\x8Da\x01\x80\x01Q\x84a\x0EKV[\x94P_`@Q\x80`\x80\x01`@R\x80\x7F\x01\x18\xC4\xD5\xB87\xBC\xC2\xBC\x89\xB5\xB3\x98\xB5\x97N\x9FYD\x07;2\x07\x8B~#\x1F\xEC\x93\x88\x83\xB0\x81R` \x01\x7F&\x0E\x01\xB2Q\xF6\xF1\xC7\xE7\xFFNX\x07\x91\xDE\xE8\xEAQ\xD8z5\x8E\x03\x8BN\xFE0\xFA\xC0\x93\x83\xC1\x81R` \x01\x7F\"\xFE\xBD\xA3\xC0\xC0c*VG[B\x14\xE5a^\x11\xE6\xDD?\x96\xE6\xCE\xA2\x85J\x87\xD4\xDA\xCC^U\x81R` \x01\x7F\x04\xFCci\xF7\x11\x0F\xE3\xD2QV\xC1\xBB\x9Ar\x85\x9C\xF2\xA0FA\xF9\x9B\xA4\xEEA<\x80\xDAj_\xE4\x81RP\x90Pa\x04\x1F\x87\x82a\x04\x12\x89a\x11MV[a\x04\x1Aa\x11\xEAV[a\x12\xB7V[\x9E\x9DPPPPPPPPPPPPPPV[\x80Q` \x82\x01Q_\x91\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\x91\x15\x90\x15\x16\x15a\x04jWPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x04\xABW`@Qc'\x9E4S`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPV[a\x04\xF0`@Q\x80a\x01\0\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[__Q` a!R_9_Q\x90_R\x90P`@Q` \x81\x01_\x81R`\xFE`\xE0\x1B\x81R\x86Q`\xC0\x1B`\x04\x82\x01R` \x87\x01Q`\xC0\x1B`\x0C\x82\x01Ra\x02\x80\x87\x01Q` \x82\x01Ra\x02\xA0\x87\x01Q`@\x82\x01R`\x01``\x82\x01R\x7F/\x8D\xD1\xF1\xA7X<B\xC4\xE1*D\xE1\x10@Ls\xCAl\x94\x81?\x85\x83]\xA4\xFB{\xB10\x1DJ`\x80\x82\x01R\x7F\x1E\xE6x\xA0G\nu\xA6\xEA\xA8\xFE\x83p`I\x8B\xA8(\xA3p;1\x1D\x0Fw\xF0\x10BJ\xFE\xB0%`\xA0\x82\x01R\x7F B\xA5\x87\xA9\x0C\x18{\n\x08|\x03\xE2\x9C\x96\x8B\x95\x0B\x1D\xB2m\\\x82\xD6f\x90Zh\x95y\x0C\n`\xC0\x82\x01R\x7F.+\x91Ea\x03i\x8A\xDFW\xB7\x99\x96\x9D\xEA\x1C\x8Fs\x9D\xA5\xD8\xD4\r\xD3\xEB\x92\"\xDB|\x81\xE8\x81`\xE0\x82\x01R`\xE0\x87\x01Q\x80Qa\x01\0\x83\x01R` \x81\x01Qa\x01 \x83\x01RPa\x01\0\x87\x01Q\x80Qa\x01@\x83\x01R` \x81\x01Qa\x01`\x83\x01RPa\x01 \x87\x01Q\x80Qa\x01\x80\x83\x01R` \x81\x01Qa\x01\xA0\x83\x01RPa\x01@\x87\x01Q\x80Qa\x01\xC0\x83\x01R` \x81\x01Qa\x01\xE0\x83\x01RPa\x01`\x87\x01Q\x80Qa\x02\0\x83\x01R` \x81\x01Qa\x02 \x83\x01RPa\x01\x80\x87\x01Q\x80Qa\x02@\x83\x01R` \x81\x01Qa\x02`\x83\x01RPa\x01\xE0\x87\x01Q\x80Qa\x02\x80\x83\x01R` \x81\x01Qa\x02\xA0\x83\x01RPa\x02\0\x87\x01Q\x80Qa\x02\xC0\x83\x01R` \x81\x01Qa\x02\xE0\x83\x01RPa\x02 \x87\x01Q\x80Qa\x03\0\x83\x01R` \x81\x01Qa\x03 \x83\x01RPa\x02@\x87\x01Q\x80Qa\x03@\x83\x01R` \x81\x01Qa\x03`\x83\x01RPa\x01\xA0\x87\x01Q\x80Qa\x03\x80\x83\x01R` \x81\x01Qa\x03\xA0\x83\x01RPa\x01\xC0\x87\x01Q\x80Qa\x03\xC0\x83\x01R` \x81\x01Qa\x03\xE0\x83\x01RPa\x02`\x87\x01Q\x80Qa\x04\0\x83\x01R` \x81\x01Qa\x04 \x83\x01RP`@\x87\x01Q\x80Qa\x04@\x83\x01R` \x81\x01Qa\x04`\x83\x01RP``\x87\x01Q\x80Qa\x04\x80\x83\x01R` \x81\x01Qa\x04\xA0\x83\x01RP`\x80\x87\x01Q\x80Qa\x04\xC0\x83\x01R` \x81\x01Qa\x04\xE0\x83\x01RP`\xA0\x87\x01Q\x80Qa\x05\0\x83\x01R` \x81\x01Qa\x05 \x83\x01RP`\xC0\x87\x01Q\x80Qa\x05@\x83\x01R` \x81\x01Qa\x05`\x83\x01RP\x85Qa\x05\x80\x82\x01R` \x86\x01Qa\x05\xA0\x82\x01R`@\x86\x01Qa\x05\xC0\x82\x01R``\x86\x01Qa\x05\xE0\x82\x01R`\x80\x86\x01Qa\x06\0\x82\x01R`\xA0\x86\x01Qa\x06 \x82\x01R`\xC0\x86\x01Qa\x06@\x82\x01R\x84Q\x80Qa\x06`\x83\x01R` \x81\x01Qa\x06\x80\x83\x01RP` \x85\x01Q\x80Qa\x06\xA0\x83\x01R` \x81\x01Qa\x06\xC0\x83\x01RP`@\x85\x01Q\x80Qa\x06\xE0\x83\x01R` \x81\x01Qa\x07\0\x83\x01RP``\x85\x01Q\x80Qa\x07 \x83\x01R` \x81\x01Qa\x07@\x83\x01RP`\x80\x85\x01Q\x80Qa\x07`\x83\x01R` \x81\x01Qa\x07\x80\x83\x01RP_\x82Ra\x07\xC0\x82 \x82R\x82\x82Q\x06``\x85\x01R` \x82 \x82R\x82\x82Q\x06`\x80\x85\x01R`\xA0\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RP``\x82 \x80\x83R\x83\x81\x06\x85R\x83\x81\x82\t\x84\x82\x82\t\x91P\x80` \x87\x01RP\x80`@\x86\x01RP`\xC0\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RP`\xE0\x85\x01Q\x80Q`@\x83\x01R` \x81\x01Q``\x83\x01RPa\x01\0\x85\x01Q\x80Q`\x80\x83\x01R` \x81\x01Q`\xA0\x83\x01RPa\x01 \x85\x01Q\x80Q`\xC0\x83\x01R` \x81\x01Q`\xE0\x83\x01RPa\x01@\x85\x01Q\x80Qa\x01\0\x83\x01R` \x81\x01Qa\x01 \x83\x01RPa\x01`\x82 \x82R\x82\x82Q\x06`\xA0\x85\x01Ra\x01\xA0\x85\x01Q\x81Ra\x01\xC0\x85\x01Q` \x82\x01Ra\x01\xE0\x85\x01Q`@\x82\x01Ra\x02\0\x85\x01Q``\x82\x01Ra\x02 \x85\x01Q`\x80\x82\x01Ra\x02@\x85\x01Q`\xA0\x82\x01Ra\x02`\x85\x01Q`\xC0\x82\x01Ra\x02\x80\x85\x01Q`\xE0\x82\x01Ra\x02\xA0\x85\x01Qa\x01\0\x82\x01Ra\x02\xC0\x85\x01Qa\x01 \x82\x01Ra\x01`\x82 \x82R\x82\x82Q\x06`\xC0\x85\x01Ra\x01`\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RPa\x01\x80\x85\x01Q\x80Q`@\x83\x01R` \x81\x01Q``\x83\x01RPP`\xA0\x81 \x82\x81\x06`\xE0\x85\x01RPPP\x93\x92PPPV[a\n\x18a\x1B\xE9V[\x81b\x01\0\0\x03a\x0BWW`@Q\x80``\x01`@R\x80`\x10\x81R` \x01\x7F0d\x1E\x0E\x92\xBE\xBE\xF8\x18&\x8Df;\xCA\xD6\xDB\xCF\xD6\xC0\x14\x91p\xF6\xD7\xD3P\xB1\xB1\xFAl\x10\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01~\xEE\xB2\xCBY\x81\xEDEd\x9A\xBE\xBD\xE0\x81\xDC\xFF\x16\xC8`\x1D\xE44~}\xD1b\x8B\xA2\xDA\xACC\xB7\x81R` \x01\x7F-\x1B\xA6oYA\xDC\x91\x01qq\xFAi\xEC+\xD0\x02**-A\x15\xA0\t\xA94X\xFDN&\xEC\xFB\x81R` \x01\x7F\x08h\x12\xA0\n\xC4>\xA8\x01f\x9Cd\x01q <A\xA4\x96g\x1B\xFB\xC0e\xAC\x8D\xB2MR\xCF1\xE5\x81R` \x01\x7F-\x96VQ\xCD\xD9\xE4\x81\x1FNQ\xB8\r\xDC\xA8\xA8\xB4\xA9>\xE1t \xAA\xE6\xAD\xAA\x01\xC2a|n\x85\x81R` \x01\x7F\x12YzV\xC2\xE48b\x0B\x90A\xB9\x89\x92\xAE\rNp[x\0W\xBFwf\xA2v|\xEC\xE1n\x1D\x81R` \x01\x7F\x02\xD9A\x17\xCD\x17\xBC\xF1)\x0F\xD6|\x01\x15]\xD4\x08\x07\x85}\xFFJZ\x0BM\xC6{\xEF\xA8\xAA4\xFD\x81RP\x81RP\x90P\x91\x90PV[\x81b\x10\0\0\x03a\x0C\x97W`@Q\x80``\x01`@R\x80`\x14\x81R` \x01\x7F0dKl\x9CJr\x16\x9EM\xAA1}%\xF0E\x12\xAE\x15\xC5;4\xE8\xF5\xAC\xD8\xE1U\xD0\xA6\xC1\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01\x7F&\x12]\xA1\n\x0E\xD0c'P\x8A\xBA\x06\xD1\xE3\x03\xACaf2\xDB\xED4\x9FSB-\xA9S3xW\x81R` \x01\x7F\"`\xE7$\x84K\xCARQ\x82\x93S\x96\x8EI\x150RXA\x83WG:\\\x1DY\x7Fa?l\xBD\x81R` \x01\x7F \x87\xEA,\xD6d'\x86\x08\xFB\x0E\xBD\xB8 \x90\x7FY\x85\x02\xC8\x1Bf\x90\xC1\x85\xE2\xBF\x15\xCB\x93_B\x81R` \x01\x7F\x19\xDD\xBC\xAF:\x8DF\xC1\\\x01v\xFB\xB5\xB9^M\xC5p\x88\xFF\x13\xF4\xD1\xBD\x84\xC6\xBF\xA5}\xCD\xC0\xE0\x81R` \x01\x7F\x05\xA2\xC8\\\xFCY\x17\x89`\\\xAE\x81\x8E7\xDDAa\xEE\xF9\xAAfk\xECo\xE4(\x8D\t\xE6\xD24\x18\x81R` \x01\x7F\x11\xF7\x0ESc%\x8F\xF4\xF0\xD7\x16\xA6S\xE1\xDCA\xF1\xC6D\x84\xD7\xF4\xB6\xE2\x19\xD67v\x14\xA3\x90\\\x81RP\x81RP\x90P\x91\x90PV[\x81` \x03a\r\xD5W`@Q\x80``\x01`@R\x80`\x05\x81R` \x01\x7F.\xE1+\xFFJ(\x13(j\x8D\xC3\x88\xCDuM\x9A>\xF2I\x065\xEB\xA5\x0C\xB9\xC2\xE5\xE7P\x80\0\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01\x7F\t\xC52\xC60k\x93\xD2\x96x \rG\xC0\xB2\xA9\x9C\x18\xD5\x1B\x83\x8E\xEB\x1D>\xEDLS;\xB5\x12\xD0\x81R` \x01\x7F!\x08,\xA2\x16\xCB\xBFN\x1CnOE\x94\xDDP\x8C\x99m\xFB\xE1\x17N\xFB\x98\xB1\x15\t\xC6\xE3\x06F\x0B\x81R` \x01\x7F\x12w\xAEd\x15\xF0\xEF\x18\xF2\xBA_\xB1b\xC3\x9E\xB71\x1F8n-&\xD6D\x01\xF4\xA2]\xA7|%;\x81R` \x01\x7F+3}\xE1\xC8\xC1O\"\xEC\x9B\x9E/\x96\xAF\xEF6Rbsf\xF8\x17\n\n\x94\x8D\xADJ\xC1\xBD^\x80\x81R` \x01\x7F/\xBDM\xD2\x97k\xE5]\x1A\x16:\xA9\x82\x0F\xB8\x8D\xFA\xC5\xDD\xCEw\xE1\x87.\x90c '2z^\xBE\x81R` \x01\x7F\x10z\xABI\xE6Zg\xF9\xDA\x9C\xD2\xAB\xF7\x8B\xE3\x8B\xD9\xDC\x1D]\xB3\x9F\x81\xDE6\xBC\xFA[K\x03\x90C\x81RP\x81RP\x90P\x91\x90PV[`@Qc\xE2\xEF\t\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0E\x0F`@Q\x80``\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81RP\x90V[a\x0E\x19\x84\x84a\x13hV[\x80\x82Ra\x0E)\x90\x85\x90\x85\x90a\x13\xB9V[` \x82\x01R\x80Qa\x0E?\x90\x85\x90\x84\x90\x86\x90a\x14(V[`@\x82\x01R\x93\x92PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x0Efa\x1C\rV[\x83Q\x81R` \x80\x85\x01Q\x90\x82\x01R`@\x80\x82\x01\x84\x90R_\x90\x83``\x84`\x07Z\xFA\x90P\x80a\x0E\xA6W`@Qc\x03;qM`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PP\x92\x91PPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x0E\xC9a\x1C+V[\x83Q\x81R` \x80\x85\x01Q\x81\x83\x01R\x83Q`@\x80\x84\x01\x91\x90\x91R\x90\x84\x01Q``\x83\x01R_\x90\x83`\x80\x84`\x06Z\xFA\x90P\x80a\x0E\xA6W`@Qc0*\xED\xB5`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R_a\x0FH\x87\x87\x87\x87a\x15vV[\x90P_Q` a!R_9_Q\x90_R_a\x0Fd\x88\x87\x89a\x1A@V[\x90Pa\x0Fp\x81\x83a \xF9V[`\xC0\x89\x01Qa\x01\xA0\x88\x01Q\x91\x92P\x90\x81\x90\x84\x90\x81\x90\x83\t\x84\x08\x92Pa\x0F\x9C\x85a\x02\xDC\x8A_\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x01\xC0\x8A\x01Q\x83\t\x84\x08\x92Pa\x0F\xC4\x86a\x02\xDC\x8A` \x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x01\xE0\x8A\x01Q\x83\t\x84\x08\x92Pa\x0F\xEC\x86a\x02\xDC\x8A`@\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\x14\x86a\x02\xDC\x8A``\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02 \x8A\x01Q\x83\t\x84\x08\x92Pa\x10<\x86a\x02\xDC\x8A`\x80\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02@\x8A\x01Q\x83\t\x84\x08\x92Pa\x10d\x86a\x02\xDC\x8D`@\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02`\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\x8C\x86a\x02\xDC\x8D``\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\x80\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xB4\x86a\x02\xDC\x8D`\x80\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\xA0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xDC\x86a\x02\xDC\x8D`\xA0\x01Q\x84a\x0EKV[\x95P_\x8A`\xE0\x01Q\x90P\x84\x85a\x02\xC0\x8B\x01Q\x83\t\x85\x08\x93Pa\x11\x06\x87a\x02\xDC\x8B`\xA0\x01Q\x84a\x0EKV[\x96Pa\x11<a\x116`@\x80Q\x80\x82\x01\x82R_\x80\x82R` \x91\x82\x01R\x81Q\x80\x83\x01\x90\x92R`\x01\x82R`\x02\x90\x82\x01R\x90V[\x85a\x0EKV[\x97PPPPPPP\x94P\x94\x92PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x11tWP\x90V[`@Q\x80`@\x01`@R\x80\x83_\x01Q\x81R` \x01\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\x84` \x01Qa\x11\xB8\x91\x90a!2V[a\x11\xE2\x90\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDGa \xF9V[\x90R\x92\x91PPV[a\x12\x11`@Q\x80`\x80\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[___`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` _a\x01\x80\x83`\x08Z\xFA\x91PP_Q\x91P\x80a\x13ZW`@Qc\xC2\x063O`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[P\x15\x15\x90P[\x94\x93PPPPV[\x81Q_\x90_Q` a!R_9_Q\x90_R\x90\x83\x80\x15a\x13\xA9W\x84\x93P_[\x82\x81\x10\x15a\x13\x9DW\x83\x85\x86\t\x94P`\x01\x01a\x13\x87V[P`\x01\x84\x03\x93Pa\x13\xB0V[`\x01\x83\x03\x93P[PPP\x92\x91PPV[_\x82`\x01\x03a\x13\xCAWP`\x01a\0\xC9V[\x81_\x03a\x13\xD8WP_a\0\xC9V[` \x84\x01Q_Q` a!R_9_Q\x90_R\x90_\x90\x82\x81\x86\t\x90P\x85\x80\x15a\x14\x06W`\x01\x87\x03\x92Pa\x14\rV[`\x01\x84\x03\x92P[Pa\x14\x17\x82a\x1B+V[\x91P\x82\x82\x82\t\x97\x96PPPPPPPV[__Q` a!R_9_Q\x90_R\x82\x82\x03a\x14\xA1W`\x01_[`\x07\x81\x10\x15a\x14\x96W\x81\x86\x03a\x14sW\x86\x81`\x07\x81\x10a\x14dWa\x14da \xE5V[` \x02\x01Q\x93PPPPa\x13`V[\x82\x80a\x14\x81Wa\x14\x81a!\x1EV[`@\x89\x01Q` \x01Q\x83\t\x91P`\x01\x01a\x14BV[P_\x92PPPa\x13`V[a\x14\xA9a\x1CIV[`@\x87\x01Q`\x01`\xC0\x83\x81\x01\x82\x81R\x92\x01\x90\x80[`\x07\x81\x10\x15a\x14\xEAW` \x84\x03\x93P\x85\x86\x8A\x85Q\x89\x03\x08\x83\t\x80\x85R`\x1F\x19\x90\x93\x01\x92\x91P`\x01\x01a\x14\xBDV[PPPP___\x90P`\x01\x83\x89`@\x8C\x01Q_[`\x07\x81\x10\x15a\x15>W\x88\x82Q\x8A\x85Q\x8C\x88Q\x8A\t\t\t\x89\x81\x88\x08\x96PP\x88\x89\x8D\x84Q\x8C\x03\x08\x86\t\x94P` \x93\x84\x01\x93\x92\x83\x01\x92\x91\x90\x91\x01\x90`\x01\x01a\x14\xFEV[PPPP\x80\x92PP_a\x15P\x83a\x1B+V[\x90P` \x8A\x01Q\x85\x81\x89\t\x96PP\x84\x81\x87\t\x95P\x84\x82\x87\t\x9A\x99PPPPPPPPPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R______Q` a!R_9_Q\x90_R\x90P`\x80\x89\x01Q\x81` \x8A\x01Q` \x8C\x01Q\t\x95P\x89Q\x94P\x81`\xA0\x8B\x01Q``\x8C\x01Q\t\x93P\x81a\x01\xA0\x89\x01Q\x85\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F/\x8D\xD1\xF1\xA7X<B\xC4\xE1*D\xE1\x10@Ls\xCAl\x94\x81?\x85\x83]\xA4\xFB{\xB10\x1DJ\x85\t\x92P\x81a\x01\xC0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F\x1E\xE6x\xA0G\nu\xA6\xEA\xA8\xFE\x83p`I\x8B\xA8(\xA3p;1\x1D\x0Fw\xF0\x10BJ\xFE\xB0%\x85\t\x92P\x81a\x01\xE0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F B\xA5\x87\xA9\x0C\x18{\n\x08|\x03\xE2\x9C\x96\x8B\x95\x0B\x1D\xB2m\\\x82\xD6f\x90Zh\x95y\x0C\n\x85\t\x92P\x81a\x02\0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F.+\x91Ea\x03i\x8A\xDFW\xB7\x99\x96\x9D\xEA\x1C\x8Fs\x9D\xA5\xD8\xD4\r\xD3\xEB\x92\"\xDB|\x81\xE8\x81\x85\t\x92P\x81a\x02 \x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92PP\x80\x84\x83\t\x93P\x80\x84\x86\x08\x94Pa\x16\xE3\x87`\xA0\x01Q\x86a\x0EKV[\x95P\x88Q``\x8A\x01Q`\x80\x8B\x01Q\x83\x82\x84\t\x97P\x83a\x02\xC0\x8B\x01Q\x89\t\x97P\x83a\x02@\x8B\x01Q\x83\t\x95P\x83a\x01\xA0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02`\x8B\x01Q\x83\t\x95P\x83a\x01\xC0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02\x80\x8B\x01Q\x83\t\x95P\x83a\x01\xE0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02\xA0\x8B\x01Q\x83\t\x95P\x83a\x02\0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95PPPP\x80\x83\x86\t\x94Pa\x17\xAA\x86a\x02\xDC\x8C`\xC0\x01Q\x88\x85a\x17\xA5\x91\x90a \xF9V[a\x0EKV[\x95Pa\x17\xC3\x86a\x02\xDC\x8C`\xE0\x01Q\x8Aa\x01\xA0\x01Qa\x0EKV[\x95Pa\x17\xDD\x86a\x02\xDC\x8Ca\x01\0\x01Q\x8Aa\x01\xC0\x01Qa\x0EKV[\x95Pa\x17\xF7\x86a\x02\xDC\x8Ca\x01 \x01Q\x8Aa\x01\xE0\x01Qa\x0EKV[\x95Pa\x18\x11\x86a\x02\xDC\x8Ca\x01@\x01Q\x8Aa\x02\0\x01Qa\x0EKV[\x95P\x80a\x01\xC0\x88\x01Qa\x01\xA0\x89\x01Q\t\x92Pa\x186\x86a\x02\xDC\x8Ca\x01`\x01Q\x86a\x0EKV[\x95P\x80a\x02\0\x88\x01Qa\x01\xE0\x89\x01Q\t\x92Pa\x18[\x86a\x02\xDC\x8Ca\x01\x80\x01Q\x86a\x0EKV[\x95Pa\x01\xA0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x18\x8A\x86a\x02\xDC\x8Ca\x01\xE0\x01Q\x86a\x0EKV[\x95Pa\x01\xC0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x18\xB9\x86a\x02\xDC\x8Ca\x02\0\x01Q\x86a\x0EKV[\x95Pa\x01\xE0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x18\xE8\x86a\x02\xDC\x8Ca\x02 \x01Q\x86a\x0EKV[\x95Pa\x02\0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x19\x17\x86a\x02\xDC\x8Ca\x02@\x01Q\x86a\x0EKV[\x95Pa\x194\x86a\x02\xDC\x8Ca\x01\xA0\x01Qa\x17\xA5\x8Ba\x02 \x01Qa\x1B\xBDV[\x95Pa\x19E\x86\x8Ba\x01\xC0\x01Qa\x0E\xAEV[\x95P\x80a\x01\xC0\x88\x01Qa\x01\xA0\x89\x01Q\t\x92P\x80a\x01\xE0\x88\x01Q\x84\t\x92P\x80a\x02\0\x88\x01Q\x84\t\x92P\x80a\x02 \x88\x01Q\x84\t\x92Pa\x19\x8B\x86a\x02\xDC\x8Ca\x02`\x01Q\x86a\x0EKV[\x95Pa\x19\x99\x88_\x01Qa\x1B\xBDV[\x94Pa\x19\xAD\x86a\x02\xDC\x89`\xC0\x01Q\x88a\x0EKV[\x95P\x80`\x01\x89Q\x08`\xA0\x8A\x01Q\x90\x93P\x81\x90\x80\t\x91P\x80\x82\x84\t\x92P\x80\x83\x86\t\x94Pa\x19\xE1\x86a\x02\xDC\x89`\xE0\x01Q\x88a\x0EKV[\x95P\x80\x83\x86\t\x94Pa\x19\xFC\x86a\x02\xDC\x89a\x01\0\x01Q\x88a\x0EKV[\x95P\x80\x83\x86\t\x94Pa\x1A\x17\x86a\x02\xDC\x89a\x01 \x01Q\x88a\x0EKV[\x95P\x80\x83\x86\t\x94Pa\x1A2\x86a\x02\xDC\x89a\x01@\x01Q\x88a\x0EKV[\x9A\x99PPPPPPPPPPV[___Q` a!R_9_Q\x90_R\x90P_\x83` \x01Q\x90P_\x84`@\x01Q\x90P_`\x01\x90P``\x88\x01Q`\x80\x89\x01Qa\x01\xA0\x89\x01Qa\x02@\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x01\xC0\x89\x01Qa\x02`\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x01\xE0\x89\x01Qa\x02\x80\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x02\0\x89\x01Qa\x02\xA0\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x02 \x89\x01Q\x91Pa\x02\xC0\x89\x01Q\x86\x87\x82\x89\x85\x87\x08\t\x85\t\x93PPPP\x87Q` \x89\x01Q\x85\x86\x86\x83\t\x87\x03\x85\x08\x96PP\x84\x85\x83\x83\t\x86\x03\x87\x08\x99\x98PPPPPPPPPV[_\x81_\x03a\x1BLW`@Qc\xD6\xDB\xBB\r`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[___Q` a!R_9_Q\x90_R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x84``\x82\x01R`\x02\x82\x03`\x80\x82\x01R\x81`\xA0\x82\x01R` _`\xC0\x83`\x05Z\xFA\x92PP_Q\x92P\x81a\x1B\xB6W`@Qc\x0C\x9D>\x99`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PP\x91\x90PV[__Q` a!R_9_Q\x90_R\x82\x15`\x01\x81\x14a\x1B\xE0W\x83\x82\x03\x92Pa\x1B\xB6V[P_\x93\x92PPPV[`@Q\x80``\x01`@R\x80_\x81R` \x01_\x81R` \x01a\x1C\x08a\x1CIV[\x90R\x90V[`@Q\x80``\x01`@R\x80`\x03\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\x80\x01`@R\x80`\x04\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\xE0\x01`@R\x80`\x07\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@Qa\x02\xE0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1C\x9FWa\x1C\x9Fa\x1CgV[`@R\x90V[`@Qa\x02\xC0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1C\x9FWa\x1C\x9Fa\x1CgV[_`@\x82\x84\x03\x12\x15a\x1C\xD9W__\xFD[`@\x80Q\x90\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1C\xFCWa\x1C\xFCa\x1CgV[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[_\x82`\x1F\x83\x01\x12a\x1D%W__\xFD[`@Q`\xE0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1DHWa\x1DHa\x1CgV[`@R\x80`\xE0\x84\x01\x85\x81\x11\x15a\x1D\\W__\xFD[\x84[\x81\x81\x10\x15a\x1DvW\x805\x83R` \x92\x83\x01\x92\x01a\x1D^V[P\x91\x95\x94PPPPPV[_a\x04\x80\x82\x84\x03\x12\x15a\x1D\x92W__\xFD[a\x1D\x9Aa\x1C{V[\x90Pa\x1D\xA6\x83\x83a\x1C\xC9V[\x81Ra\x1D\xB5\x83`@\x84\x01a\x1C\xC9V[` \x82\x01Ra\x1D\xC7\x83`\x80\x84\x01a\x1C\xC9V[`@\x82\x01Ra\x1D\xD9\x83`\xC0\x84\x01a\x1C\xC9V[``\x82\x01Ra\x1D\xEC\x83a\x01\0\x84\x01a\x1C\xC9V[`\x80\x82\x01Ra\x1D\xFF\x83a\x01@\x84\x01a\x1C\xC9V[`\xA0\x82\x01Ra\x1E\x12\x83a\x01\x80\x84\x01a\x1C\xC9V[`\xC0\x82\x01Ra\x1E%\x83a\x01\xC0\x84\x01a\x1C\xC9V[`\xE0\x82\x01Ra\x1E8\x83a\x02\0\x84\x01a\x1C\xC9V[a\x01\0\x82\x01Ra\x1EL\x83a\x02@\x84\x01a\x1C\xC9V[a\x01 \x82\x01Ra\x1E`\x83a\x02\x80\x84\x01a\x1C\xC9V[a\x01@\x82\x01Ra\x1Et\x83a\x02\xC0\x84\x01a\x1C\xC9V[a\x01`\x82\x01Ra\x1E\x88\x83a\x03\0\x84\x01a\x1C\xC9V[a\x01\x80\x82\x01Ra\x03@\x82\x015a\x01\xA0\x82\x01Ra\x03`\x82\x015a\x01\xC0\x82\x01Ra\x03\x80\x82\x015a\x01\xE0\x82\x01Ra\x03\xA0\x82\x015a\x02\0\x82\x01Ra\x03\xC0\x82\x015a\x02 \x82\x01Ra\x03\xE0\x82\x015a\x02@\x82\x01Ra\x04\0\x82\x015a\x02`\x82\x01Ra\x04 \x82\x015a\x02\x80\x82\x01Ra\x04@\x82\x015a\x02\xA0\x82\x01Ra\x04`\x90\x91\x015a\x02\xC0\x82\x01R\x91\x90PV[___\x83\x85\x03a\n`\x81\x12\x15a\x1F W__\xFD[a\x05\0\x81\x12\x15a\x1F.W__\xFD[Pa\x1F7a\x1C\xA5V[\x845\x81R` \x80\x86\x015\x90\x82\x01Ra\x1FR\x86`@\x87\x01a\x1C\xC9V[`@\x82\x01Ra\x1Fd\x86`\x80\x87\x01a\x1C\xC9V[``\x82\x01Ra\x1Fv\x86`\xC0\x87\x01a\x1C\xC9V[`\x80\x82\x01Ra\x1F\x89\x86a\x01\0\x87\x01a\x1C\xC9V[`\xA0\x82\x01Ra\x1F\x9C\x86a\x01@\x87\x01a\x1C\xC9V[`\xC0\x82\x01Ra\x1F\xAF\x86a\x01\x80\x87\x01a\x1C\xC9V[`\xE0\x82\x01Ra\x1F\xC2\x86a\x01\xC0\x87\x01a\x1C\xC9V[a\x01\0\x82\x01Ra\x1F\xD6\x86a\x02\0\x87\x01a\x1C\xC9V[a\x01 \x82\x01Ra\x1F\xEA\x86a\x02@\x87\x01a\x1C\xC9V[a\x01@\x82\x01Ra\x1F\xFE\x86a\x02\x80\x87\x01a\x1C\xC9V[a\x01`\x82\x01Ra \x12\x86a\x02\xC0\x87\x01a\x1C\xC9V[a\x01\x80\x82\x01Ra &\x86a\x03\0\x87\x01a\x1C\xC9V[a\x01\xA0\x82\x01Ra :\x86a\x03@\x87\x01a\x1C\xC9V[a\x01\xC0\x82\x01Ra N\x86a\x03\x80\x87\x01a\x1C\xC9V[a\x01\xE0\x82\x01Ra b\x86a\x03\xC0\x87\x01a\x1C\xC9V[a\x02\0\x82\x01Ra v\x86a\x04\0\x87\x01a\x1C\xC9V[a\x02 \x82\x01Ra \x8A\x86a\x04@\x87\x01a\x1C\xC9V[a\x02@\x82\x01Ra \x9E\x86a\x04\x80\x87\x01a\x1C\xC9V[a\x02`\x82\x01Ra\x04\xC0\x85\x015a\x02\x80\x82\x01Ra\x04\xE0\x85\x015a\x02\xA0\x82\x01R\x92Pa \xCC\x85a\x05\0\x86\x01a\x1D\x16V[\x91Pa \xDC\x85a\x05\xE0\x86\x01a\x1D\x81V[\x90P\x92P\x92P\x92V[cNH{q`\xE0\x1B_R`2`\x04R`$_\xFD[\x81\x81\x03\x81\x81\x11\x15a!\x18WcNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[\x92\x91PPV[cNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[_\x82a!LWcNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[P\x06\x90V\xFE0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X](3\xE8Hy\xB9p\x91C\xE1\xF5\x93\xF0\0\0\x01\xA1dsolcC\0\x08#\0\n",
3019    );
3020    /// The runtime bytecode of the contract, as deployed on the network.
3021    ///
3022    /// ```text
3023    ///0x7300000000000000000000000000000000000000003014608060405260043610610034575f3560e01c8063ce537a7714610038575b5f5ffd5b61004b610046366004611f0c565b61005f565b604051901515815260200160405180910390f35b5f610069826100d0565b610079835f5b602002015161020b565b61008483600161006f565b61008f83600261006f565b61009a83600361006f565b6100a583600461006f565b6100b083600561006f565b6100bb83600661006f565b6100c684848461023d565b90505b9392505050565b80516100db90610431565b6100e88160200151610431565b6100f58160400151610431565b6101028160600151610431565b61010f8160800151610431565b61011c8160a00151610431565b6101298160c00151610431565b6101368160e00151610431565b610144816101000151610431565b610152816101200151610431565b610160816101400151610431565b61016e816101600151610431565b61017c816101800151610431565b61018a816101a0015161020b565b610198816101c0015161020b565b6101a6816101e0015161020b565b6101b481610200015161020b565b6101c281610220015161020b565b6101d081610240015161020b565b6101de81610260015161020b565b6101ec81610280015161020b565b6101fa816102a0015161020b565b610208816102c0015161020b565b50565b5f5160206121525f395f51905f528110806102395760405163016c173360e21b815260040160405180910390fd5b5050565b5f8360200151600714610263576040516320fa9d8960e11b815260040160405180910390fd5b5f61026f8585856104b0565b90505f61027e865f0151610a10565b90505f610290828460a0015188610dee565b90506102ad60405180604001604052805f81526020015f81525090565b604080518082019091525f80825260208201526102e18761016001516102dc8961018001518860e00151610e4b565b610eae565b91505f5f6102f18b88878c610f15565b91509150610302816102dc8461114d565b925061031b836102dc8b61016001518a60a00151610e4b565b60a08801516040880151602001519194505f5160206121525f395f51905f52918290820990508160e08a01518209905061035e856102dc8d610180015184610e4b565b94505f60405180608001604052807f0118c4d5b837bcc2bc89b5b398b5974e9f5944073b32078b7e231fec938883b081526020017f260e01b251f6f1c7e7ff4e580791dee8ea51d87a358e038b4efe30fac09383c181526020017f22febda3c0c0632a56475b4214e5615e11e6dd3f96e6cea2854a87d4dacc5e5581526020017f04fc6369f7110fe3d25156c1bb9a72859cf2a04641f99ba4ee413c80da6a5fe4815250905061041f87826104128961114d565b61041a6111ea565b6112b7565b9e9d5050505050505050505050505050565b805160208201515f917f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4791159015161561046a57505050565b8251602084015182600384858586098509088382830914838210848410161693505050816104ab5760405163279e345360e21b815260040160405180910390fd5b505050565b6104f06040518061010001604052805f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81525090565b5f5f5160206121525f395f51905f529050604051602081015f815260fe60e01b8152865160c01b6004820152602087015160c01b600c82015261028087015160208201526102a08701516040820152600160608201527f2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a60808201527f1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb02560a08201527f2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a60c08201527f2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e88160e082015260e087015180516101008301526020810151610120830152506101008701518051610140830152602081015161016083015250610120870151805161018083015260208101516101a08301525061014087015180516101c083015260208101516101e083015250610160870151805161020083015260208101516102208301525061018087015180516102408301526020810151610260830152506101e0870151805161028083015260208101516102a08301525061020087015180516102c083015260208101516102e083015250610220870151805161030083015260208101516103208301525061024087015180516103408301526020810151610360830152506101a0870151805161038083015260208101516103a0830152506101c087015180516103c083015260208101516103e0830152506102608701518051610400830152602081015161042083015250604087015180516104408301526020810151610460830152506060870151805161048083015260208101516104a083015250608087015180516104c083015260208101516104e08301525060a0870151805161050083015260208101516105208301525060c08701518051610540830152602081015161056083015250855161058082015260208601516105a082015260408601516105c082015260608601516105e0820152608086015161060082015260a086015161062082015260c086015161064082015284518051610660830152602081015161068083015250602085015180516106a083015260208101516106c083015250604085015180516106e083015260208101516107008301525060608501518051610720830152602081015161074083015250608085015180516107608301526020810151610780830152505f82526107c08220825282825106606085015260208220825282825106608085015260a085015180518252602081015160208301525060608220808352838106855283818209848282099150806020870152508060408601525060c085015180518252602081015160208301525060e085015180516040830152602081015160608301525061010085015180516080830152602081015160a083015250610120850151805160c0830152602081015160e0830152506101408501518051610100830152602081015161012083015250610160822082528282510660a08501526101a085015181526101c085015160208201526101e085015160408201526102008501516060820152610220850151608082015261024085015160a082015261026085015160c082015261028085015160e08201526102a08501516101008201526102c0850151610120820152610160822082528282510660c08501526101608501518051825260208101516020830152506101808501518051604083015260208101516060830152505060a0812082810660e08501525050509392505050565b610a18611be9565b816201000003610b57576040518060600160405280601081526020017f30641e0e92bebef818268d663bcad6dbcfd6c0149170f6d7d350b1b1fa6c100181526020016040518060e00160405280600181526020017eeeb2cb5981ed45649abebde081dcff16c8601de4347e7dd1628ba2daac43b781526020017f2d1ba66f5941dc91017171fa69ec2bd0022a2a2d4115a009a93458fd4e26ecfb81526020017f086812a00ac43ea801669c640171203c41a496671bfbc065ac8db24d52cf31e581526020017f2d965651cdd9e4811f4e51b80ddca8a8b4a93ee17420aae6adaa01c2617c6e8581526020017f12597a56c2e438620b9041b98992ae0d4e705b780057bf7766a2767cece16e1d81526020017f02d94117cd17bcf1290fd67c01155dd40807857dff4a5a0b4dc67befa8aa34fd8152508152509050919050565b816210000003610c97576040518060600160405280601481526020017f30644b6c9c4a72169e4daa317d25f04512ae15c53b34e8f5acd8e155d0a6c10181526020016040518060e00160405280600181526020017f26125da10a0ed06327508aba06d1e303ac616632dbed349f53422da95333785781526020017f2260e724844bca5251829353968e4915305258418357473a5c1d597f613f6cbd81526020017f2087ea2cd664278608fb0ebdb820907f598502c81b6690c185e2bf15cb935f4281526020017f19ddbcaf3a8d46c15c0176fbb5b95e4dc57088ff13f4d1bd84c6bfa57dcdc0e081526020017f05a2c85cfc591789605cae818e37dd4161eef9aa666bec6fe4288d09e6d2341881526020017f11f70e5363258ff4f0d716a653e1dc41f1c64484d7f4b6e219d6377614a3905c8152508152509050919050565b81602003610dd5576040518060600160405280600581526020017f2ee12bff4a2813286a8dc388cd754d9a3ef2490635eba50cb9c2e5e75080000181526020016040518060e00160405280600181526020017f09c532c6306b93d29678200d47c0b2a99c18d51b838eeb1d3eed4c533bb512d081526020017f21082ca216cbbf4e1c6e4f4594dd508c996dfbe1174efb98b11509c6e306460b81526020017f1277ae6415f0ef18f2ba5fb162c39eb7311f386e2d26d64401f4a25da77c253b81526020017f2b337de1c8c14f22ec9b9e2f96afef3652627366f8170a0a948dad4ac1bd5e8081526020017f2fbd4dd2976be55d1a163aa9820fb88dfac5ddce77e1872e90632027327a5ebe81526020017f107aab49e65a67f9da9cd2abf78be38bd9dc1d5db39f81de36bcfa5b4b0390438152508152509050919050565b60405163e2ef09e560e01b815260040160405180910390fd5b610e0f60405180606001604052805f81526020015f81526020015f81525090565b610e198484611368565b808252610e2990859085906113b9565b60208201528051610e3f90859084908690611428565b60408201529392505050565b604080518082019091525f8082526020820152610e66611c0d565b835181526020808501519082015260408082018490525f908360608460075afa905080610ea65760405163033b714d60e31b815260040160405180910390fd5b505092915050565b604080518082019091525f8082526020820152610ec9611c2b565b835181526020808501518183015283516040808401919091529084015160608301525f908360808460065afa905080610ea65760405163302aedb560e11b815260040160405180910390fd5b604080518082019091525f8082526020820152604080518082019091525f80825260208201525f610f4887878787611576565b90505f5160206121525f395f51905f525f610f64888789611a40565b9050610f7081836120f9565b60c08901516101a088015191925090819084908190830984089250610f9c856102dc8a5f015184610e4b565b955083828209905083846101c08a0151830984089250610fc4866102dc8a6020015184610e4b565b955083828209905083846101e08a0151830984089250610fec866102dc8a6040015184610e4b565b955083828209905083846102008a0151830984089250611014866102dc8a6060015184610e4b565b955083828209905083846102208a015183098408925061103c866102dc8a6080015184610e4b565b955083828209905083846102408a0151830984089250611064866102dc8d6040015184610e4b565b955083828209905083846102608a015183098408925061108c866102dc8d6060015184610e4b565b955083828209905083846102808a01518309840892506110b4866102dc8d6080015184610e4b565b955083828209905083846102a08a01518309840892506110dc866102dc8d60a0015184610e4b565b95505f8a60e00151905084856102c08b0151830985089350611106876102dc8b60a0015184610e4b565b965061113c6111366040805180820182525f80825260209182015281518083019092526001825260029082015290565b85610e4b565b975050505050505094509492505050565b604080518082019091525f8082526020820152815160208301511590151615611174575090565b6040518060400160405280835f015181526020017f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd4784602001516111b89190612132565b6111e2907f30644e72e131a029b85045b68181585d97816a916871ca8d3c208c16d87cfd476120f9565b905292915050565b61121160405180608001604052805f81526020015f81526020015f81526020015f81525090565b60405180608001604052807f1800deef121f1e76426a00665e5c4479674322d4f75edadd46debd5cd992f6ed81526020017f198e9393920d483a7260bfb731fb5d25f1aa493335a9e71297e485b7aef312c281526020017f12c85ea5db8c6deb4aab71808dcb408fe3d1e7690c43d37b4ce6cc0166fa7daa81526020017f090689d0585ff075ec9e99ad690c3395bc4b313370b38ef355acdadcd122975b815250905090565b5f5f5f6040518751815260208801516020820152602087015160408201528651606082015260608701516080820152604087015160a0820152855160c0820152602086015160e0820152602085015161010082015284516101208201526060850151610140820152604085015161016082015260205f6101808360085afa9150505f5191508061135a5760405163c206334f60e01b815260040160405180910390fd5b50151590505b949350505050565b81515f905f5160206121525f395f51905f52908380156113a9578493505f5b8281101561139d57838586099450600101611387565b506001840393506113b0565b6001830393505b50505092915050565b5f826001036113ca575060016100c9565b815f036113d857505f6100c9565b60208401515f5160206121525f395f51905f52905f908281860990508580156114065760018703925061140d565b6001840392505b5061141782611b2b565b915082828209979650505050505050565b5f5f5160206121525f395f51905f528282036114a15760015f5b60078110156114965781860361147357868160078110611464576114646120e5565b60200201519350505050611360565b82806114815761148161211e565b60408901516020015183099150600101611442565b505f92505050611360565b6114a9611c49565b6040870151600160c0838101828152920190805b60078110156114ea5760208403935085868a85518903088309808552601f199093019291506001016114bd565b505050505f5f5f90506001838960408c01515f5b600781101561153e578882518a85518c88518a0909098981880896505088898d84518c0308860994506020938401939283019291909101906001016114fe565b50505050809250505f61155083611b2b565b905060208a015185818909965050848187099550848287099a9950505050505050505050565b604080518082019091525f80825260208201525f5f5f5f5f5f5160206121525f395f51905f52905060808901518160208a015160208c0151099550895194508160a08b015160608c0151099350816101a089015185089250818184089250818584099450817f2f8dd1f1a7583c42c4e12a44e110404c73ca6c94813f85835da4fb7bb1301d4a85099250816101c089015184089250818184089250818584099450817f1ee678a0470a75a6eaa8fe837060498ba828a3703b311d0f77f010424afeb02585099250816101e089015184089250818184089250818584099450817f2042a587a90c187b0a087c03e29c968b950b1db26d5c82d666905a6895790c0a850992508161020089015184089250818184089250818584099450817f2e2b91456103698adf57b799969dea1c8f739da5d8d40dd3eb9222db7c81e881850992508161022089015184089250818184089250508084830993508084860894506116e38760a0015186610e4b565b9550885160608a015160808b0151838284099750836102c08b015189099750836102408b015183099550836101a08b015187089550838187089550838689099750836102608b015183099550836101c08b015187089550838187089550838689099750836102808b015183099550836101e08b015187089550838187089550838689099750836102a08b015183099550836102008b0151870895508381870895505050508083860994506117aa866102dc8c60c0015188856117a591906120f9565b610e4b565b95506117c3866102dc8c60e001518a6101a00151610e4b565b95506117dd866102dc8c61010001518a6101c00151610e4b565b95506117f7866102dc8c61012001518a6101e00151610e4b565b9550611811866102dc8c61014001518a6102000151610e4b565b9550806101c08801516101a0890151099250611836866102dc8c610160015186610e4b565b9550806102008801516101e089015109925061185b866102dc8c610180015186610e4b565b95506101a0870151925080838409915080828309915080828409925061188a866102dc8c6101e0015186610e4b565b95506101c087015192508083840991508082830991508082840992506118b9866102dc8c610200015186610e4b565b95506101e087015192508083840991508082830991508082840992506118e8866102dc8c610220015186610e4b565b95506102008701519250808384099150808283099150808284099250611917866102dc8c610240015186610e4b565b9550611934866102dc8c6101a001516117a58b6102200151611bbd565b9550611945868b6101c00151610eae565b9550806101c08801516101a0890151099250806101e0880151840992508061020088015184099250806102208801518409925061198b866102dc8c610260015186610e4b565b9550611999885f0151611bbd565b94506119ad866102dc8960c0015188610e4b565b955080600189510860a08a01519093508190800991508082840992508083860994506119e1866102dc8960e0015188610e4b565b95508083860994506119fc866102dc89610100015188610e4b565b9550808386099450611a17866102dc89610120015188610e4b565b9550808386099450611a32866102dc89610140015188610e4b565b9a9950505050505050505050565b5f5f5f5160206121525f395f51905f5290505f836020015190505f846040015190505f60019050606088015160808901516101a08901516102408a01518788898387098a868608088609945050506101c08901516102608a01518788898387098a868608088609945050506101e08901516102808a01518788898387098a868608088609945050506102008901516102a08a01518788898387098a8686080886099450505061022089015191506102c0890151868782898587080985099350505050875160208901518586868309870385089650508485838309860387089998505050505050505050565b5f815f03611b4c5760405163d6dbbb0d60e01b815260040160405180910390fd5b5f5f5f5160206121525f395f51905f52905060405160208152602080820152602060408201528460608201526002820360808201528160a082015260205f60c08360055afa9250505f51925081611bb657604051630c9d3e9960e21b815260040160405180910390fd5b5050919050565b5f5f5160206121525f395f51905f52821560018114611be0578382039250611bb6565b505f9392505050565b60405180606001604052805f81526020015f8152602001611c08611c49565b905290565b60405180606001604052806003906020820280368337509192915050565b60405180608001604052806004906020820280368337509192915050565b6040518060e001604052806007906020820280368337509192915050565b634e487b7160e01b5f52604160045260245ffd5b6040516102e0810167ffffffffffffffff81118282101715611c9f57611c9f611c67565b60405290565b6040516102c0810167ffffffffffffffff81118282101715611c9f57611c9f611c67565b5f60408284031215611cd9575f5ffd5b6040805190810167ffffffffffffffff81118282101715611cfc57611cfc611c67565b604052823581526020928301359281019290925250919050565b5f82601f830112611d25575f5ffd5b60405160e0810167ffffffffffffffff81118282101715611d4857611d48611c67565b6040528060e0840185811115611d5c575f5ffd5b845b81811015611d76578035835260209283019201611d5e565b509195945050505050565b5f6104808284031215611d92575f5ffd5b611d9a611c7b565b9050611da68383611cc9565b8152611db58360408401611cc9565b6020820152611dc78360808401611cc9565b6040820152611dd98360c08401611cc9565b6060820152611dec836101008401611cc9565b6080820152611dff836101408401611cc9565b60a0820152611e12836101808401611cc9565b60c0820152611e25836101c08401611cc9565b60e0820152611e38836102008401611cc9565b610100820152611e4c836102408401611cc9565b610120820152611e60836102808401611cc9565b610140820152611e74836102c08401611cc9565b610160820152611e88836103008401611cc9565b6101808201526103408201356101a08201526103608201356101c08201526103808201356101e08201526103a08201356102008201526103c08201356102208201526103e08201356102408201526104008201356102608201526104208201356102808201526104408201356102a0820152610460909101356102c0820152919050565b5f5f5f838503610a60811215611f20575f5ffd5b610500811215611f2e575f5ffd5b50611f37611ca5565b8435815260208086013590820152611f528660408701611cc9565b6040820152611f648660808701611cc9565b6060820152611f768660c08701611cc9565b6080820152611f89866101008701611cc9565b60a0820152611f9c866101408701611cc9565b60c0820152611faf866101808701611cc9565b60e0820152611fc2866101c08701611cc9565b610100820152611fd6866102008701611cc9565b610120820152611fea866102408701611cc9565b610140820152611ffe866102808701611cc9565b610160820152612012866102c08701611cc9565b610180820152612026866103008701611cc9565b6101a082015261203a866103408701611cc9565b6101c082015261204e866103808701611cc9565b6101e0820152612062866103c08701611cc9565b610200820152612076866104008701611cc9565b61022082015261208a866104408701611cc9565b61024082015261209e866104808701611cc9565b6102608201526104c08501356102808201526104e08501356102a082015292506120cc856105008601611d16565b91506120dc856105e08601611d81565b90509250925092565b634e487b7160e01b5f52603260045260245ffd5b8181038181111561211857634e487b7160e01b5f52601160045260245ffd5b92915050565b634e487b7160e01b5f52601260045260245ffd5b5f8261214c57634e487b7160e01b5f52601260045260245ffd5b50069056fe30644e72e131a029b85045b68181585d2833e84879b9709143e1f593f0000001a164736f6c6343000823000a
3024    /// ```
3025    #[rustfmt::skip]
3026    #[allow(clippy::all)]
3027    pub static DEPLOYED_BYTECODE: alloy_sol_types::private::Bytes = alloy_sol_types::private::Bytes::from_static(
3028        b"s\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x000\x14`\x80`@R`\x046\x10a\x004W_5`\xE0\x1C\x80c\xCESzw\x14a\08W[__\xFD[a\0Ka\0F6`\x04a\x1F\x0CV[a\0_V[`@Q\x90\x15\x15\x81R` \x01`@Q\x80\x91\x03\x90\xF3[_a\0i\x82a\0\xD0V[a\0y\x83_[` \x02\x01Qa\x02\x0BV[a\0\x84\x83`\x01a\0oV[a\0\x8F\x83`\x02a\0oV[a\0\x9A\x83`\x03a\0oV[a\0\xA5\x83`\x04a\0oV[a\0\xB0\x83`\x05a\0oV[a\0\xBB\x83`\x06a\0oV[a\0\xC6\x84\x84\x84a\x02=V[\x90P[\x93\x92PPPV[\x80Qa\0\xDB\x90a\x041V[a\0\xE8\x81` \x01Qa\x041V[a\0\xF5\x81`@\x01Qa\x041V[a\x01\x02\x81``\x01Qa\x041V[a\x01\x0F\x81`\x80\x01Qa\x041V[a\x01\x1C\x81`\xA0\x01Qa\x041V[a\x01)\x81`\xC0\x01Qa\x041V[a\x016\x81`\xE0\x01Qa\x041V[a\x01D\x81a\x01\0\x01Qa\x041V[a\x01R\x81a\x01 \x01Qa\x041V[a\x01`\x81a\x01@\x01Qa\x041V[a\x01n\x81a\x01`\x01Qa\x041V[a\x01|\x81a\x01\x80\x01Qa\x041V[a\x01\x8A\x81a\x01\xA0\x01Qa\x02\x0BV[a\x01\x98\x81a\x01\xC0\x01Qa\x02\x0BV[a\x01\xA6\x81a\x01\xE0\x01Qa\x02\x0BV[a\x01\xB4\x81a\x02\0\x01Qa\x02\x0BV[a\x01\xC2\x81a\x02 \x01Qa\x02\x0BV[a\x01\xD0\x81a\x02@\x01Qa\x02\x0BV[a\x01\xDE\x81a\x02`\x01Qa\x02\x0BV[a\x01\xEC\x81a\x02\x80\x01Qa\x02\x0BV[a\x01\xFA\x81a\x02\xA0\x01Qa\x02\x0BV[a\x02\x08\x81a\x02\xC0\x01Qa\x02\x0BV[PV[_Q` a!R_9_Q\x90_R\x81\x10\x80a\x029W`@Qc\x01l\x173`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPV[_\x83` \x01Q`\x07\x14a\x02cW`@Qc \xFA\x9D\x89`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[_a\x02o\x85\x85\x85a\x04\xB0V[\x90P_a\x02~\x86_\x01Qa\n\x10V[\x90P_a\x02\x90\x82\x84`\xA0\x01Q\x88a\r\xEEV[\x90Pa\x02\xAD`@Q\x80`@\x01`@R\x80_\x81R` \x01_\x81RP\x90V[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x02\xE1\x87a\x01`\x01Qa\x02\xDC\x89a\x01\x80\x01Q\x88`\xE0\x01Qa\x0EKV[a\x0E\xAEV[\x91P__a\x02\xF1\x8B\x88\x87\x8Ca\x0F\x15V[\x91P\x91Pa\x03\x02\x81a\x02\xDC\x84a\x11MV[\x92Pa\x03\x1B\x83a\x02\xDC\x8Ba\x01`\x01Q\x8A`\xA0\x01Qa\x0EKV[`\xA0\x88\x01Q`@\x88\x01Q` \x01Q\x91\x94P_Q` a!R_9_Q\x90_R\x91\x82\x90\x82\t\x90P\x81`\xE0\x8A\x01Q\x82\t\x90Pa\x03^\x85a\x02\xDC\x8Da\x01\x80\x01Q\x84a\x0EKV[\x94P_`@Q\x80`\x80\x01`@R\x80\x7F\x01\x18\xC4\xD5\xB87\xBC\xC2\xBC\x89\xB5\xB3\x98\xB5\x97N\x9FYD\x07;2\x07\x8B~#\x1F\xEC\x93\x88\x83\xB0\x81R` \x01\x7F&\x0E\x01\xB2Q\xF6\xF1\xC7\xE7\xFFNX\x07\x91\xDE\xE8\xEAQ\xD8z5\x8E\x03\x8BN\xFE0\xFA\xC0\x93\x83\xC1\x81R` \x01\x7F\"\xFE\xBD\xA3\xC0\xC0c*VG[B\x14\xE5a^\x11\xE6\xDD?\x96\xE6\xCE\xA2\x85J\x87\xD4\xDA\xCC^U\x81R` \x01\x7F\x04\xFCci\xF7\x11\x0F\xE3\xD2QV\xC1\xBB\x9Ar\x85\x9C\xF2\xA0FA\xF9\x9B\xA4\xEEA<\x80\xDAj_\xE4\x81RP\x90Pa\x04\x1F\x87\x82a\x04\x12\x89a\x11MV[a\x04\x1Aa\x11\xEAV[a\x12\xB7V[\x9E\x9DPPPPPPPPPPPPPPV[\x80Q` \x82\x01Q_\x91\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\x91\x15\x90\x15\x16\x15a\x04jWPPPV[\x82Q` \x84\x01Q\x82`\x03\x84\x85\x85\x86\t\x85\t\x08\x83\x82\x83\t\x14\x83\x82\x10\x84\x84\x10\x16\x16\x93PPP\x81a\x04\xABW`@Qc'\x9E4S`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PPPV[a\x04\xF0`@Q\x80a\x01\0\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[__Q` a!R_9_Q\x90_R\x90P`@Q` \x81\x01_\x81R`\xFE`\xE0\x1B\x81R\x86Q`\xC0\x1B`\x04\x82\x01R` \x87\x01Q`\xC0\x1B`\x0C\x82\x01Ra\x02\x80\x87\x01Q` \x82\x01Ra\x02\xA0\x87\x01Q`@\x82\x01R`\x01``\x82\x01R\x7F/\x8D\xD1\xF1\xA7X<B\xC4\xE1*D\xE1\x10@Ls\xCAl\x94\x81?\x85\x83]\xA4\xFB{\xB10\x1DJ`\x80\x82\x01R\x7F\x1E\xE6x\xA0G\nu\xA6\xEA\xA8\xFE\x83p`I\x8B\xA8(\xA3p;1\x1D\x0Fw\xF0\x10BJ\xFE\xB0%`\xA0\x82\x01R\x7F B\xA5\x87\xA9\x0C\x18{\n\x08|\x03\xE2\x9C\x96\x8B\x95\x0B\x1D\xB2m\\\x82\xD6f\x90Zh\x95y\x0C\n`\xC0\x82\x01R\x7F.+\x91Ea\x03i\x8A\xDFW\xB7\x99\x96\x9D\xEA\x1C\x8Fs\x9D\xA5\xD8\xD4\r\xD3\xEB\x92\"\xDB|\x81\xE8\x81`\xE0\x82\x01R`\xE0\x87\x01Q\x80Qa\x01\0\x83\x01R` \x81\x01Qa\x01 \x83\x01RPa\x01\0\x87\x01Q\x80Qa\x01@\x83\x01R` \x81\x01Qa\x01`\x83\x01RPa\x01 \x87\x01Q\x80Qa\x01\x80\x83\x01R` \x81\x01Qa\x01\xA0\x83\x01RPa\x01@\x87\x01Q\x80Qa\x01\xC0\x83\x01R` \x81\x01Qa\x01\xE0\x83\x01RPa\x01`\x87\x01Q\x80Qa\x02\0\x83\x01R` \x81\x01Qa\x02 \x83\x01RPa\x01\x80\x87\x01Q\x80Qa\x02@\x83\x01R` \x81\x01Qa\x02`\x83\x01RPa\x01\xE0\x87\x01Q\x80Qa\x02\x80\x83\x01R` \x81\x01Qa\x02\xA0\x83\x01RPa\x02\0\x87\x01Q\x80Qa\x02\xC0\x83\x01R` \x81\x01Qa\x02\xE0\x83\x01RPa\x02 \x87\x01Q\x80Qa\x03\0\x83\x01R` \x81\x01Qa\x03 \x83\x01RPa\x02@\x87\x01Q\x80Qa\x03@\x83\x01R` \x81\x01Qa\x03`\x83\x01RPa\x01\xA0\x87\x01Q\x80Qa\x03\x80\x83\x01R` \x81\x01Qa\x03\xA0\x83\x01RPa\x01\xC0\x87\x01Q\x80Qa\x03\xC0\x83\x01R` \x81\x01Qa\x03\xE0\x83\x01RPa\x02`\x87\x01Q\x80Qa\x04\0\x83\x01R` \x81\x01Qa\x04 \x83\x01RP`@\x87\x01Q\x80Qa\x04@\x83\x01R` \x81\x01Qa\x04`\x83\x01RP``\x87\x01Q\x80Qa\x04\x80\x83\x01R` \x81\x01Qa\x04\xA0\x83\x01RP`\x80\x87\x01Q\x80Qa\x04\xC0\x83\x01R` \x81\x01Qa\x04\xE0\x83\x01RP`\xA0\x87\x01Q\x80Qa\x05\0\x83\x01R` \x81\x01Qa\x05 \x83\x01RP`\xC0\x87\x01Q\x80Qa\x05@\x83\x01R` \x81\x01Qa\x05`\x83\x01RP\x85Qa\x05\x80\x82\x01R` \x86\x01Qa\x05\xA0\x82\x01R`@\x86\x01Qa\x05\xC0\x82\x01R``\x86\x01Qa\x05\xE0\x82\x01R`\x80\x86\x01Qa\x06\0\x82\x01R`\xA0\x86\x01Qa\x06 \x82\x01R`\xC0\x86\x01Qa\x06@\x82\x01R\x84Q\x80Qa\x06`\x83\x01R` \x81\x01Qa\x06\x80\x83\x01RP` \x85\x01Q\x80Qa\x06\xA0\x83\x01R` \x81\x01Qa\x06\xC0\x83\x01RP`@\x85\x01Q\x80Qa\x06\xE0\x83\x01R` \x81\x01Qa\x07\0\x83\x01RP``\x85\x01Q\x80Qa\x07 \x83\x01R` \x81\x01Qa\x07@\x83\x01RP`\x80\x85\x01Q\x80Qa\x07`\x83\x01R` \x81\x01Qa\x07\x80\x83\x01RP_\x82Ra\x07\xC0\x82 \x82R\x82\x82Q\x06``\x85\x01R` \x82 \x82R\x82\x82Q\x06`\x80\x85\x01R`\xA0\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RP``\x82 \x80\x83R\x83\x81\x06\x85R\x83\x81\x82\t\x84\x82\x82\t\x91P\x80` \x87\x01RP\x80`@\x86\x01RP`\xC0\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RP`\xE0\x85\x01Q\x80Q`@\x83\x01R` \x81\x01Q``\x83\x01RPa\x01\0\x85\x01Q\x80Q`\x80\x83\x01R` \x81\x01Q`\xA0\x83\x01RPa\x01 \x85\x01Q\x80Q`\xC0\x83\x01R` \x81\x01Q`\xE0\x83\x01RPa\x01@\x85\x01Q\x80Qa\x01\0\x83\x01R` \x81\x01Qa\x01 \x83\x01RPa\x01`\x82 \x82R\x82\x82Q\x06`\xA0\x85\x01Ra\x01\xA0\x85\x01Q\x81Ra\x01\xC0\x85\x01Q` \x82\x01Ra\x01\xE0\x85\x01Q`@\x82\x01Ra\x02\0\x85\x01Q``\x82\x01Ra\x02 \x85\x01Q`\x80\x82\x01Ra\x02@\x85\x01Q`\xA0\x82\x01Ra\x02`\x85\x01Q`\xC0\x82\x01Ra\x02\x80\x85\x01Q`\xE0\x82\x01Ra\x02\xA0\x85\x01Qa\x01\0\x82\x01Ra\x02\xC0\x85\x01Qa\x01 \x82\x01Ra\x01`\x82 \x82R\x82\x82Q\x06`\xC0\x85\x01Ra\x01`\x85\x01Q\x80Q\x82R` \x81\x01Q` \x83\x01RPa\x01\x80\x85\x01Q\x80Q`@\x83\x01R` \x81\x01Q``\x83\x01RPP`\xA0\x81 \x82\x81\x06`\xE0\x85\x01RPPP\x93\x92PPPV[a\n\x18a\x1B\xE9V[\x81b\x01\0\0\x03a\x0BWW`@Q\x80``\x01`@R\x80`\x10\x81R` \x01\x7F0d\x1E\x0E\x92\xBE\xBE\xF8\x18&\x8Df;\xCA\xD6\xDB\xCF\xD6\xC0\x14\x91p\xF6\xD7\xD3P\xB1\xB1\xFAl\x10\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01~\xEE\xB2\xCBY\x81\xEDEd\x9A\xBE\xBD\xE0\x81\xDC\xFF\x16\xC8`\x1D\xE44~}\xD1b\x8B\xA2\xDA\xACC\xB7\x81R` \x01\x7F-\x1B\xA6oYA\xDC\x91\x01qq\xFAi\xEC+\xD0\x02**-A\x15\xA0\t\xA94X\xFDN&\xEC\xFB\x81R` \x01\x7F\x08h\x12\xA0\n\xC4>\xA8\x01f\x9Cd\x01q <A\xA4\x96g\x1B\xFB\xC0e\xAC\x8D\xB2MR\xCF1\xE5\x81R` \x01\x7F-\x96VQ\xCD\xD9\xE4\x81\x1FNQ\xB8\r\xDC\xA8\xA8\xB4\xA9>\xE1t \xAA\xE6\xAD\xAA\x01\xC2a|n\x85\x81R` \x01\x7F\x12YzV\xC2\xE48b\x0B\x90A\xB9\x89\x92\xAE\rNp[x\0W\xBFwf\xA2v|\xEC\xE1n\x1D\x81R` \x01\x7F\x02\xD9A\x17\xCD\x17\xBC\xF1)\x0F\xD6|\x01\x15]\xD4\x08\x07\x85}\xFFJZ\x0BM\xC6{\xEF\xA8\xAA4\xFD\x81RP\x81RP\x90P\x91\x90PV[\x81b\x10\0\0\x03a\x0C\x97W`@Q\x80``\x01`@R\x80`\x14\x81R` \x01\x7F0dKl\x9CJr\x16\x9EM\xAA1}%\xF0E\x12\xAE\x15\xC5;4\xE8\xF5\xAC\xD8\xE1U\xD0\xA6\xC1\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01\x7F&\x12]\xA1\n\x0E\xD0c'P\x8A\xBA\x06\xD1\xE3\x03\xACaf2\xDB\xED4\x9FSB-\xA9S3xW\x81R` \x01\x7F\"`\xE7$\x84K\xCARQ\x82\x93S\x96\x8EI\x150RXA\x83WG:\\\x1DY\x7Fa?l\xBD\x81R` \x01\x7F \x87\xEA,\xD6d'\x86\x08\xFB\x0E\xBD\xB8 \x90\x7FY\x85\x02\xC8\x1Bf\x90\xC1\x85\xE2\xBF\x15\xCB\x93_B\x81R` \x01\x7F\x19\xDD\xBC\xAF:\x8DF\xC1\\\x01v\xFB\xB5\xB9^M\xC5p\x88\xFF\x13\xF4\xD1\xBD\x84\xC6\xBF\xA5}\xCD\xC0\xE0\x81R` \x01\x7F\x05\xA2\xC8\\\xFCY\x17\x89`\\\xAE\x81\x8E7\xDDAa\xEE\xF9\xAAfk\xECo\xE4(\x8D\t\xE6\xD24\x18\x81R` \x01\x7F\x11\xF7\x0ESc%\x8F\xF4\xF0\xD7\x16\xA6S\xE1\xDCA\xF1\xC6D\x84\xD7\xF4\xB6\xE2\x19\xD67v\x14\xA3\x90\\\x81RP\x81RP\x90P\x91\x90PV[\x81` \x03a\r\xD5W`@Q\x80``\x01`@R\x80`\x05\x81R` \x01\x7F.\xE1+\xFFJ(\x13(j\x8D\xC3\x88\xCDuM\x9A>\xF2I\x065\xEB\xA5\x0C\xB9\xC2\xE5\xE7P\x80\0\x01\x81R` \x01`@Q\x80`\xE0\x01`@R\x80`\x01\x81R` \x01\x7F\t\xC52\xC60k\x93\xD2\x96x \rG\xC0\xB2\xA9\x9C\x18\xD5\x1B\x83\x8E\xEB\x1D>\xEDLS;\xB5\x12\xD0\x81R` \x01\x7F!\x08,\xA2\x16\xCB\xBFN\x1CnOE\x94\xDDP\x8C\x99m\xFB\xE1\x17N\xFB\x98\xB1\x15\t\xC6\xE3\x06F\x0B\x81R` \x01\x7F\x12w\xAEd\x15\xF0\xEF\x18\xF2\xBA_\xB1b\xC3\x9E\xB71\x1F8n-&\xD6D\x01\xF4\xA2]\xA7|%;\x81R` \x01\x7F+3}\xE1\xC8\xC1O\"\xEC\x9B\x9E/\x96\xAF\xEF6Rbsf\xF8\x17\n\n\x94\x8D\xADJ\xC1\xBD^\x80\x81R` \x01\x7F/\xBDM\xD2\x97k\xE5]\x1A\x16:\xA9\x82\x0F\xB8\x8D\xFA\xC5\xDD\xCEw\xE1\x87.\x90c '2z^\xBE\x81R` \x01\x7F\x10z\xABI\xE6Zg\xF9\xDA\x9C\xD2\xAB\xF7\x8B\xE3\x8B\xD9\xDC\x1D]\xB3\x9F\x81\xDE6\xBC\xFA[K\x03\x90C\x81RP\x81RP\x90P\x91\x90PV[`@Qc\xE2\xEF\t\xE5`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[a\x0E\x0F`@Q\x80``\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81RP\x90V[a\x0E\x19\x84\x84a\x13hV[\x80\x82Ra\x0E)\x90\x85\x90\x85\x90a\x13\xB9V[` \x82\x01R\x80Qa\x0E?\x90\x85\x90\x84\x90\x86\x90a\x14(V[`@\x82\x01R\x93\x92PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x0Efa\x1C\rV[\x83Q\x81R` \x80\x85\x01Q\x90\x82\x01R`@\x80\x82\x01\x84\x90R_\x90\x83``\x84`\x07Z\xFA\x90P\x80a\x0E\xA6W`@Qc\x03;qM`\xE3\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PP\x92\x91PPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01Ra\x0E\xC9a\x1C+V[\x83Q\x81R` \x80\x85\x01Q\x81\x83\x01R\x83Q`@\x80\x84\x01\x91\x90\x91R\x90\x84\x01Q``\x83\x01R_\x90\x83`\x80\x84`\x06Z\xFA\x90P\x80a\x0E\xA6W`@Qc0*\xED\xB5`\xE1\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R_a\x0FH\x87\x87\x87\x87a\x15vV[\x90P_Q` a!R_9_Q\x90_R_a\x0Fd\x88\x87\x89a\x1A@V[\x90Pa\x0Fp\x81\x83a \xF9V[`\xC0\x89\x01Qa\x01\xA0\x88\x01Q\x91\x92P\x90\x81\x90\x84\x90\x81\x90\x83\t\x84\x08\x92Pa\x0F\x9C\x85a\x02\xDC\x8A_\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x01\xC0\x8A\x01Q\x83\t\x84\x08\x92Pa\x0F\xC4\x86a\x02\xDC\x8A` \x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x01\xE0\x8A\x01Q\x83\t\x84\x08\x92Pa\x0F\xEC\x86a\x02\xDC\x8A`@\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\x14\x86a\x02\xDC\x8A``\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02 \x8A\x01Q\x83\t\x84\x08\x92Pa\x10<\x86a\x02\xDC\x8A`\x80\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02@\x8A\x01Q\x83\t\x84\x08\x92Pa\x10d\x86a\x02\xDC\x8D`@\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02`\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\x8C\x86a\x02\xDC\x8D``\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\x80\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xB4\x86a\x02\xDC\x8D`\x80\x01Q\x84a\x0EKV[\x95P\x83\x82\x82\t\x90P\x83\x84a\x02\xA0\x8A\x01Q\x83\t\x84\x08\x92Pa\x10\xDC\x86a\x02\xDC\x8D`\xA0\x01Q\x84a\x0EKV[\x95P_\x8A`\xE0\x01Q\x90P\x84\x85a\x02\xC0\x8B\x01Q\x83\t\x85\x08\x93Pa\x11\x06\x87a\x02\xDC\x8B`\xA0\x01Q\x84a\x0EKV[\x96Pa\x11<a\x116`@\x80Q\x80\x82\x01\x82R_\x80\x82R` \x91\x82\x01R\x81Q\x80\x83\x01\x90\x92R`\x01\x82R`\x02\x90\x82\x01R\x90V[\x85a\x0EKV[\x97PPPPPPP\x94P\x94\x92PPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R\x81Q` \x83\x01Q\x15\x90\x15\x16\x15a\x11tWP\x90V[`@Q\x80`@\x01`@R\x80\x83_\x01Q\x81R` \x01\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDG\x84` \x01Qa\x11\xB8\x91\x90a!2V[a\x11\xE2\x90\x7F0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X]\x97\x81j\x91hq\xCA\x8D< \x8C\x16\xD8|\xFDGa \xF9V[\x90R\x92\x91PPV[a\x12\x11`@Q\x80`\x80\x01`@R\x80_\x81R` \x01_\x81R` \x01_\x81R` \x01_\x81RP\x90V[`@Q\x80`\x80\x01`@R\x80\x7F\x18\0\xDE\xEF\x12\x1F\x1EvBj\0f^\\DygC\"\xD4\xF7^\xDA\xDDF\xDE\xBD\\\xD9\x92\xF6\xED\x81R` \x01\x7F\x19\x8E\x93\x93\x92\rH:r`\xBF\xB71\xFB]%\xF1\xAAI35\xA9\xE7\x12\x97\xE4\x85\xB7\xAE\xF3\x12\xC2\x81R` \x01\x7F\x12\xC8^\xA5\xDB\x8Cm\xEBJ\xABq\x80\x8D\xCB@\x8F\xE3\xD1\xE7i\x0CC\xD3{L\xE6\xCC\x01f\xFA}\xAA\x81R` \x01\x7F\t\x06\x89\xD0X_\xF0u\xEC\x9E\x99\xADi\x0C3\x95\xBCK13p\xB3\x8E\xF3U\xAC\xDA\xDC\xD1\"\x97[\x81RP\x90P\x90V[___`@Q\x87Q\x81R` \x88\x01Q` \x82\x01R` \x87\x01Q`@\x82\x01R\x86Q``\x82\x01R``\x87\x01Q`\x80\x82\x01R`@\x87\x01Q`\xA0\x82\x01R\x85Q`\xC0\x82\x01R` \x86\x01Q`\xE0\x82\x01R` \x85\x01Qa\x01\0\x82\x01R\x84Qa\x01 \x82\x01R``\x85\x01Qa\x01@\x82\x01R`@\x85\x01Qa\x01`\x82\x01R` _a\x01\x80\x83`\x08Z\xFA\x91PP_Q\x91P\x80a\x13ZW`@Qc\xC2\x063O`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[P\x15\x15\x90P[\x94\x93PPPPV[\x81Q_\x90_Q` a!R_9_Q\x90_R\x90\x83\x80\x15a\x13\xA9W\x84\x93P_[\x82\x81\x10\x15a\x13\x9DW\x83\x85\x86\t\x94P`\x01\x01a\x13\x87V[P`\x01\x84\x03\x93Pa\x13\xB0V[`\x01\x83\x03\x93P[PPP\x92\x91PPV[_\x82`\x01\x03a\x13\xCAWP`\x01a\0\xC9V[\x81_\x03a\x13\xD8WP_a\0\xC9V[` \x84\x01Q_Q` a!R_9_Q\x90_R\x90_\x90\x82\x81\x86\t\x90P\x85\x80\x15a\x14\x06W`\x01\x87\x03\x92Pa\x14\rV[`\x01\x84\x03\x92P[Pa\x14\x17\x82a\x1B+V[\x91P\x82\x82\x82\t\x97\x96PPPPPPPV[__Q` a!R_9_Q\x90_R\x82\x82\x03a\x14\xA1W`\x01_[`\x07\x81\x10\x15a\x14\x96W\x81\x86\x03a\x14sW\x86\x81`\x07\x81\x10a\x14dWa\x14da \xE5V[` \x02\x01Q\x93PPPPa\x13`V[\x82\x80a\x14\x81Wa\x14\x81a!\x1EV[`@\x89\x01Q` \x01Q\x83\t\x91P`\x01\x01a\x14BV[P_\x92PPPa\x13`V[a\x14\xA9a\x1CIV[`@\x87\x01Q`\x01`\xC0\x83\x81\x01\x82\x81R\x92\x01\x90\x80[`\x07\x81\x10\x15a\x14\xEAW` \x84\x03\x93P\x85\x86\x8A\x85Q\x89\x03\x08\x83\t\x80\x85R`\x1F\x19\x90\x93\x01\x92\x91P`\x01\x01a\x14\xBDV[PPPP___\x90P`\x01\x83\x89`@\x8C\x01Q_[`\x07\x81\x10\x15a\x15>W\x88\x82Q\x8A\x85Q\x8C\x88Q\x8A\t\t\t\x89\x81\x88\x08\x96PP\x88\x89\x8D\x84Q\x8C\x03\x08\x86\t\x94P` \x93\x84\x01\x93\x92\x83\x01\x92\x91\x90\x91\x01\x90`\x01\x01a\x14\xFEV[PPPP\x80\x92PP_a\x15P\x83a\x1B+V[\x90P` \x8A\x01Q\x85\x81\x89\t\x96PP\x84\x81\x87\t\x95P\x84\x82\x87\t\x9A\x99PPPPPPPPPPV[`@\x80Q\x80\x82\x01\x90\x91R_\x80\x82R` \x82\x01R______Q` a!R_9_Q\x90_R\x90P`\x80\x89\x01Q\x81` \x8A\x01Q` \x8C\x01Q\t\x95P\x89Q\x94P\x81`\xA0\x8B\x01Q``\x8C\x01Q\t\x93P\x81a\x01\xA0\x89\x01Q\x85\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F/\x8D\xD1\xF1\xA7X<B\xC4\xE1*D\xE1\x10@Ls\xCAl\x94\x81?\x85\x83]\xA4\xFB{\xB10\x1DJ\x85\t\x92P\x81a\x01\xC0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F\x1E\xE6x\xA0G\nu\xA6\xEA\xA8\xFE\x83p`I\x8B\xA8(\xA3p;1\x1D\x0Fw\xF0\x10BJ\xFE\xB0%\x85\t\x92P\x81a\x01\xE0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F B\xA5\x87\xA9\x0C\x18{\n\x08|\x03\xE2\x9C\x96\x8B\x95\x0B\x1D\xB2m\\\x82\xD6f\x90Zh\x95y\x0C\n\x85\t\x92P\x81a\x02\0\x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92P\x81\x85\x84\t\x94P\x81\x7F.+\x91Ea\x03i\x8A\xDFW\xB7\x99\x96\x9D\xEA\x1C\x8Fs\x9D\xA5\xD8\xD4\r\xD3\xEB\x92\"\xDB|\x81\xE8\x81\x85\t\x92P\x81a\x02 \x89\x01Q\x84\x08\x92P\x81\x81\x84\x08\x92PP\x80\x84\x83\t\x93P\x80\x84\x86\x08\x94Pa\x16\xE3\x87`\xA0\x01Q\x86a\x0EKV[\x95P\x88Q``\x8A\x01Q`\x80\x8B\x01Q\x83\x82\x84\t\x97P\x83a\x02\xC0\x8B\x01Q\x89\t\x97P\x83a\x02@\x8B\x01Q\x83\t\x95P\x83a\x01\xA0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02`\x8B\x01Q\x83\t\x95P\x83a\x01\xC0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02\x80\x8B\x01Q\x83\t\x95P\x83a\x01\xE0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95P\x83\x86\x89\t\x97P\x83a\x02\xA0\x8B\x01Q\x83\t\x95P\x83a\x02\0\x8B\x01Q\x87\x08\x95P\x83\x81\x87\x08\x95PPPP\x80\x83\x86\t\x94Pa\x17\xAA\x86a\x02\xDC\x8C`\xC0\x01Q\x88\x85a\x17\xA5\x91\x90a \xF9V[a\x0EKV[\x95Pa\x17\xC3\x86a\x02\xDC\x8C`\xE0\x01Q\x8Aa\x01\xA0\x01Qa\x0EKV[\x95Pa\x17\xDD\x86a\x02\xDC\x8Ca\x01\0\x01Q\x8Aa\x01\xC0\x01Qa\x0EKV[\x95Pa\x17\xF7\x86a\x02\xDC\x8Ca\x01 \x01Q\x8Aa\x01\xE0\x01Qa\x0EKV[\x95Pa\x18\x11\x86a\x02\xDC\x8Ca\x01@\x01Q\x8Aa\x02\0\x01Qa\x0EKV[\x95P\x80a\x01\xC0\x88\x01Qa\x01\xA0\x89\x01Q\t\x92Pa\x186\x86a\x02\xDC\x8Ca\x01`\x01Q\x86a\x0EKV[\x95P\x80a\x02\0\x88\x01Qa\x01\xE0\x89\x01Q\t\x92Pa\x18[\x86a\x02\xDC\x8Ca\x01\x80\x01Q\x86a\x0EKV[\x95Pa\x01\xA0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x18\x8A\x86a\x02\xDC\x8Ca\x01\xE0\x01Q\x86a\x0EKV[\x95Pa\x01\xC0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x18\xB9\x86a\x02\xDC\x8Ca\x02\0\x01Q\x86a\x0EKV[\x95Pa\x01\xE0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x18\xE8\x86a\x02\xDC\x8Ca\x02 \x01Q\x86a\x0EKV[\x95Pa\x02\0\x87\x01Q\x92P\x80\x83\x84\t\x91P\x80\x82\x83\t\x91P\x80\x82\x84\t\x92Pa\x19\x17\x86a\x02\xDC\x8Ca\x02@\x01Q\x86a\x0EKV[\x95Pa\x194\x86a\x02\xDC\x8Ca\x01\xA0\x01Qa\x17\xA5\x8Ba\x02 \x01Qa\x1B\xBDV[\x95Pa\x19E\x86\x8Ba\x01\xC0\x01Qa\x0E\xAEV[\x95P\x80a\x01\xC0\x88\x01Qa\x01\xA0\x89\x01Q\t\x92P\x80a\x01\xE0\x88\x01Q\x84\t\x92P\x80a\x02\0\x88\x01Q\x84\t\x92P\x80a\x02 \x88\x01Q\x84\t\x92Pa\x19\x8B\x86a\x02\xDC\x8Ca\x02`\x01Q\x86a\x0EKV[\x95Pa\x19\x99\x88_\x01Qa\x1B\xBDV[\x94Pa\x19\xAD\x86a\x02\xDC\x89`\xC0\x01Q\x88a\x0EKV[\x95P\x80`\x01\x89Q\x08`\xA0\x8A\x01Q\x90\x93P\x81\x90\x80\t\x91P\x80\x82\x84\t\x92P\x80\x83\x86\t\x94Pa\x19\xE1\x86a\x02\xDC\x89`\xE0\x01Q\x88a\x0EKV[\x95P\x80\x83\x86\t\x94Pa\x19\xFC\x86a\x02\xDC\x89a\x01\0\x01Q\x88a\x0EKV[\x95P\x80\x83\x86\t\x94Pa\x1A\x17\x86a\x02\xDC\x89a\x01 \x01Q\x88a\x0EKV[\x95P\x80\x83\x86\t\x94Pa\x1A2\x86a\x02\xDC\x89a\x01@\x01Q\x88a\x0EKV[\x9A\x99PPPPPPPPPPV[___Q` a!R_9_Q\x90_R\x90P_\x83` \x01Q\x90P_\x84`@\x01Q\x90P_`\x01\x90P``\x88\x01Q`\x80\x89\x01Qa\x01\xA0\x89\x01Qa\x02@\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x01\xC0\x89\x01Qa\x02`\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x01\xE0\x89\x01Qa\x02\x80\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x02\0\x89\x01Qa\x02\xA0\x8A\x01Q\x87\x88\x89\x83\x87\t\x8A\x86\x86\x08\x08\x86\t\x94PPPa\x02 \x89\x01Q\x91Pa\x02\xC0\x89\x01Q\x86\x87\x82\x89\x85\x87\x08\t\x85\t\x93PPPP\x87Q` \x89\x01Q\x85\x86\x86\x83\t\x87\x03\x85\x08\x96PP\x84\x85\x83\x83\t\x86\x03\x87\x08\x99\x98PPPPPPPPPV[_\x81_\x03a\x1BLW`@Qc\xD6\xDB\xBB\r`\xE0\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[___Q` a!R_9_Q\x90_R\x90P`@Q` \x81R` \x80\x82\x01R` `@\x82\x01R\x84``\x82\x01R`\x02\x82\x03`\x80\x82\x01R\x81`\xA0\x82\x01R` _`\xC0\x83`\x05Z\xFA\x92PP_Q\x92P\x81a\x1B\xB6W`@Qc\x0C\x9D>\x99`\xE2\x1B\x81R`\x04\x01`@Q\x80\x91\x03\x90\xFD[PP\x91\x90PV[__Q` a!R_9_Q\x90_R\x82\x15`\x01\x81\x14a\x1B\xE0W\x83\x82\x03\x92Pa\x1B\xB6V[P_\x93\x92PPPV[`@Q\x80``\x01`@R\x80_\x81R` \x01_\x81R` \x01a\x1C\x08a\x1CIV[\x90R\x90V[`@Q\x80``\x01`@R\x80`\x03\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\x80\x01`@R\x80`\x04\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[`@Q\x80`\xE0\x01`@R\x80`\x07\x90` \x82\x02\x806\x837P\x91\x92\x91PPV[cNH{q`\xE0\x1B_R`A`\x04R`$_\xFD[`@Qa\x02\xE0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1C\x9FWa\x1C\x9Fa\x1CgV[`@R\x90V[`@Qa\x02\xC0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1C\x9FWa\x1C\x9Fa\x1CgV[_`@\x82\x84\x03\x12\x15a\x1C\xD9W__\xFD[`@\x80Q\x90\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1C\xFCWa\x1C\xFCa\x1CgV[`@R\x825\x81R` \x92\x83\x015\x92\x81\x01\x92\x90\x92RP\x91\x90PV[_\x82`\x1F\x83\x01\x12a\x1D%W__\xFD[`@Q`\xE0\x81\x01g\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x81\x11\x82\x82\x10\x17\x15a\x1DHWa\x1DHa\x1CgV[`@R\x80`\xE0\x84\x01\x85\x81\x11\x15a\x1D\\W__\xFD[\x84[\x81\x81\x10\x15a\x1DvW\x805\x83R` \x92\x83\x01\x92\x01a\x1D^V[P\x91\x95\x94PPPPPV[_a\x04\x80\x82\x84\x03\x12\x15a\x1D\x92W__\xFD[a\x1D\x9Aa\x1C{V[\x90Pa\x1D\xA6\x83\x83a\x1C\xC9V[\x81Ra\x1D\xB5\x83`@\x84\x01a\x1C\xC9V[` \x82\x01Ra\x1D\xC7\x83`\x80\x84\x01a\x1C\xC9V[`@\x82\x01Ra\x1D\xD9\x83`\xC0\x84\x01a\x1C\xC9V[``\x82\x01Ra\x1D\xEC\x83a\x01\0\x84\x01a\x1C\xC9V[`\x80\x82\x01Ra\x1D\xFF\x83a\x01@\x84\x01a\x1C\xC9V[`\xA0\x82\x01Ra\x1E\x12\x83a\x01\x80\x84\x01a\x1C\xC9V[`\xC0\x82\x01Ra\x1E%\x83a\x01\xC0\x84\x01a\x1C\xC9V[`\xE0\x82\x01Ra\x1E8\x83a\x02\0\x84\x01a\x1C\xC9V[a\x01\0\x82\x01Ra\x1EL\x83a\x02@\x84\x01a\x1C\xC9V[a\x01 \x82\x01Ra\x1E`\x83a\x02\x80\x84\x01a\x1C\xC9V[a\x01@\x82\x01Ra\x1Et\x83a\x02\xC0\x84\x01a\x1C\xC9V[a\x01`\x82\x01Ra\x1E\x88\x83a\x03\0\x84\x01a\x1C\xC9V[a\x01\x80\x82\x01Ra\x03@\x82\x015a\x01\xA0\x82\x01Ra\x03`\x82\x015a\x01\xC0\x82\x01Ra\x03\x80\x82\x015a\x01\xE0\x82\x01Ra\x03\xA0\x82\x015a\x02\0\x82\x01Ra\x03\xC0\x82\x015a\x02 \x82\x01Ra\x03\xE0\x82\x015a\x02@\x82\x01Ra\x04\0\x82\x015a\x02`\x82\x01Ra\x04 \x82\x015a\x02\x80\x82\x01Ra\x04@\x82\x015a\x02\xA0\x82\x01Ra\x04`\x90\x91\x015a\x02\xC0\x82\x01R\x91\x90PV[___\x83\x85\x03a\n`\x81\x12\x15a\x1F W__\xFD[a\x05\0\x81\x12\x15a\x1F.W__\xFD[Pa\x1F7a\x1C\xA5V[\x845\x81R` \x80\x86\x015\x90\x82\x01Ra\x1FR\x86`@\x87\x01a\x1C\xC9V[`@\x82\x01Ra\x1Fd\x86`\x80\x87\x01a\x1C\xC9V[``\x82\x01Ra\x1Fv\x86`\xC0\x87\x01a\x1C\xC9V[`\x80\x82\x01Ra\x1F\x89\x86a\x01\0\x87\x01a\x1C\xC9V[`\xA0\x82\x01Ra\x1F\x9C\x86a\x01@\x87\x01a\x1C\xC9V[`\xC0\x82\x01Ra\x1F\xAF\x86a\x01\x80\x87\x01a\x1C\xC9V[`\xE0\x82\x01Ra\x1F\xC2\x86a\x01\xC0\x87\x01a\x1C\xC9V[a\x01\0\x82\x01Ra\x1F\xD6\x86a\x02\0\x87\x01a\x1C\xC9V[a\x01 \x82\x01Ra\x1F\xEA\x86a\x02@\x87\x01a\x1C\xC9V[a\x01@\x82\x01Ra\x1F\xFE\x86a\x02\x80\x87\x01a\x1C\xC9V[a\x01`\x82\x01Ra \x12\x86a\x02\xC0\x87\x01a\x1C\xC9V[a\x01\x80\x82\x01Ra &\x86a\x03\0\x87\x01a\x1C\xC9V[a\x01\xA0\x82\x01Ra :\x86a\x03@\x87\x01a\x1C\xC9V[a\x01\xC0\x82\x01Ra N\x86a\x03\x80\x87\x01a\x1C\xC9V[a\x01\xE0\x82\x01Ra b\x86a\x03\xC0\x87\x01a\x1C\xC9V[a\x02\0\x82\x01Ra v\x86a\x04\0\x87\x01a\x1C\xC9V[a\x02 \x82\x01Ra \x8A\x86a\x04@\x87\x01a\x1C\xC9V[a\x02@\x82\x01Ra \x9E\x86a\x04\x80\x87\x01a\x1C\xC9V[a\x02`\x82\x01Ra\x04\xC0\x85\x015a\x02\x80\x82\x01Ra\x04\xE0\x85\x015a\x02\xA0\x82\x01R\x92Pa \xCC\x85a\x05\0\x86\x01a\x1D\x16V[\x91Pa \xDC\x85a\x05\xE0\x86\x01a\x1D\x81V[\x90P\x92P\x92P\x92V[cNH{q`\xE0\x1B_R`2`\x04R`$_\xFD[\x81\x81\x03\x81\x81\x11\x15a!\x18WcNH{q`\xE0\x1B_R`\x11`\x04R`$_\xFD[\x92\x91PPV[cNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[_\x82a!LWcNH{q`\xE0\x1B_R`\x12`\x04R`$_\xFD[P\x06\x90V\xFE0dNr\xE11\xA0)\xB8PE\xB6\x81\x81X](3\xE8Hy\xB9p\x91C\xE1\xF5\x93\xF0\0\0\x01\xA1dsolcC\0\x08#\0\n",
3029    );
3030    #[derive(serde::Serialize, serde::Deserialize)]
3031    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3032    /**Custom error with signature `BN254G1AddFailed()` and selector `0x6055db6a`.
3033```solidity
3034error BN254G1AddFailed();
3035```*/
3036    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3037    #[derive(Clone)]
3038    pub struct BN254G1AddFailed;
3039    #[allow(
3040        non_camel_case_types,
3041        non_snake_case,
3042        clippy::pub_underscore_fields,
3043        clippy::style
3044    )]
3045    const _: () = {
3046        use alloy::sol_types as alloy_sol_types;
3047        #[doc(hidden)]
3048        #[allow(dead_code)]
3049        type UnderlyingSolTuple<'a> = ();
3050        #[doc(hidden)]
3051        type UnderlyingRustTuple<'a> = ();
3052        #[cfg(test)]
3053        #[allow(dead_code, unreachable_patterns)]
3054        fn _type_assertion(
3055            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3056        ) {
3057            match _t {
3058                alloy_sol_types::private::AssertTypeEq::<
3059                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3060                >(_) => {}
3061            }
3062        }
3063        #[automatically_derived]
3064        #[doc(hidden)]
3065        impl ::core::convert::From<BN254G1AddFailed> for UnderlyingRustTuple<'_> {
3066            fn from(value: BN254G1AddFailed) -> Self {
3067                ()
3068            }
3069        }
3070        #[automatically_derived]
3071        #[doc(hidden)]
3072        impl ::core::convert::From<UnderlyingRustTuple<'_>> for BN254G1AddFailed {
3073            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3074                Self
3075            }
3076        }
3077        #[automatically_derived]
3078        impl alloy_sol_types::SolError for BN254G1AddFailed {
3079            type Parameters<'a> = UnderlyingSolTuple<'a>;
3080            type Token<'a> = <Self::Parameters<
3081                'a,
3082            > as alloy_sol_types::SolType>::Token<'a>;
3083            const SIGNATURE: &'static str = "BN254G1AddFailed()";
3084            const SELECTOR: [u8; 4] = [96u8, 85u8, 219u8, 106u8];
3085            #[inline]
3086            fn new<'a>(
3087                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3088            ) -> Self {
3089                tuple.into()
3090            }
3091            #[inline]
3092            fn tokenize(&self) -> Self::Token<'_> {
3093                ()
3094            }
3095            #[inline]
3096            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3097                Self::abi_decode_raw_with_config(
3098                    data,
3099                    alloy_sol_types::abi::AbiDecoderConfig::new().validate(true),
3100                )
3101            }
3102        }
3103    };
3104    #[derive(serde::Serialize, serde::Deserialize)]
3105    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3106    /**Custom error with signature `BN254PairingProdFailed()` and selector `0xc206334f`.
3107```solidity
3108error BN254PairingProdFailed();
3109```*/
3110    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3111    #[derive(Clone)]
3112    pub struct BN254PairingProdFailed;
3113    #[allow(
3114        non_camel_case_types,
3115        non_snake_case,
3116        clippy::pub_underscore_fields,
3117        clippy::style
3118    )]
3119    const _: () = {
3120        use alloy::sol_types as alloy_sol_types;
3121        #[doc(hidden)]
3122        #[allow(dead_code)]
3123        type UnderlyingSolTuple<'a> = ();
3124        #[doc(hidden)]
3125        type UnderlyingRustTuple<'a> = ();
3126        #[cfg(test)]
3127        #[allow(dead_code, unreachable_patterns)]
3128        fn _type_assertion(
3129            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3130        ) {
3131            match _t {
3132                alloy_sol_types::private::AssertTypeEq::<
3133                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3134                >(_) => {}
3135            }
3136        }
3137        #[automatically_derived]
3138        #[doc(hidden)]
3139        impl ::core::convert::From<BN254PairingProdFailed> for UnderlyingRustTuple<'_> {
3140            fn from(value: BN254PairingProdFailed) -> Self {
3141                ()
3142            }
3143        }
3144        #[automatically_derived]
3145        #[doc(hidden)]
3146        impl ::core::convert::From<UnderlyingRustTuple<'_>> for BN254PairingProdFailed {
3147            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3148                Self
3149            }
3150        }
3151        #[automatically_derived]
3152        impl alloy_sol_types::SolError for BN254PairingProdFailed {
3153            type Parameters<'a> = UnderlyingSolTuple<'a>;
3154            type Token<'a> = <Self::Parameters<
3155                'a,
3156            > as alloy_sol_types::SolType>::Token<'a>;
3157            const SIGNATURE: &'static str = "BN254PairingProdFailed()";
3158            const SELECTOR: [u8; 4] = [194u8, 6u8, 51u8, 79u8];
3159            #[inline]
3160            fn new<'a>(
3161                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3162            ) -> Self {
3163                tuple.into()
3164            }
3165            #[inline]
3166            fn tokenize(&self) -> Self::Token<'_> {
3167                ()
3168            }
3169            #[inline]
3170            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3171                Self::abi_decode_raw_with_config(
3172                    data,
3173                    alloy_sol_types::abi::AbiDecoderConfig::new().validate(true),
3174                )
3175            }
3176        }
3177    };
3178    #[derive(serde::Serialize, serde::Deserialize)]
3179    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3180    /**Custom error with signature `BN254ScalarInvZero()` and selector `0xd6dbbb0d`.
3181```solidity
3182error BN254ScalarInvZero();
3183```*/
3184    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3185    #[derive(Clone)]
3186    pub struct BN254ScalarInvZero;
3187    #[allow(
3188        non_camel_case_types,
3189        non_snake_case,
3190        clippy::pub_underscore_fields,
3191        clippy::style
3192    )]
3193    const _: () = {
3194        use alloy::sol_types as alloy_sol_types;
3195        #[doc(hidden)]
3196        #[allow(dead_code)]
3197        type UnderlyingSolTuple<'a> = ();
3198        #[doc(hidden)]
3199        type UnderlyingRustTuple<'a> = ();
3200        #[cfg(test)]
3201        #[allow(dead_code, unreachable_patterns)]
3202        fn _type_assertion(
3203            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3204        ) {
3205            match _t {
3206                alloy_sol_types::private::AssertTypeEq::<
3207                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3208                >(_) => {}
3209            }
3210        }
3211        #[automatically_derived]
3212        #[doc(hidden)]
3213        impl ::core::convert::From<BN254ScalarInvZero> for UnderlyingRustTuple<'_> {
3214            fn from(value: BN254ScalarInvZero) -> Self {
3215                ()
3216            }
3217        }
3218        #[automatically_derived]
3219        #[doc(hidden)]
3220        impl ::core::convert::From<UnderlyingRustTuple<'_>> for BN254ScalarInvZero {
3221            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3222                Self
3223            }
3224        }
3225        #[automatically_derived]
3226        impl alloy_sol_types::SolError for BN254ScalarInvZero {
3227            type Parameters<'a> = UnderlyingSolTuple<'a>;
3228            type Token<'a> = <Self::Parameters<
3229                'a,
3230            > as alloy_sol_types::SolType>::Token<'a>;
3231            const SIGNATURE: &'static str = "BN254ScalarInvZero()";
3232            const SELECTOR: [u8; 4] = [214u8, 219u8, 187u8, 13u8];
3233            #[inline]
3234            fn new<'a>(
3235                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3236            ) -> Self {
3237                tuple.into()
3238            }
3239            #[inline]
3240            fn tokenize(&self) -> Self::Token<'_> {
3241                ()
3242            }
3243            #[inline]
3244            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3245                Self::abi_decode_raw_with_config(
3246                    data,
3247                    alloy_sol_types::abi::AbiDecoderConfig::new().validate(true),
3248                )
3249            }
3250        }
3251    };
3252    #[derive(serde::Serialize, serde::Deserialize)]
3253    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3254    /**Custom error with signature `BN254ScalarMulFailed()` and selector `0x19db8a68`.
3255```solidity
3256error BN254ScalarMulFailed();
3257```*/
3258    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3259    #[derive(Clone)]
3260    pub struct BN254ScalarMulFailed;
3261    #[allow(
3262        non_camel_case_types,
3263        non_snake_case,
3264        clippy::pub_underscore_fields,
3265        clippy::style
3266    )]
3267    const _: () = {
3268        use alloy::sol_types as alloy_sol_types;
3269        #[doc(hidden)]
3270        #[allow(dead_code)]
3271        type UnderlyingSolTuple<'a> = ();
3272        #[doc(hidden)]
3273        type UnderlyingRustTuple<'a> = ();
3274        #[cfg(test)]
3275        #[allow(dead_code, unreachable_patterns)]
3276        fn _type_assertion(
3277            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3278        ) {
3279            match _t {
3280                alloy_sol_types::private::AssertTypeEq::<
3281                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3282                >(_) => {}
3283            }
3284        }
3285        #[automatically_derived]
3286        #[doc(hidden)]
3287        impl ::core::convert::From<BN254ScalarMulFailed> for UnderlyingRustTuple<'_> {
3288            fn from(value: BN254ScalarMulFailed) -> Self {
3289                ()
3290            }
3291        }
3292        #[automatically_derived]
3293        #[doc(hidden)]
3294        impl ::core::convert::From<UnderlyingRustTuple<'_>> for BN254ScalarMulFailed {
3295            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3296                Self
3297            }
3298        }
3299        #[automatically_derived]
3300        impl alloy_sol_types::SolError for BN254ScalarMulFailed {
3301            type Parameters<'a> = UnderlyingSolTuple<'a>;
3302            type Token<'a> = <Self::Parameters<
3303                'a,
3304            > as alloy_sol_types::SolType>::Token<'a>;
3305            const SIGNATURE: &'static str = "BN254ScalarMulFailed()";
3306            const SELECTOR: [u8; 4] = [25u8, 219u8, 138u8, 104u8];
3307            #[inline]
3308            fn new<'a>(
3309                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3310            ) -> Self {
3311                tuple.into()
3312            }
3313            #[inline]
3314            fn tokenize(&self) -> Self::Token<'_> {
3315                ()
3316            }
3317            #[inline]
3318            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3319                Self::abi_decode_raw_with_config(
3320                    data,
3321                    alloy_sol_types::abi::AbiDecoderConfig::new().validate(true),
3322                )
3323            }
3324        }
3325    };
3326    #[derive(serde::Serialize, serde::Deserialize)]
3327    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3328    /**Custom error with signature `InvalidG1()` and selector `0x9e78d14c`.
3329```solidity
3330error InvalidG1();
3331```*/
3332    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3333    #[derive(Clone)]
3334    pub struct InvalidG1;
3335    #[allow(
3336        non_camel_case_types,
3337        non_snake_case,
3338        clippy::pub_underscore_fields,
3339        clippy::style
3340    )]
3341    const _: () = {
3342        use alloy::sol_types as alloy_sol_types;
3343        #[doc(hidden)]
3344        #[allow(dead_code)]
3345        type UnderlyingSolTuple<'a> = ();
3346        #[doc(hidden)]
3347        type UnderlyingRustTuple<'a> = ();
3348        #[cfg(test)]
3349        #[allow(dead_code, unreachable_patterns)]
3350        fn _type_assertion(
3351            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3352        ) {
3353            match _t {
3354                alloy_sol_types::private::AssertTypeEq::<
3355                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3356                >(_) => {}
3357            }
3358        }
3359        #[automatically_derived]
3360        #[doc(hidden)]
3361        impl ::core::convert::From<InvalidG1> for UnderlyingRustTuple<'_> {
3362            fn from(value: InvalidG1) -> Self {
3363                ()
3364            }
3365        }
3366        #[automatically_derived]
3367        #[doc(hidden)]
3368        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidG1 {
3369            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3370                Self
3371            }
3372        }
3373        #[automatically_derived]
3374        impl alloy_sol_types::SolError for InvalidG1 {
3375            type Parameters<'a> = UnderlyingSolTuple<'a>;
3376            type Token<'a> = <Self::Parameters<
3377                'a,
3378            > as alloy_sol_types::SolType>::Token<'a>;
3379            const SIGNATURE: &'static str = "InvalidG1()";
3380            const SELECTOR: [u8; 4] = [158u8, 120u8, 209u8, 76u8];
3381            #[inline]
3382            fn new<'a>(
3383                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3384            ) -> Self {
3385                tuple.into()
3386            }
3387            #[inline]
3388            fn tokenize(&self) -> Self::Token<'_> {
3389                ()
3390            }
3391            #[inline]
3392            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3393                Self::abi_decode_raw_with_config(
3394                    data,
3395                    alloy_sol_types::abi::AbiDecoderConfig::new().validate(true),
3396                )
3397            }
3398        }
3399    };
3400    #[derive(serde::Serialize, serde::Deserialize)]
3401    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3402    /**Custom error with signature `InvalidPlonkArgs()` and selector `0xfd9a2d1b`.
3403```solidity
3404error InvalidPlonkArgs();
3405```*/
3406    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3407    #[derive(Clone)]
3408    pub struct InvalidPlonkArgs;
3409    #[allow(
3410        non_camel_case_types,
3411        non_snake_case,
3412        clippy::pub_underscore_fields,
3413        clippy::style
3414    )]
3415    const _: () = {
3416        use alloy::sol_types as alloy_sol_types;
3417        #[doc(hidden)]
3418        #[allow(dead_code)]
3419        type UnderlyingSolTuple<'a> = ();
3420        #[doc(hidden)]
3421        type UnderlyingRustTuple<'a> = ();
3422        #[cfg(test)]
3423        #[allow(dead_code, unreachable_patterns)]
3424        fn _type_assertion(
3425            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3426        ) {
3427            match _t {
3428                alloy_sol_types::private::AssertTypeEq::<
3429                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3430                >(_) => {}
3431            }
3432        }
3433        #[automatically_derived]
3434        #[doc(hidden)]
3435        impl ::core::convert::From<InvalidPlonkArgs> for UnderlyingRustTuple<'_> {
3436            fn from(value: InvalidPlonkArgs) -> Self {
3437                ()
3438            }
3439        }
3440        #[automatically_derived]
3441        #[doc(hidden)]
3442        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidPlonkArgs {
3443            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3444                Self
3445            }
3446        }
3447        #[automatically_derived]
3448        impl alloy_sol_types::SolError for InvalidPlonkArgs {
3449            type Parameters<'a> = UnderlyingSolTuple<'a>;
3450            type Token<'a> = <Self::Parameters<
3451                'a,
3452            > as alloy_sol_types::SolType>::Token<'a>;
3453            const SIGNATURE: &'static str = "InvalidPlonkArgs()";
3454            const SELECTOR: [u8; 4] = [253u8, 154u8, 45u8, 27u8];
3455            #[inline]
3456            fn new<'a>(
3457                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3458            ) -> Self {
3459                tuple.into()
3460            }
3461            #[inline]
3462            fn tokenize(&self) -> Self::Token<'_> {
3463                ()
3464            }
3465            #[inline]
3466            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3467                Self::abi_decode_raw_with_config(
3468                    data,
3469                    alloy_sol_types::abi::AbiDecoderConfig::new().validate(true),
3470                )
3471            }
3472        }
3473    };
3474    #[derive(serde::Serialize, serde::Deserialize)]
3475    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3476    /**Custom error with signature `InvalidScalar()` and selector `0x05b05ccc`.
3477```solidity
3478error InvalidScalar();
3479```*/
3480    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3481    #[derive(Clone)]
3482    pub struct InvalidScalar;
3483    #[allow(
3484        non_camel_case_types,
3485        non_snake_case,
3486        clippy::pub_underscore_fields,
3487        clippy::style
3488    )]
3489    const _: () = {
3490        use alloy::sol_types as alloy_sol_types;
3491        #[doc(hidden)]
3492        #[allow(dead_code)]
3493        type UnderlyingSolTuple<'a> = ();
3494        #[doc(hidden)]
3495        type UnderlyingRustTuple<'a> = ();
3496        #[cfg(test)]
3497        #[allow(dead_code, unreachable_patterns)]
3498        fn _type_assertion(
3499            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3500        ) {
3501            match _t {
3502                alloy_sol_types::private::AssertTypeEq::<
3503                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3504                >(_) => {}
3505            }
3506        }
3507        #[automatically_derived]
3508        #[doc(hidden)]
3509        impl ::core::convert::From<InvalidScalar> for UnderlyingRustTuple<'_> {
3510            fn from(value: InvalidScalar) -> Self {
3511                ()
3512            }
3513        }
3514        #[automatically_derived]
3515        #[doc(hidden)]
3516        impl ::core::convert::From<UnderlyingRustTuple<'_>> for InvalidScalar {
3517            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3518                Self
3519            }
3520        }
3521        #[automatically_derived]
3522        impl alloy_sol_types::SolError for InvalidScalar {
3523            type Parameters<'a> = UnderlyingSolTuple<'a>;
3524            type Token<'a> = <Self::Parameters<
3525                'a,
3526            > as alloy_sol_types::SolType>::Token<'a>;
3527            const SIGNATURE: &'static str = "InvalidScalar()";
3528            const SELECTOR: [u8; 4] = [5u8, 176u8, 92u8, 204u8];
3529            #[inline]
3530            fn new<'a>(
3531                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3532            ) -> Self {
3533                tuple.into()
3534            }
3535            #[inline]
3536            fn tokenize(&self) -> Self::Token<'_> {
3537                ()
3538            }
3539            #[inline]
3540            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3541                Self::abi_decode_raw_with_config(
3542                    data,
3543                    alloy_sol_types::abi::AbiDecoderConfig::new().validate(true),
3544                )
3545            }
3546        }
3547    };
3548    #[derive(serde::Serialize, serde::Deserialize)]
3549    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3550    /**Custom error with signature `PowPrecompileFailed()` and selector `0x3274fa64`.
3551```solidity
3552error PowPrecompileFailed();
3553```*/
3554    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3555    #[derive(Clone)]
3556    pub struct PowPrecompileFailed;
3557    #[allow(
3558        non_camel_case_types,
3559        non_snake_case,
3560        clippy::pub_underscore_fields,
3561        clippy::style
3562    )]
3563    const _: () = {
3564        use alloy::sol_types as alloy_sol_types;
3565        #[doc(hidden)]
3566        #[allow(dead_code)]
3567        type UnderlyingSolTuple<'a> = ();
3568        #[doc(hidden)]
3569        type UnderlyingRustTuple<'a> = ();
3570        #[cfg(test)]
3571        #[allow(dead_code, unreachable_patterns)]
3572        fn _type_assertion(
3573            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3574        ) {
3575            match _t {
3576                alloy_sol_types::private::AssertTypeEq::<
3577                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3578                >(_) => {}
3579            }
3580        }
3581        #[automatically_derived]
3582        #[doc(hidden)]
3583        impl ::core::convert::From<PowPrecompileFailed> for UnderlyingRustTuple<'_> {
3584            fn from(value: PowPrecompileFailed) -> Self {
3585                ()
3586            }
3587        }
3588        #[automatically_derived]
3589        #[doc(hidden)]
3590        impl ::core::convert::From<UnderlyingRustTuple<'_>> for PowPrecompileFailed {
3591            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3592                Self
3593            }
3594        }
3595        #[automatically_derived]
3596        impl alloy_sol_types::SolError for PowPrecompileFailed {
3597            type Parameters<'a> = UnderlyingSolTuple<'a>;
3598            type Token<'a> = <Self::Parameters<
3599                'a,
3600            > as alloy_sol_types::SolType>::Token<'a>;
3601            const SIGNATURE: &'static str = "PowPrecompileFailed()";
3602            const SELECTOR: [u8; 4] = [50u8, 116u8, 250u8, 100u8];
3603            #[inline]
3604            fn new<'a>(
3605                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3606            ) -> Self {
3607                tuple.into()
3608            }
3609            #[inline]
3610            fn tokenize(&self) -> Self::Token<'_> {
3611                ()
3612            }
3613            #[inline]
3614            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3615                Self::abi_decode_raw_with_config(
3616                    data,
3617                    alloy_sol_types::abi::AbiDecoderConfig::new().validate(true),
3618                )
3619            }
3620        }
3621    };
3622    #[derive(serde::Serialize, serde::Deserialize)]
3623    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3624    /**Custom error with signature `UnsupportedDegree()` and selector `0xe2ef09e5`.
3625```solidity
3626error UnsupportedDegree();
3627```*/
3628    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3629    #[derive(Clone)]
3630    pub struct UnsupportedDegree;
3631    #[allow(
3632        non_camel_case_types,
3633        non_snake_case,
3634        clippy::pub_underscore_fields,
3635        clippy::style
3636    )]
3637    const _: () = {
3638        use alloy::sol_types as alloy_sol_types;
3639        #[doc(hidden)]
3640        #[allow(dead_code)]
3641        type UnderlyingSolTuple<'a> = ();
3642        #[doc(hidden)]
3643        type UnderlyingRustTuple<'a> = ();
3644        #[cfg(test)]
3645        #[allow(dead_code, unreachable_patterns)]
3646        fn _type_assertion(
3647            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3648        ) {
3649            match _t {
3650                alloy_sol_types::private::AssertTypeEq::<
3651                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3652                >(_) => {}
3653            }
3654        }
3655        #[automatically_derived]
3656        #[doc(hidden)]
3657        impl ::core::convert::From<UnsupportedDegree> for UnderlyingRustTuple<'_> {
3658            fn from(value: UnsupportedDegree) -> Self {
3659                ()
3660            }
3661        }
3662        #[automatically_derived]
3663        #[doc(hidden)]
3664        impl ::core::convert::From<UnderlyingRustTuple<'_>> for UnsupportedDegree {
3665            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3666                Self
3667            }
3668        }
3669        #[automatically_derived]
3670        impl alloy_sol_types::SolError for UnsupportedDegree {
3671            type Parameters<'a> = UnderlyingSolTuple<'a>;
3672            type Token<'a> = <Self::Parameters<
3673                'a,
3674            > as alloy_sol_types::SolType>::Token<'a>;
3675            const SIGNATURE: &'static str = "UnsupportedDegree()";
3676            const SELECTOR: [u8; 4] = [226u8, 239u8, 9u8, 229u8];
3677            #[inline]
3678            fn new<'a>(
3679                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3680            ) -> Self {
3681                tuple.into()
3682            }
3683            #[inline]
3684            fn tokenize(&self) -> Self::Token<'_> {
3685                ()
3686            }
3687            #[inline]
3688            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3689                Self::abi_decode_raw_with_config(
3690                    data,
3691                    alloy_sol_types::abi::AbiDecoderConfig::new().validate(true),
3692                )
3693            }
3694        }
3695    };
3696    #[derive(serde::Serialize, serde::Deserialize)]
3697    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3698    /**Custom error with signature `WrongPlonkVK()` and selector `0x41f53b12`.
3699```solidity
3700error WrongPlonkVK();
3701```*/
3702    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3703    #[derive(Clone)]
3704    pub struct WrongPlonkVK;
3705    #[allow(
3706        non_camel_case_types,
3707        non_snake_case,
3708        clippy::pub_underscore_fields,
3709        clippy::style
3710    )]
3711    const _: () = {
3712        use alloy::sol_types as alloy_sol_types;
3713        #[doc(hidden)]
3714        #[allow(dead_code)]
3715        type UnderlyingSolTuple<'a> = ();
3716        #[doc(hidden)]
3717        type UnderlyingRustTuple<'a> = ();
3718        #[cfg(test)]
3719        #[allow(dead_code, unreachable_patterns)]
3720        fn _type_assertion(
3721            _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3722        ) {
3723            match _t {
3724                alloy_sol_types::private::AssertTypeEq::<
3725                    <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3726                >(_) => {}
3727            }
3728        }
3729        #[automatically_derived]
3730        #[doc(hidden)]
3731        impl ::core::convert::From<WrongPlonkVK> for UnderlyingRustTuple<'_> {
3732            fn from(value: WrongPlonkVK) -> Self {
3733                ()
3734            }
3735        }
3736        #[automatically_derived]
3737        #[doc(hidden)]
3738        impl ::core::convert::From<UnderlyingRustTuple<'_>> for WrongPlonkVK {
3739            fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3740                Self
3741            }
3742        }
3743        #[automatically_derived]
3744        impl alloy_sol_types::SolError for WrongPlonkVK {
3745            type Parameters<'a> = UnderlyingSolTuple<'a>;
3746            type Token<'a> = <Self::Parameters<
3747                'a,
3748            > as alloy_sol_types::SolType>::Token<'a>;
3749            const SIGNATURE: &'static str = "WrongPlonkVK()";
3750            const SELECTOR: [u8; 4] = [65u8, 245u8, 59u8, 18u8];
3751            #[inline]
3752            fn new<'a>(
3753                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3754            ) -> Self {
3755                tuple.into()
3756            }
3757            #[inline]
3758            fn tokenize(&self) -> Self::Token<'_> {
3759                ()
3760            }
3761            #[inline]
3762            fn abi_decode_raw_validate(data: &[u8]) -> alloy_sol_types::Result<Self> {
3763                Self::abi_decode_raw_with_config(
3764                    data,
3765                    alloy_sol_types::abi::AbiDecoderConfig::new().validate(true),
3766                )
3767            }
3768        }
3769    };
3770    #[derive(serde::Serialize, serde::Deserialize)]
3771    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3772    /**Function with signature `verify((uint256,uint256,(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),bytes32,bytes32),uint256[7],((uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))` and selector `0x77ae3f07`.
3773```solidity
3774function verify(IPlonkVerifier.VerifyingKey memory verifyingKey, uint256[7] memory publicInput, IPlonkVerifier.PlonkProof memory proof) external view returns (bool);
3775```*/
3776    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3777    #[derive(Clone)]
3778    pub struct verifyCall {
3779        #[allow(missing_docs)]
3780        pub verifyingKey: <IPlonkVerifier::VerifyingKey as alloy::sol_types::SolType>::RustType,
3781        #[allow(missing_docs)]
3782        pub publicInput: [alloy::sol_types::private::primitives::aliases::U256; 7usize],
3783        #[allow(missing_docs)]
3784        pub proof: <IPlonkVerifier::PlonkProof as alloy::sol_types::SolType>::RustType,
3785    }
3786    #[derive(serde::Serialize, serde::Deserialize)]
3787    #[derive(Default, Debug, PartialEq, Eq, Hash)]
3788    ///Container type for the return parameters of the [`verify((uint256,uint256,(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),bytes32,bytes32),uint256[7],((uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))`](verifyCall) function.
3789    #[allow(non_camel_case_types, non_snake_case, clippy::pub_underscore_fields)]
3790    #[derive(Clone)]
3791    pub struct verifyReturn {
3792        #[allow(missing_docs)]
3793        pub _0: bool,
3794    }
3795    #[allow(
3796        non_camel_case_types,
3797        non_snake_case,
3798        clippy::pub_underscore_fields,
3799        clippy::style
3800    )]
3801    const _: () = {
3802        use alloy::sol_types as alloy_sol_types;
3803        {
3804            #[doc(hidden)]
3805            #[allow(dead_code)]
3806            type UnderlyingSolTuple<'a> = (
3807                IPlonkVerifier::VerifyingKey,
3808                alloy::sol_types::sol_data::FixedArray<
3809                    alloy::sol_types::sol_data::Uint<256>,
3810                    7usize,
3811                >,
3812                IPlonkVerifier::PlonkProof,
3813            );
3814            #[doc(hidden)]
3815            type UnderlyingRustTuple<'a> = (
3816                <IPlonkVerifier::VerifyingKey as alloy::sol_types::SolType>::RustType,
3817                [alloy::sol_types::private::primitives::aliases::U256; 7usize],
3818                <IPlonkVerifier::PlonkProof as alloy::sol_types::SolType>::RustType,
3819            );
3820            #[cfg(test)]
3821            #[allow(dead_code, unreachable_patterns)]
3822            fn _type_assertion(
3823                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3824            ) {
3825                match _t {
3826                    alloy_sol_types::private::AssertTypeEq::<
3827                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3828                    >(_) => {}
3829                }
3830            }
3831            #[automatically_derived]
3832            #[doc(hidden)]
3833            impl ::core::convert::From<verifyCall> for UnderlyingRustTuple<'_> {
3834                fn from(value: verifyCall) -> Self {
3835                    (value.verifyingKey, value.publicInput, value.proof)
3836                }
3837            }
3838            #[automatically_derived]
3839            #[doc(hidden)]
3840            impl ::core::convert::From<UnderlyingRustTuple<'_>> for verifyCall {
3841                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3842                    Self {
3843                        verifyingKey: tuple.0,
3844                        publicInput: tuple.1,
3845                        proof: tuple.2,
3846                    }
3847                }
3848            }
3849        }
3850        {
3851            #[doc(hidden)]
3852            #[allow(dead_code)]
3853            type UnderlyingSolTuple<'a> = (alloy::sol_types::sol_data::Bool,);
3854            #[doc(hidden)]
3855            type UnderlyingRustTuple<'a> = (bool,);
3856            #[cfg(test)]
3857            #[allow(dead_code, unreachable_patterns)]
3858            fn _type_assertion(
3859                _t: alloy_sol_types::private::AssertTypeEq<UnderlyingRustTuple>,
3860            ) {
3861                match _t {
3862                    alloy_sol_types::private::AssertTypeEq::<
3863                        <UnderlyingSolTuple as alloy_sol_types::SolType>::RustType,
3864                    >(_) => {}
3865                }
3866            }
3867            #[automatically_derived]
3868            #[doc(hidden)]
3869            impl ::core::convert::From<verifyReturn> for UnderlyingRustTuple<'_> {
3870                fn from(value: verifyReturn) -> Self {
3871                    (value._0,)
3872                }
3873            }
3874            #[automatically_derived]
3875            #[doc(hidden)]
3876            impl ::core::convert::From<UnderlyingRustTuple<'_>> for verifyReturn {
3877                fn from(tuple: UnderlyingRustTuple<'_>) -> Self {
3878                    Self { _0: tuple.0 }
3879                }
3880            }
3881        }
3882        #[automatically_derived]
3883        impl alloy_sol_types::SolCall for verifyCall {
3884            type Parameters<'a> = (
3885                IPlonkVerifier::VerifyingKey,
3886                alloy::sol_types::sol_data::FixedArray<
3887                    alloy::sol_types::sol_data::Uint<256>,
3888                    7usize,
3889                >,
3890                IPlonkVerifier::PlonkProof,
3891            );
3892            type Token<'a> = <Self::Parameters<
3893                'a,
3894            > as alloy_sol_types::SolType>::Token<'a>;
3895            type Return = bool;
3896            type ReturnTuple<'a> = (alloy::sol_types::sol_data::Bool,);
3897            type ReturnToken<'a> = <Self::ReturnTuple<
3898                'a,
3899            > as alloy_sol_types::SolType>::Token<'a>;
3900            const SIGNATURE: &'static str = "verify((uint256,uint256,(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),bytes32,bytes32),uint256[7],((uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),(uint256,uint256),uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256,uint256))";
3901            const SELECTOR: [u8; 4] = [119u8, 174u8, 63u8, 7u8];
3902            #[inline]
3903            fn new<'a>(
3904                tuple: <Self::Parameters<'a> as alloy_sol_types::SolType>::RustType,
3905            ) -> Self {
3906                tuple.into()
3907            }
3908            #[inline]
3909            fn tokenize(&self) -> Self::Token<'_> {
3910                (
3911                    <IPlonkVerifier::VerifyingKey as alloy_sol_types::SolType>::tokenize(
3912                        &self.verifyingKey,
3913                    ),
3914                    <alloy::sol_types::sol_data::FixedArray<
3915                        alloy::sol_types::sol_data::Uint<256>,
3916                        7usize,
3917                    > as alloy_sol_types::SolType>::tokenize(&self.publicInput),
3918                    <IPlonkVerifier::PlonkProof as alloy_sol_types::SolType>::tokenize(
3919                        &self.proof,
3920                    ),
3921                )
3922            }
3923            #[inline]
3924            fn tokenize_returns(ret: &Self::Return) -> Self::ReturnToken<'_> {
3925                (
3926                    <alloy::sol_types::sol_data::Bool as alloy_sol_types::SolType>::tokenize(
3927                        ret,
3928                    ),
3929                )
3930            }
3931            #[inline]
3932            fn abi_decode_returns(data: &[u8]) -> alloy_sol_types::Result<Self::Return> {
3933                <Self::ReturnTuple<
3934                    '_,
3935                > as alloy_sol_types::SolType>::abi_decode_sequence(data)
3936                    .map(|r| {
3937                        let r: verifyReturn = r.into();
3938                        r._0
3939                    })
3940            }
3941            #[inline]
3942            fn abi_decode_returns_with_config(
3943                data: &[u8],
3944                config: alloy_sol_types::abi::AbiDecoderConfig,
3945            ) -> alloy_sol_types::Result<Self::Return> {
3946                <Self::ReturnTuple<
3947                    '_,
3948                > as alloy_sol_types::SolType>::abi_decode_sequence_with_config(
3949                        data,
3950                        config,
3951                    )
3952                    .map(|r| {
3953                        let r: verifyReturn = r.into();
3954                        r._0
3955                    })
3956            }
3957            #[inline]
3958            fn abi_decode_returns_validate(
3959                data: &[u8],
3960            ) -> alloy_sol_types::Result<Self::Return> {
3961                Self::abi_decode_returns_with_config(
3962                    data,
3963                    alloy_sol_types::abi::AbiDecoderConfig::new().validate(true),
3964                )
3965            }
3966        }
3967    };
3968    ///Container for all the [`PlonkVerifier`](self) function calls.
3969    #[derive(Clone)]
3970    #[derive(serde::Serialize, serde::Deserialize)]
3971    #[derive(Debug, PartialEq, Eq, Hash)]
3972    pub enum PlonkVerifierCalls {
3973        #[allow(missing_docs)]
3974        verify(verifyCall),
3975    }
3976    impl PlonkVerifierCalls {
3977        /// All the selectors of this enum.
3978        ///
3979        /// Note that the selectors might not be in the same order as the variants.
3980        /// No guarantees are made about the order of the selectors.
3981        ///
3982        /// Prefer using `SolInterface` methods instead.
3983        pub const SELECTORS: &'static [[u8; 4usize]] = &[[119u8, 174u8, 63u8, 7u8]];
3984        /// The names of the variants in the same order as `SELECTORS`.
3985        pub const VARIANT_NAMES: &'static [&'static str] = &[::core::stringify!(verify)];
3986        /// The signatures in the same order as `SELECTORS`.
3987        pub const SIGNATURES: &'static [&'static str] = &[
3988            <verifyCall as alloy_sol_types::SolCall>::SIGNATURE,
3989        ];
3990        /// Returns the signature for the given selector, if known.
3991        #[inline]
3992        pub fn signature_by_selector(
3993            selector: [u8; 4usize],
3994        ) -> ::core::option::Option<&'static str> {
3995            match Self::SELECTORS.binary_search(&selector) {
3996                ::core::result::Result::Ok(idx) => {
3997                    ::core::option::Option::Some(Self::SIGNATURES[idx])
3998                }
3999                ::core::result::Result::Err(_) => ::core::option::Option::None,
4000            }
4001        }
4002        /// Returns the enum variant name for the given selector, if known.
4003        #[inline]
4004        pub fn name_by_selector(
4005            selector: [u8; 4usize],
4006        ) -> ::core::option::Option<&'static str> {
4007            let sig = Self::signature_by_selector(selector)?;
4008            sig.split_once('(').map(|(name, _)| name)
4009        }
4010    }
4011    #[automatically_derived]
4012    impl alloy_sol_types::SolInterface for PlonkVerifierCalls {
4013        const NAME: &'static str = "PlonkVerifierCalls";
4014        const MIN_DATA_LENGTH: usize = 672usize;
4015        const COUNT: usize = 1usize;
4016        #[inline]
4017        fn selector(&self) -> [u8; 4] {
4018            match self {
4019                Self::verify(_) => <verifyCall as alloy_sol_types::SolCall>::SELECTOR,
4020            }
4021        }
4022        #[inline]
4023        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
4024            Self::SELECTORS.get(i).copied()
4025        }
4026        #[inline]
4027        fn valid_selector(selector: [u8; 4]) -> bool {
4028            Self::SELECTORS.binary_search(&selector).is_ok()
4029        }
4030        #[inline]
4031        #[allow(non_snake_case)]
4032        fn abi_decode_raw(
4033            selector: [u8; 4],
4034            data: &[u8],
4035        ) -> alloy_sol_types::Result<Self> {
4036            Self::abi_decode_raw_with_config(
4037                selector,
4038                data,
4039                alloy_sol_types::abi::AbiDecoderConfig::default(),
4040            )
4041        }
4042        #[inline]
4043        #[allow(non_snake_case)]
4044        fn abi_decode_raw_with_config(
4045            selector: [u8; 4],
4046            data: &[u8],
4047            config: alloy_sol_types::abi::AbiDecoderConfig,
4048        ) -> alloy_sol_types::Result<Self> {
4049            static DECODE_SHIMS: &[fn(
4050                &[u8],
4051                alloy_sol_types::abi::AbiDecoderConfig,
4052            ) -> alloy_sol_types::Result<PlonkVerifierCalls>] = &[
4053                {
4054                    fn verify(
4055                        data: &[u8],
4056                        config: alloy_sol_types::abi::AbiDecoderConfig,
4057                    ) -> alloy_sol_types::Result<PlonkVerifierCalls> {
4058                        <verifyCall as alloy_sol_types::SolCall>::abi_decode_raw_with_config(
4059                                data,
4060                                config,
4061                            )
4062                            .map(PlonkVerifierCalls::verify)
4063                    }
4064                    verify
4065                },
4066            ];
4067            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
4068                return Err(
4069                    alloy_sol_types::Error::unknown_selector(
4070                        <Self as alloy_sol_types::SolInterface>::NAME,
4071                        selector,
4072                    ),
4073                );
4074            };
4075            DECODE_SHIMS[idx](data, config)
4076        }
4077        #[inline]
4078        #[allow(non_snake_case)]
4079        fn abi_decode_raw_validate(
4080            selector: [u8; 4],
4081            data: &[u8],
4082        ) -> alloy_sol_types::Result<Self> {
4083            Self::abi_decode_raw_with_config(
4084                selector,
4085                data,
4086                alloy_sol_types::abi::AbiDecoderConfig::new().validate(true),
4087            )
4088        }
4089        #[inline]
4090        fn abi_encoded_size(&self) -> usize {
4091            match self {
4092                Self::verify(inner) => {
4093                    <verifyCall as alloy_sol_types::SolCall>::abi_encoded_size(inner)
4094                }
4095            }
4096        }
4097        #[inline]
4098        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
4099            match self {
4100                Self::verify(inner) => {
4101                    <verifyCall as alloy_sol_types::SolCall>::abi_encode_raw(inner, out)
4102                }
4103            }
4104        }
4105    }
4106    ///Container for all the [`PlonkVerifier`](self) custom errors.
4107    #[derive(Clone)]
4108    #[derive(serde::Serialize, serde::Deserialize)]
4109    #[derive(Debug, PartialEq, Eq, Hash)]
4110    pub enum PlonkVerifierErrors {
4111        #[allow(missing_docs)]
4112        BN254G1AddFailed(BN254G1AddFailed),
4113        #[allow(missing_docs)]
4114        BN254PairingProdFailed(BN254PairingProdFailed),
4115        #[allow(missing_docs)]
4116        BN254ScalarInvZero(BN254ScalarInvZero),
4117        #[allow(missing_docs)]
4118        BN254ScalarMulFailed(BN254ScalarMulFailed),
4119        #[allow(missing_docs)]
4120        InvalidG1(InvalidG1),
4121        #[allow(missing_docs)]
4122        InvalidPlonkArgs(InvalidPlonkArgs),
4123        #[allow(missing_docs)]
4124        InvalidScalar(InvalidScalar),
4125        #[allow(missing_docs)]
4126        PowPrecompileFailed(PowPrecompileFailed),
4127        #[allow(missing_docs)]
4128        UnsupportedDegree(UnsupportedDegree),
4129        #[allow(missing_docs)]
4130        WrongPlonkVK(WrongPlonkVK),
4131    }
4132    impl PlonkVerifierErrors {
4133        /// All the selectors of this enum.
4134        ///
4135        /// Note that the selectors might not be in the same order as the variants.
4136        /// No guarantees are made about the order of the selectors.
4137        ///
4138        /// Prefer using `SolInterface` methods instead.
4139        pub const SELECTORS: &'static [[u8; 4usize]] = &[
4140            [5u8, 176u8, 92u8, 204u8],
4141            [25u8, 219u8, 138u8, 104u8],
4142            [50u8, 116u8, 250u8, 100u8],
4143            [65u8, 245u8, 59u8, 18u8],
4144            [96u8, 85u8, 219u8, 106u8],
4145            [158u8, 120u8, 209u8, 76u8],
4146            [194u8, 6u8, 51u8, 79u8],
4147            [214u8, 219u8, 187u8, 13u8],
4148            [226u8, 239u8, 9u8, 229u8],
4149            [253u8, 154u8, 45u8, 27u8],
4150        ];
4151        /// The names of the variants in the same order as `SELECTORS`.
4152        pub const VARIANT_NAMES: &'static [&'static str] = &[
4153            ::core::stringify!(InvalidScalar),
4154            ::core::stringify!(BN254ScalarMulFailed),
4155            ::core::stringify!(PowPrecompileFailed),
4156            ::core::stringify!(WrongPlonkVK),
4157            ::core::stringify!(BN254G1AddFailed),
4158            ::core::stringify!(InvalidG1),
4159            ::core::stringify!(BN254PairingProdFailed),
4160            ::core::stringify!(BN254ScalarInvZero),
4161            ::core::stringify!(UnsupportedDegree),
4162            ::core::stringify!(InvalidPlonkArgs),
4163        ];
4164        /// The signatures in the same order as `SELECTORS`.
4165        pub const SIGNATURES: &'static [&'static str] = &[
4166            <InvalidScalar as alloy_sol_types::SolError>::SIGNATURE,
4167            <BN254ScalarMulFailed as alloy_sol_types::SolError>::SIGNATURE,
4168            <PowPrecompileFailed as alloy_sol_types::SolError>::SIGNATURE,
4169            <WrongPlonkVK as alloy_sol_types::SolError>::SIGNATURE,
4170            <BN254G1AddFailed as alloy_sol_types::SolError>::SIGNATURE,
4171            <InvalidG1 as alloy_sol_types::SolError>::SIGNATURE,
4172            <BN254PairingProdFailed as alloy_sol_types::SolError>::SIGNATURE,
4173            <BN254ScalarInvZero as alloy_sol_types::SolError>::SIGNATURE,
4174            <UnsupportedDegree as alloy_sol_types::SolError>::SIGNATURE,
4175            <InvalidPlonkArgs as alloy_sol_types::SolError>::SIGNATURE,
4176        ];
4177        /// Returns the signature for the given selector, if known.
4178        #[inline]
4179        pub fn signature_by_selector(
4180            selector: [u8; 4usize],
4181        ) -> ::core::option::Option<&'static str> {
4182            match Self::SELECTORS.binary_search(&selector) {
4183                ::core::result::Result::Ok(idx) => {
4184                    ::core::option::Option::Some(Self::SIGNATURES[idx])
4185                }
4186                ::core::result::Result::Err(_) => ::core::option::Option::None,
4187            }
4188        }
4189        /// Returns the enum variant name for the given selector, if known.
4190        #[inline]
4191        pub fn name_by_selector(
4192            selector: [u8; 4usize],
4193        ) -> ::core::option::Option<&'static str> {
4194            let sig = Self::signature_by_selector(selector)?;
4195            sig.split_once('(').map(|(name, _)| name)
4196        }
4197    }
4198    #[automatically_derived]
4199    impl alloy_sol_types::SolInterface for PlonkVerifierErrors {
4200        const NAME: &'static str = "PlonkVerifierErrors";
4201        const MIN_DATA_LENGTH: usize = 0usize;
4202        const COUNT: usize = 10usize;
4203        #[inline]
4204        fn selector(&self) -> [u8; 4] {
4205            match self {
4206                Self::BN254G1AddFailed(_) => {
4207                    <BN254G1AddFailed as alloy_sol_types::SolError>::SELECTOR
4208                }
4209                Self::BN254PairingProdFailed(_) => {
4210                    <BN254PairingProdFailed as alloy_sol_types::SolError>::SELECTOR
4211                }
4212                Self::BN254ScalarInvZero(_) => {
4213                    <BN254ScalarInvZero as alloy_sol_types::SolError>::SELECTOR
4214                }
4215                Self::BN254ScalarMulFailed(_) => {
4216                    <BN254ScalarMulFailed as alloy_sol_types::SolError>::SELECTOR
4217                }
4218                Self::InvalidG1(_) => <InvalidG1 as alloy_sol_types::SolError>::SELECTOR,
4219                Self::InvalidPlonkArgs(_) => {
4220                    <InvalidPlonkArgs as alloy_sol_types::SolError>::SELECTOR
4221                }
4222                Self::InvalidScalar(_) => {
4223                    <InvalidScalar as alloy_sol_types::SolError>::SELECTOR
4224                }
4225                Self::PowPrecompileFailed(_) => {
4226                    <PowPrecompileFailed as alloy_sol_types::SolError>::SELECTOR
4227                }
4228                Self::UnsupportedDegree(_) => {
4229                    <UnsupportedDegree as alloy_sol_types::SolError>::SELECTOR
4230                }
4231                Self::WrongPlonkVK(_) => {
4232                    <WrongPlonkVK as alloy_sol_types::SolError>::SELECTOR
4233                }
4234            }
4235        }
4236        #[inline]
4237        fn selector_at(i: usize) -> ::core::option::Option<[u8; 4]> {
4238            Self::SELECTORS.get(i).copied()
4239        }
4240        #[inline]
4241        fn valid_selector(selector: [u8; 4]) -> bool {
4242            Self::SELECTORS.binary_search(&selector).is_ok()
4243        }
4244        #[inline]
4245        #[allow(non_snake_case)]
4246        fn abi_decode_raw(
4247            selector: [u8; 4],
4248            data: &[u8],
4249        ) -> alloy_sol_types::Result<Self> {
4250            Self::abi_decode_raw_with_config(
4251                selector,
4252                data,
4253                alloy_sol_types::abi::AbiDecoderConfig::default(),
4254            )
4255        }
4256        #[inline]
4257        #[allow(non_snake_case)]
4258        fn abi_decode_raw_with_config(
4259            selector: [u8; 4],
4260            data: &[u8],
4261            config: alloy_sol_types::abi::AbiDecoderConfig,
4262        ) -> alloy_sol_types::Result<Self> {
4263            static DECODE_SHIMS: &[fn(
4264                &[u8],
4265                alloy_sol_types::abi::AbiDecoderConfig,
4266            ) -> alloy_sol_types::Result<PlonkVerifierErrors>] = &[
4267                {
4268                    fn InvalidScalar(
4269                        data: &[u8],
4270                        config: alloy_sol_types::abi::AbiDecoderConfig,
4271                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4272                        <InvalidScalar as alloy_sol_types::SolError>::abi_decode_raw_with_config(
4273                                data,
4274                                config,
4275                            )
4276                            .map(PlonkVerifierErrors::InvalidScalar)
4277                    }
4278                    InvalidScalar
4279                },
4280                {
4281                    fn BN254ScalarMulFailed(
4282                        data: &[u8],
4283                        config: alloy_sol_types::abi::AbiDecoderConfig,
4284                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4285                        <BN254ScalarMulFailed as alloy_sol_types::SolError>::abi_decode_raw_with_config(
4286                                data,
4287                                config,
4288                            )
4289                            .map(PlonkVerifierErrors::BN254ScalarMulFailed)
4290                    }
4291                    BN254ScalarMulFailed
4292                },
4293                {
4294                    fn PowPrecompileFailed(
4295                        data: &[u8],
4296                        config: alloy_sol_types::abi::AbiDecoderConfig,
4297                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4298                        <PowPrecompileFailed as alloy_sol_types::SolError>::abi_decode_raw_with_config(
4299                                data,
4300                                config,
4301                            )
4302                            .map(PlonkVerifierErrors::PowPrecompileFailed)
4303                    }
4304                    PowPrecompileFailed
4305                },
4306                {
4307                    fn WrongPlonkVK(
4308                        data: &[u8],
4309                        config: alloy_sol_types::abi::AbiDecoderConfig,
4310                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4311                        <WrongPlonkVK as alloy_sol_types::SolError>::abi_decode_raw_with_config(
4312                                data,
4313                                config,
4314                            )
4315                            .map(PlonkVerifierErrors::WrongPlonkVK)
4316                    }
4317                    WrongPlonkVK
4318                },
4319                {
4320                    fn BN254G1AddFailed(
4321                        data: &[u8],
4322                        config: alloy_sol_types::abi::AbiDecoderConfig,
4323                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4324                        <BN254G1AddFailed as alloy_sol_types::SolError>::abi_decode_raw_with_config(
4325                                data,
4326                                config,
4327                            )
4328                            .map(PlonkVerifierErrors::BN254G1AddFailed)
4329                    }
4330                    BN254G1AddFailed
4331                },
4332                {
4333                    fn InvalidG1(
4334                        data: &[u8],
4335                        config: alloy_sol_types::abi::AbiDecoderConfig,
4336                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4337                        <InvalidG1 as alloy_sol_types::SolError>::abi_decode_raw_with_config(
4338                                data,
4339                                config,
4340                            )
4341                            .map(PlonkVerifierErrors::InvalidG1)
4342                    }
4343                    InvalidG1
4344                },
4345                {
4346                    fn BN254PairingProdFailed(
4347                        data: &[u8],
4348                        config: alloy_sol_types::abi::AbiDecoderConfig,
4349                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4350                        <BN254PairingProdFailed as alloy_sol_types::SolError>::abi_decode_raw_with_config(
4351                                data,
4352                                config,
4353                            )
4354                            .map(PlonkVerifierErrors::BN254PairingProdFailed)
4355                    }
4356                    BN254PairingProdFailed
4357                },
4358                {
4359                    fn BN254ScalarInvZero(
4360                        data: &[u8],
4361                        config: alloy_sol_types::abi::AbiDecoderConfig,
4362                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4363                        <BN254ScalarInvZero as alloy_sol_types::SolError>::abi_decode_raw_with_config(
4364                                data,
4365                                config,
4366                            )
4367                            .map(PlonkVerifierErrors::BN254ScalarInvZero)
4368                    }
4369                    BN254ScalarInvZero
4370                },
4371                {
4372                    fn UnsupportedDegree(
4373                        data: &[u8],
4374                        config: alloy_sol_types::abi::AbiDecoderConfig,
4375                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4376                        <UnsupportedDegree as alloy_sol_types::SolError>::abi_decode_raw_with_config(
4377                                data,
4378                                config,
4379                            )
4380                            .map(PlonkVerifierErrors::UnsupportedDegree)
4381                    }
4382                    UnsupportedDegree
4383                },
4384                {
4385                    fn InvalidPlonkArgs(
4386                        data: &[u8],
4387                        config: alloy_sol_types::abi::AbiDecoderConfig,
4388                    ) -> alloy_sol_types::Result<PlonkVerifierErrors> {
4389                        <InvalidPlonkArgs as alloy_sol_types::SolError>::abi_decode_raw_with_config(
4390                                data,
4391                                config,
4392                            )
4393                            .map(PlonkVerifierErrors::InvalidPlonkArgs)
4394                    }
4395                    InvalidPlonkArgs
4396                },
4397            ];
4398            let Ok(idx) = Self::SELECTORS.binary_search(&selector) else {
4399                return Err(
4400                    alloy_sol_types::Error::unknown_selector(
4401                        <Self as alloy_sol_types::SolInterface>::NAME,
4402                        selector,
4403                    ),
4404                );
4405            };
4406            DECODE_SHIMS[idx](data, config)
4407        }
4408        #[inline]
4409        #[allow(non_snake_case)]
4410        fn abi_decode_raw_validate(
4411            selector: [u8; 4],
4412            data: &[u8],
4413        ) -> alloy_sol_types::Result<Self> {
4414            Self::abi_decode_raw_with_config(
4415                selector,
4416                data,
4417                alloy_sol_types::abi::AbiDecoderConfig::new().validate(true),
4418            )
4419        }
4420        #[inline]
4421        fn abi_encoded_size(&self) -> usize {
4422            match self {
4423                Self::BN254G1AddFailed(inner) => {
4424                    <BN254G1AddFailed as alloy_sol_types::SolError>::abi_encoded_size(
4425                        inner,
4426                    )
4427                }
4428                Self::BN254PairingProdFailed(inner) => {
4429                    <BN254PairingProdFailed as alloy_sol_types::SolError>::abi_encoded_size(
4430                        inner,
4431                    )
4432                }
4433                Self::BN254ScalarInvZero(inner) => {
4434                    <BN254ScalarInvZero as alloy_sol_types::SolError>::abi_encoded_size(
4435                        inner,
4436                    )
4437                }
4438                Self::BN254ScalarMulFailed(inner) => {
4439                    <BN254ScalarMulFailed as alloy_sol_types::SolError>::abi_encoded_size(
4440                        inner,
4441                    )
4442                }
4443                Self::InvalidG1(inner) => {
4444                    <InvalidG1 as alloy_sol_types::SolError>::abi_encoded_size(inner)
4445                }
4446                Self::InvalidPlonkArgs(inner) => {
4447                    <InvalidPlonkArgs as alloy_sol_types::SolError>::abi_encoded_size(
4448                        inner,
4449                    )
4450                }
4451                Self::InvalidScalar(inner) => {
4452                    <InvalidScalar as alloy_sol_types::SolError>::abi_encoded_size(inner)
4453                }
4454                Self::PowPrecompileFailed(inner) => {
4455                    <PowPrecompileFailed as alloy_sol_types::SolError>::abi_encoded_size(
4456                        inner,
4457                    )
4458                }
4459                Self::UnsupportedDegree(inner) => {
4460                    <UnsupportedDegree as alloy_sol_types::SolError>::abi_encoded_size(
4461                        inner,
4462                    )
4463                }
4464                Self::WrongPlonkVK(inner) => {
4465                    <WrongPlonkVK as alloy_sol_types::SolError>::abi_encoded_size(inner)
4466                }
4467            }
4468        }
4469        #[inline]
4470        fn abi_encode_raw(&self, out: &mut alloy_sol_types::private::Vec<u8>) {
4471            match self {
4472                Self::BN254G1AddFailed(inner) => {
4473                    <BN254G1AddFailed as alloy_sol_types::SolError>::abi_encode_raw(
4474                        inner,
4475                        out,
4476                    )
4477                }
4478                Self::BN254PairingProdFailed(inner) => {
4479                    <BN254PairingProdFailed as alloy_sol_types::SolError>::abi_encode_raw(
4480                        inner,
4481                        out,
4482                    )
4483                }
4484                Self::BN254ScalarInvZero(inner) => {
4485                    <BN254ScalarInvZero as alloy_sol_types::SolError>::abi_encode_raw(
4486                        inner,
4487                        out,
4488                    )
4489                }
4490                Self::BN254ScalarMulFailed(inner) => {
4491                    <BN254ScalarMulFailed as alloy_sol_types::SolError>::abi_encode_raw(
4492                        inner,
4493                        out,
4494                    )
4495                }
4496                Self::InvalidG1(inner) => {
4497                    <InvalidG1 as alloy_sol_types::SolError>::abi_encode_raw(inner, out)
4498                }
4499                Self::InvalidPlonkArgs(inner) => {
4500                    <InvalidPlonkArgs as alloy_sol_types::SolError>::abi_encode_raw(
4501                        inner,
4502                        out,
4503                    )
4504                }
4505                Self::InvalidScalar(inner) => {
4506                    <InvalidScalar as alloy_sol_types::SolError>::abi_encode_raw(
4507                        inner,
4508                        out,
4509                    )
4510                }
4511                Self::PowPrecompileFailed(inner) => {
4512                    <PowPrecompileFailed as alloy_sol_types::SolError>::abi_encode_raw(
4513                        inner,
4514                        out,
4515                    )
4516                }
4517                Self::UnsupportedDegree(inner) => {
4518                    <UnsupportedDegree as alloy_sol_types::SolError>::abi_encode_raw(
4519                        inner,
4520                        out,
4521                    )
4522                }
4523                Self::WrongPlonkVK(inner) => {
4524                    <WrongPlonkVK as alloy_sol_types::SolError>::abi_encode_raw(
4525                        inner,
4526                        out,
4527                    )
4528                }
4529            }
4530        }
4531    }
4532    #[automatically_derived]
4533    impl PlonkVerifierErrors {
4534        /**Creates a [`BN254G1AddFailed`] error.
4535
4536```solidity
4537error BN254G1AddFailed()
4538```*/
4539        #[inline]
4540        pub fn bn_254g_1_add_failed() -> Self {
4541            Self::BN254G1AddFailed(BN254G1AddFailed)
4542        }
4543        /**Creates a [`BN254PairingProdFailed`] error.
4544
4545```solidity
4546error BN254PairingProdFailed()
4547```*/
4548        #[inline]
4549        pub fn bn_254_pairing_prod_failed() -> Self {
4550            Self::BN254PairingProdFailed(BN254PairingProdFailed)
4551        }
4552        /**Creates a [`BN254ScalarInvZero`] error.
4553
4554```solidity
4555error BN254ScalarInvZero()
4556```*/
4557        #[inline]
4558        pub fn bn_254_scalar_inv_zero() -> Self {
4559            Self::BN254ScalarInvZero(BN254ScalarInvZero)
4560        }
4561        /**Creates a [`BN254ScalarMulFailed`] error.
4562
4563```solidity
4564error BN254ScalarMulFailed()
4565```*/
4566        #[inline]
4567        pub fn bn_254_scalar_mul_failed() -> Self {
4568            Self::BN254ScalarMulFailed(BN254ScalarMulFailed)
4569        }
4570        /**Creates a [`InvalidG1`] error.
4571
4572```solidity
4573error InvalidG1()
4574```*/
4575        #[inline]
4576        pub fn invalid_g_1() -> Self {
4577            Self::InvalidG1(InvalidG1)
4578        }
4579        /**Creates a [`InvalidPlonkArgs`] error.
4580
4581```solidity
4582error InvalidPlonkArgs()
4583```*/
4584        #[inline]
4585        pub fn invalid_plonk_args() -> Self {
4586            Self::InvalidPlonkArgs(InvalidPlonkArgs)
4587        }
4588        /**Creates a [`InvalidScalar`] error.
4589
4590```solidity
4591error InvalidScalar()
4592```*/
4593        #[inline]
4594        pub fn invalid_scalar() -> Self {
4595            Self::InvalidScalar(InvalidScalar)
4596        }
4597        /**Creates a [`PowPrecompileFailed`] error.
4598
4599```solidity
4600error PowPrecompileFailed()
4601```*/
4602        #[inline]
4603        pub fn pow_precompile_failed() -> Self {
4604            Self::PowPrecompileFailed(PowPrecompileFailed)
4605        }
4606        /**Creates a [`UnsupportedDegree`] error.
4607
4608```solidity
4609error UnsupportedDegree()
4610```*/
4611        #[inline]
4612        pub fn unsupported_degree() -> Self {
4613            Self::UnsupportedDegree(UnsupportedDegree)
4614        }
4615        /**Creates a [`WrongPlonkVK`] error.
4616
4617```solidity
4618error WrongPlonkVK()
4619```*/
4620        #[inline]
4621        pub fn wrong_plonk_vk() -> Self {
4622            Self::WrongPlonkVK(WrongPlonkVK)
4623        }
4624    }
4625    use alloy::contract as alloy_contract;
4626    /**Creates a new wrapper around an on-chain [`PlonkVerifier`](self) contract instance.
4627
4628See the [wrapper's documentation](`PlonkVerifierInstance`) for more details.*/
4629    #[inline]
4630    pub const fn new<
4631        P: alloy_contract::private::Provider<N>,
4632        N: alloy_contract::private::Network,
4633    >(
4634        address: alloy_sol_types::private::Address,
4635        __provider: P,
4636    ) -> PlonkVerifierInstance<P, N> {
4637        PlonkVerifierInstance::<P, N>::new(address, __provider)
4638    }
4639    /**Deploys this contract using the given `provider` and constructor arguments, if any.
4640
4641Returns a new instance of the contract, if the deployment was successful.
4642
4643For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
4644    #[inline]
4645    pub fn deploy<
4646        P: alloy_contract::private::Provider<N>,
4647        N: alloy_contract::private::Network,
4648    >(
4649        __provider: P,
4650    ) -> impl ::core::future::Future<
4651        Output = alloy_contract::Result<PlonkVerifierInstance<P, N>>,
4652    > {
4653        PlonkVerifierInstance::<P, N>::deploy(__provider)
4654    }
4655    /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
4656and constructor arguments, if any.
4657
4658This is a simple wrapper around creating a `RawCallBuilder` with the data set to
4659the bytecode concatenated with the constructor's ABI-encoded arguments.*/
4660    #[inline]
4661    pub fn deploy_builder<
4662        P: alloy_contract::private::Provider<N>,
4663        N: alloy_contract::private::Network,
4664    >(__provider: P) -> alloy_contract::RawCallBuilder<P, N> {
4665        PlonkVerifierInstance::<P, N>::deploy_builder(__provider)
4666    }
4667    /**A [`PlonkVerifier`](self) instance.
4668
4669Contains type-safe methods for interacting with an on-chain instance of the
4670[`PlonkVerifier`](self) contract located at a given `address`, using a given
4671provider `P`.
4672
4673If the contract bytecode is available (see the [`sol!`](alloy_sol_types::sol!)
4674documentation on how to provide it), the `deploy` and `deploy_builder` methods can
4675be used to deploy a new instance of the contract.
4676
4677See the [module-level documentation](self) for all the available methods.*/
4678    #[derive(Clone)]
4679    pub struct PlonkVerifierInstance<P, N = alloy_contract::private::Ethereum> {
4680        address: alloy_sol_types::private::Address,
4681        provider: P,
4682        _network: ::core::marker::PhantomData<N>,
4683    }
4684    #[automatically_derived]
4685    impl<P, N> ::core::fmt::Debug for PlonkVerifierInstance<P, N> {
4686        #[inline]
4687        fn fmt(&self, f: &mut ::core::fmt::Formatter<'_>) -> ::core::fmt::Result {
4688            f.debug_tuple("PlonkVerifierInstance").field(&self.address).finish()
4689        }
4690    }
4691    /// Instantiation and getters/setters.
4692    impl<
4693        P: alloy_contract::private::Provider<N>,
4694        N: alloy_contract::private::Network,
4695    > PlonkVerifierInstance<P, N> {
4696        /**Creates a new wrapper around an on-chain [`PlonkVerifier`](self) contract instance.
4697
4698See the [wrapper's documentation](`PlonkVerifierInstance`) for more details.*/
4699        #[inline]
4700        pub const fn new(
4701            address: alloy_sol_types::private::Address,
4702            __provider: P,
4703        ) -> Self {
4704            Self {
4705                address,
4706                provider: __provider,
4707                _network: ::core::marker::PhantomData,
4708            }
4709        }
4710        /**Deploys this contract using the given `provider` and constructor arguments, if any.
4711
4712Returns a new instance of the contract, if the deployment was successful.
4713
4714For more fine-grained control over the deployment process, use [`deploy_builder`] instead.*/
4715        #[inline]
4716        pub async fn deploy(
4717            __provider: P,
4718        ) -> alloy_contract::Result<PlonkVerifierInstance<P, N>> {
4719            let call_builder = Self::deploy_builder(__provider);
4720            let contract_address = call_builder.deploy().await?;
4721            Ok(Self::new(contract_address, call_builder.provider))
4722        }
4723        /**Creates a `RawCallBuilder` for deploying this contract using the given `provider`
4724and constructor arguments, if any.
4725
4726This is a simple wrapper around creating a `RawCallBuilder` with the data set to
4727the bytecode concatenated with the constructor's ABI-encoded arguments.*/
4728        #[inline]
4729        pub fn deploy_builder(__provider: P) -> alloy_contract::RawCallBuilder<P, N> {
4730            alloy_contract::RawCallBuilder::new_raw_deploy(
4731                __provider,
4732                ::core::clone::Clone::clone(&BYTECODE),
4733            )
4734        }
4735        /// Returns a reference to the address.
4736        #[inline]
4737        pub const fn address(&self) -> &alloy_sol_types::private::Address {
4738            &self.address
4739        }
4740        /// Sets the address.
4741        #[inline]
4742        pub fn set_address(&mut self, address: alloy_sol_types::private::Address) {
4743            self.address = address;
4744        }
4745        /// Sets the address and returns `self`.
4746        pub fn at(mut self, address: alloy_sol_types::private::Address) -> Self {
4747            self.set_address(address);
4748            self
4749        }
4750        /// Returns a reference to the provider.
4751        #[inline]
4752        pub const fn provider(&self) -> &P {
4753            &self.provider
4754        }
4755    }
4756    impl<P: ::core::clone::Clone, N> PlonkVerifierInstance<&P, N> {
4757        /// Clones the provider and returns a new instance with the cloned provider.
4758        #[inline]
4759        pub fn with_cloned_provider(self) -> PlonkVerifierInstance<P, N> {
4760            PlonkVerifierInstance {
4761                address: self.address,
4762                provider: ::core::clone::Clone::clone(&self.provider),
4763                _network: ::core::marker::PhantomData,
4764            }
4765        }
4766    }
4767    /// Function calls.
4768    impl<
4769        P: alloy_contract::private::Provider<N>,
4770        N: alloy_contract::private::Network,
4771    > PlonkVerifierInstance<P, N> {
4772        /// Creates a new call builder using this contract instance's provider and address.
4773        ///
4774        /// Note that the call can be any function call, not just those defined in this
4775        /// contract. Prefer using the other methods for building type-safe contract calls.
4776        pub fn call_builder<C: alloy_sol_types::SolCall>(
4777            &self,
4778            call: &C,
4779        ) -> alloy_contract::SolCallBuilder<&P, C, N> {
4780            alloy_contract::SolCallBuilder::new_sol(&self.provider, &self.address, call)
4781        }
4782        ///Creates a new call builder for the [`verify`] function.
4783        pub fn verify(
4784            &self,
4785            verifyingKey: <IPlonkVerifier::VerifyingKey as alloy::sol_types::SolType>::RustType,
4786            publicInput: [alloy::sol_types::private::primitives::aliases::U256; 7usize],
4787            proof: <IPlonkVerifier::PlonkProof as alloy::sol_types::SolType>::RustType,
4788        ) -> alloy_contract::SolCallBuilder<&P, verifyCall, N> {
4789            self.call_builder(
4790                &verifyCall {
4791                    verifyingKey,
4792                    publicInput,
4793                    proof,
4794                },
4795            )
4796        }
4797    }
4798    /// Event filters.
4799    impl<
4800        P: alloy_contract::private::Provider<N>,
4801        N: alloy_contract::private::Network,
4802    > PlonkVerifierInstance<P, N> {
4803        /// Creates a new event filter using this contract instance's provider and address.
4804        ///
4805        /// Note that the type can be any event, not just those defined in this contract.
4806        /// Prefer using the other methods for building type-safe event filters.
4807        pub fn event_filter<E: alloy_sol_types::SolEvent>(
4808            &self,
4809        ) -> alloy_contract::Event<&P, E, N> {
4810            alloy_contract::Event::new_sol(&self.provider, &self.address)
4811        }
4812    }
4813}