diff --git a/components/segmenter/src/grapheme.rs b/components/segmenter/src/grapheme.rs index 72e58aa4cfa..b54659d752d 100644 --- a/components/segmenter/src/grapheme.rs +++ b/components/segmenter/src/grapheme.rs @@ -194,6 +194,7 @@ impl GraphemeClusterSegmenter { data: payload, complex: None, boundary_property: 0, + locale_override: None, }) } @@ -214,6 +215,7 @@ impl GraphemeClusterSegmenter { data: self.payload.get(), complex: None, boundary_property: 0, + locale_override: None, }) } /// Creates a grapheme cluster break iterator for a Latin-1 (8-bit) string. @@ -231,6 +233,7 @@ impl GraphemeClusterSegmenter { data: self.payload.get(), complex: None, boundary_property: 0, + locale_override: None, }) } @@ -257,6 +260,7 @@ impl GraphemeClusterSegmenter { data: payload, complex: None, boundary_property: 0, + locale_override: None, }) } } diff --git a/components/segmenter/src/lib.rs b/components/segmenter/src/lib.rs index 5de29e6402c..f3104e08c24 100644 --- a/components/segmenter/src/lib.rs +++ b/components/segmenter/src/lib.rs @@ -143,6 +143,8 @@ pub use crate::word::WordSegmenter; pub use crate::line::LineBreakOptions; pub use crate::line::LineBreakStrictness; pub use crate::line::LineBreakWordOption; +pub use crate::sentence::SentenceBreakOptions; +pub use crate::word::WordBreakOptions; pub use crate::word::WordType; // Typedefs diff --git a/components/segmenter/src/provider/mod.rs b/components/segmenter/src/provider/mod.rs index 1521ecf6598..41acb156974 100644 --- a/components/segmenter/src/provider/mod.rs +++ b/components/segmenter/src/provider/mod.rs @@ -41,6 +41,7 @@ const _: () = { pub mod icu { pub use crate as segmenter; pub use icu_collections as collections; + pub use icu_segmenter_data::icu_locale as locale; } make_provider!(Baked); impl_dictionary_for_word_only_auto_v1_marker!(Baked); @@ -49,7 +50,9 @@ const _: () = { impl_line_break_data_v2_marker!(Baked); #[cfg(feature = "lstm")] impl_lstm_for_word_line_auto_v1_marker!(Baked); + impl_sentence_break_data_override_v1_marker!(Baked); impl_sentence_break_data_v2_marker!(Baked); + impl_word_break_data_override_v1_marker!(Baked); impl_word_break_data_v2_marker!(Baked); }; @@ -61,7 +64,9 @@ pub const MARKERS: &[DataMarkerInfo] = &[ GraphemeClusterBreakDataV2Marker::INFO, LineBreakDataV2Marker::INFO, LstmForWordLineAutoV1Marker::INFO, + SentenceBreakDataOverrideV1Marker::INFO, SentenceBreakDataV2Marker::INFO, + WordBreakDataOverrideV1Marker::INFO, WordBreakDataV2Marker::INFO, ]; @@ -148,6 +153,24 @@ impl DynamicDataMarker for UCharDictionaryBreakDataV1Marker { type DataStruct = UCharDictionaryBreakDataV1<'static>; } +/// codepoint trie data that the difference by specific locale +#[icu_provider::data_struct( + marker(SentenceBreakDataOverrideV1Marker, "segmenter/sentence/override@1",), + marker(WordBreakDataOverrideV1Marker, "segmenter/word/override@1") +)] +#[derive(Debug, PartialEq, Clone)] +#[cfg_attr( + feature = "datagen", + derive(serde::Serialize,databake::Bake), + databake(path = icu_segmenter::provider), +)] +#[cfg_attr(feature = "serde", derive(serde::Deserialize))] +pub struct RuleBreakDataOverrideV1<'data> { + /// The difference of property table for special locale. + #[cfg_attr(feature = "serde", serde(borrow))] + pub property_table_override: CodePointTrie<'data, u8>, +} + #[derive(Clone, Copy, PartialEq, Debug)] #[cfg_attr(feature = "datagen", derive(databake::Bake))] #[cfg_attr(feature = "datagen", databake(path = icu_segmenter::provider))] diff --git a/components/segmenter/src/rule_segmenter.rs b/components/segmenter/src/rule_segmenter.rs index 172bfe15056..4017baea8a3 100644 --- a/components/segmenter/src/rule_segmenter.rs +++ b/components/segmenter/src/rule_segmenter.rs @@ -45,6 +45,7 @@ pub struct RuleBreakIterator<'l, 's, Y: RuleBreakType<'l, 's> + ?Sized> { pub(crate) data: &'l RuleBreakDataV2<'l>, pub(crate) complex: Option<&'l ComplexPayloads>, pub(crate) boundary_property: u8, + pub(crate) locale_override: Option<&'l RuleBreakDataOverrideV1<'l>>, } impl<'l, 's, Y: RuleBreakType<'l, 's> + ?Sized> Iterator for RuleBreakIterator<'l, 's, Y> { @@ -210,6 +211,14 @@ impl<'l, 's, Y: RuleBreakType<'l, 's> + ?Sized> RuleBreakIterator<'l, 's, Y> { fn get_break_property(&self, codepoint: Y::CharType) -> u8 { // Note: Default value is 0 == UNKNOWN + if let Some(locale_override) = &self.locale_override { + let property = locale_override + .property_table_override + .get32(codepoint.into()); + if property != 0 { + return property; + } + } self.data.property_table.get32(codepoint.into()) } diff --git a/components/segmenter/src/sentence.rs b/components/segmenter/src/sentence.rs index 655558dfc0d..dbbb04dd06a 100644 --- a/components/segmenter/src/sentence.rs +++ b/components/segmenter/src/sentence.rs @@ -11,6 +11,14 @@ use crate::provider::*; use crate::rule_segmenter::*; use utf8_iter::Utf8CharIndices; +/// Options to tailor sentence breaking behavior. +#[non_exhaustive] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct SentenceBreakOptions { + /// Content locale for sentence segmenter. + pub content_locale: Option, +} + /// Implements the [`Iterator`] trait over the sentence boundaries of the given string. /// /// Lifetimes: @@ -100,6 +108,7 @@ pub type SentenceBreakIteratorUtf16<'l, 's> = SentenceBreakIterator<'l, 's, Rule #[derive(Debug)] pub struct SentenceSegmenter { payload: DataPayload, + payload_locale_override: Option>, } #[cfg(feature = "compiled_data")] @@ -121,6 +130,7 @@ impl SentenceSegmenter { payload: DataPayload::from_static_ref( crate::provider::Baked::SINGLETON_SENTENCE_BREAK_DATA_V2_MARKER, ), + payload_locale_override: None, } } @@ -140,13 +150,70 @@ impl SentenceSegmenter { D: DataProvider + ?Sized, { let payload = provider.load(Default::default())?.payload; - Ok(Self { payload }) + Ok(Self { + payload, + payload_locale_override: None, + }) + } + + icu_provider::gen_any_buffer_data_constructors!( + (options: SentenceBreakOptions) -> error: DataError, + /// Constructs a [`SentenceSegmenter`] for a given options and using compiled data. + /// + /// ✨ *Enabled with the `compiled_data` Cargo feature.* + /// + /// [📚 Help choosing a constructor](icu_provider::constructors) + functions: [ + try_new_with_options, + try_new_with_options_with_any_provider, + try_new_with_options_with_buffer_provider, + try_new_with_options_unstable, + Self + ] + ); + + #[doc = icu_provider::gen_any_buffer_unstable_docs!(UNSTABLE, Self::try_new_with_options)] + pub fn try_new_with_options_unstable( + provider: &D, + options: SentenceBreakOptions, + ) -> Result + where + D: DataProvider + + DataProvider + + ?Sized, + { + let payload = provider.load(Default::default())?.payload; + let payload_locale_override = if let Some(locale) = options.content_locale { + let req = DataRequest { + id: DataIdentifierBorrowed::for_locale(&locale), + ..Default::default() + }; + match provider.load(req) { + Ok(response) => Ok(Some(response.payload)), + Err(DataError { + kind: DataErrorKind::IdentifierNotFound, + .. + }) => Ok(None), + Err(e) => Err(e), + } + } else { + Ok(None) + }; + + Ok(Self { + payload, + payload_locale_override: payload_locale_override?, + }) } /// Creates a sentence break iterator for an `str` (a UTF-8 string). /// /// There are always breakpoints at 0 and the string length, or only at 0 for the empty string. pub fn segment_str<'l, 's>(&'l self, input: &'s str) -> SentenceBreakIteratorUtf8<'l, 's> { + let locale_override = self + .payload_locale_override + .as_ref() + .map(|payload| payload.get()); SentenceBreakIterator(RuleBreakIterator { iter: input.char_indices(), len: input.len(), @@ -155,6 +222,7 @@ impl SentenceSegmenter { data: self.payload.get(), complex: None, boundary_property: 0, + locale_override, }) } /// Creates a sentence break iterator for a potentially ill-formed UTF8 string @@ -166,6 +234,10 @@ impl SentenceSegmenter { &'l self, input: &'s [u8], ) -> SentenceBreakIteratorPotentiallyIllFormedUtf8<'l, 's> { + let locale_override = self + .payload_locale_override + .as_ref() + .map(|payload| payload.get()); SentenceBreakIterator(RuleBreakIterator { iter: Utf8CharIndices::new(input), len: input.len(), @@ -174,6 +246,7 @@ impl SentenceSegmenter { data: self.payload.get(), complex: None, boundary_property: 0, + locale_override, }) } /// Creates a sentence break iterator for a Latin-1 (8-bit) string. @@ -183,6 +256,10 @@ impl SentenceSegmenter { &'l self, input: &'s [u8], ) -> SentenceBreakIteratorLatin1<'l, 's> { + let locale_override = self + .payload_locale_override + .as_ref() + .map(|payload| payload.get()); SentenceBreakIterator(RuleBreakIterator { iter: Latin1Indices::new(input), len: input.len(), @@ -191,6 +268,7 @@ impl SentenceSegmenter { data: self.payload.get(), complex: None, boundary_property: 0, + locale_override, }) } @@ -198,6 +276,10 @@ impl SentenceSegmenter { /// /// There are always breakpoints at 0 and the string length, or only at 0 for the empty string. pub fn segment_utf16<'l, 's>(&'l self, input: &'s [u16]) -> SentenceBreakIteratorUtf16<'l, 's> { + let locale_override = self + .payload_locale_override + .as_ref() + .map(|payload| payload.get()); SentenceBreakIterator(RuleBreakIterator { iter: Utf16Indices::new(input), len: input.len(), @@ -206,6 +288,7 @@ impl SentenceSegmenter { data: self.payload.get(), complex: None, boundary_property: 0, + locale_override, }) } } diff --git a/components/segmenter/src/word.rs b/components/segmenter/src/word.rs index 4bebe3cce27..2df82c0f7f1 100644 --- a/components/segmenter/src/word.rs +++ b/components/segmenter/src/word.rs @@ -14,6 +14,14 @@ use core::str::CharIndices; use icu_provider::prelude::*; use utf8_iter::Utf8CharIndices; +/// Options to tailor word breaking behavior. +#[non_exhaustive] +#[derive(Clone, PartialEq, Eq, Debug, Default)] +pub struct WordBreakOptions { + /// Content locale for word segmenter + pub content_locale: Option, +} + /// Implements the [`Iterator`] trait over the word boundaries of the given string. /// /// Lifetimes: @@ -168,6 +176,7 @@ pub type WordBreakIteratorUtf16<'l, 's> = WordBreakIterator<'l, 's, WordBreakTyp pub struct WordSegmenter { payload: DataPayload, complex: ComplexPayloads, + payload_locale_override: Option>, } impl WordSegmenter { @@ -207,6 +216,7 @@ impl WordSegmenter { crate::provider::Baked::SINGLETON_WORD_BREAK_DATA_V2_MARKER, ), complex: ComplexPayloads::new_auto(), + payload_locale_override: None, } } @@ -214,7 +224,7 @@ impl WordSegmenter { icu_provider::gen_any_buffer_data_constructors!( () -> error: DataError, functions: [ - try_new_auto: skip, + new_auto: skip, try_new_auto_with_any_provider, try_new_auto_with_buffer_provider, try_new_auto_unstable, @@ -227,14 +237,66 @@ impl WordSegmenter { pub fn try_new_auto_unstable(provider: &D) -> Result where D: DataProvider + + DataProvider + + DataProvider + + DataProvider + + DataProvider + + ?Sized, + { + Ok(Self { + payload: provider.load(Default::default())?.payload, + complex: ComplexPayloads::try_new_auto(provider)?, + payload_locale_override: None, + }) + } + + #[cfg(feature = "auto")] + icu_provider::gen_any_buffer_data_constructors!( + (options: WordBreakOptions) -> error: DataError, + functions: [ + try_new_auto_with_options, + try_new_auto_with_options_with_any_provider, + try_new_auto_with_options_with_buffer_provider, + try_new_auto_with_options_unstable, + Self + ] + ); + + #[cfg(feature = "auto")] + #[doc = icu_provider::gen_any_buffer_unstable_docs!(UNSTABLE, Self::new_auto)] + pub fn try_new_auto_with_options_unstable( + provider: &D, + options: WordBreakOptions, + ) -> Result + where + D: DataProvider + + DataProvider + DataProvider + DataProvider + DataProvider + ?Sized, { + let payload_locale_override = if let Some(locale) = options.content_locale { + let req = DataRequest { + id: DataIdentifierBorrowed::for_locale(&locale), + ..Default::default() + }; + match provider.load(req) { + Ok(response) => Ok(Some(response.payload)), + Err(DataError { + kind: DataErrorKind::IdentifierNotFound, + .. + }) => Ok(None), + Err(e) => Err(e), + } + } else { + Ok(None) + }; + Ok(Self { payload: provider.load(Default::default())?.payload, complex: ComplexPayloads::try_new_auto(provider)?, + payload_locale_override: payload_locale_override?, }) } @@ -279,6 +341,7 @@ impl WordSegmenter { crate::provider::Baked::SINGLETON_WORD_BREAK_DATA_V2_MARKER, ), complex: ComplexPayloads::new_lstm(), + payload_locale_override: None, } } @@ -299,6 +362,7 @@ impl WordSegmenter { pub fn try_new_lstm_unstable(provider: &D) -> Result where D: DataProvider + + DataProvider + DataProvider + DataProvider + ?Sized, @@ -306,6 +370,56 @@ impl WordSegmenter { Ok(Self { payload: provider.load(Default::default())?.payload, complex: ComplexPayloads::try_new_lstm(provider)?, + payload_locale_override: None, + }) + } + + #[cfg(feature = "lstm")] + icu_provider::gen_any_buffer_data_constructors!( + (options: WordBreakOptions) -> error: DataError, + functions: [ + try_new_lstm_with_options, + try_new_lstm_with_options_with_any_provider, + try_new_lstm_with_options_with_buffer_provider, + try_new_lstm_with_options_unstable, + Self + ] + ); + + #[cfg(feature = "lstm")] + #[doc = icu_provider::gen_any_buffer_unstable_docs!(UNSTABLE, Self::new_lstm)] + pub fn try_new_lstm_with_options_unstable( + provider: &D, + options: WordBreakOptions, + ) -> Result + where + D: DataProvider + + DataProvider + + DataProvider + + DataProvider + + ?Sized, + { + let payload_locale_override = if let Some(locale) = options.content_locale { + let req = DataRequest { + id: DataIdentifierBorrowed::for_locale(&locale), + ..Default::default() + }; + match provider.load(req) { + Ok(response) => Ok(Some(response.payload)), + Err(DataError { + kind: DataErrorKind::IdentifierNotFound, + .. + }) => Ok(None), + Err(e) => Err(e), + } + } else { + Ok(None) + }; + + Ok(Self { + payload: provider.load(Default::default())?.payload, + complex: ComplexPayloads::try_new_lstm(provider)?, + payload_locale_override: payload_locale_override?, }) } @@ -344,6 +458,7 @@ impl WordSegmenter { crate::provider::Baked::SINGLETON_WORD_BREAK_DATA_V2_MARKER, ), complex: ComplexPayloads::new_dict(), + payload_locale_override: None, } } @@ -362,6 +477,7 @@ impl WordSegmenter { pub fn try_new_dictionary_unstable(provider: &D) -> Result where D: DataProvider + + DataProvider + DataProvider + DataProvider + DataProvider @@ -370,6 +486,55 @@ impl WordSegmenter { Ok(Self { payload: provider.load(Default::default())?.payload, complex: ComplexPayloads::try_new_dict(provider)?, + payload_locale_override: None, + }) + } + + icu_provider::gen_any_buffer_data_constructors!( + (options: WordBreakOptions) -> error: DataError, + functions: [ + try_new_dictionary_with_options, + try_new_dictionary_with_options_with_any_provider, + try_new_dictionary_with_options_with_buffer_provider, + try_new_dictionary_with_options_unstable, + Self + ] + ); + + #[doc = icu_provider::gen_any_buffer_unstable_docs!(UNSTABLE, Self::new_dictionary)] + pub fn try_new_dictionary_with_options_unstable( + provider: &D, + options: WordBreakOptions, + ) -> Result + where + D: DataProvider + + DataProvider + + DataProvider + + DataProvider + + DataProvider + + ?Sized, + { + let payload_locale_override = if let Some(locale) = options.content_locale { + let req = DataRequest { + id: DataIdentifierBorrowed::for_locale(&locale), + ..Default::default() + }; + match provider.load(req) { + Ok(response) => Ok(Some(response.payload)), + Err(DataError { + kind: DataErrorKind::IdentifierNotFound, + .. + }) => Ok(None), + Err(e) => Err(e), + } + } else { + Ok(None) + }; + + Ok(Self { + payload: provider.load(Default::default())?.payload, + complex: ComplexPayloads::try_new_dict(provider)?, + payload_locale_override: payload_locale_override?, }) } @@ -377,6 +542,10 @@ impl WordSegmenter { /// /// There are always breakpoints at 0 and the string length, or only at 0 for the empty string. pub fn segment_str<'l, 's>(&'l self, input: &'s str) -> WordBreakIteratorUtf8<'l, 's> { + let locale_override = self + .payload_locale_override + .as_ref() + .map(|payload| payload.get()); WordBreakIterator(RuleBreakIterator { iter: input.char_indices(), len: input.len(), @@ -385,6 +554,7 @@ impl WordSegmenter { data: self.payload.get(), complex: Some(&self.complex), boundary_property: 0, + locale_override, }) } @@ -397,6 +567,10 @@ impl WordSegmenter { &'l self, input: &'s [u8], ) -> WordBreakIteratorPotentiallyIllFormedUtf8<'l, 's> { + let locale_override = self + .payload_locale_override + .as_ref() + .map(|payload| payload.get()); WordBreakIterator(RuleBreakIterator { iter: Utf8CharIndices::new(input), len: input.len(), @@ -405,6 +579,7 @@ impl WordSegmenter { data: self.payload.get(), complex: Some(&self.complex), boundary_property: 0, + locale_override, }) } @@ -412,6 +587,10 @@ impl WordSegmenter { /// /// There are always breakpoints at 0 and the string length, or only at 0 for the empty string. pub fn segment_latin1<'l, 's>(&'l self, input: &'s [u8]) -> WordBreakIteratorLatin1<'l, 's> { + let locale_override = self + .payload_locale_override + .as_ref() + .map(|payload| payload.get()); WordBreakIterator(RuleBreakIterator { iter: Latin1Indices::new(input), len: input.len(), @@ -420,6 +599,7 @@ impl WordSegmenter { data: self.payload.get(), complex: Some(&self.complex), boundary_property: 0, + locale_override, }) } @@ -427,6 +607,10 @@ impl WordSegmenter { /// /// There are always breakpoints at 0 and the string length, or only at 0 for the empty string. pub fn segment_utf16<'l, 's>(&'l self, input: &'s [u16]) -> WordBreakIteratorUtf16<'l, 's> { + let locale_override = self + .payload_locale_override + .as_ref() + .map(|payload| payload.get()); WordBreakIterator(RuleBreakIterator { iter: Utf16Indices::new(input), len: input.len(), @@ -435,6 +619,7 @@ impl WordSegmenter { data: self.payload.get(), complex: Some(&self.complex), boundary_property: 0, + locale_override, }) } } diff --git a/components/segmenter/tests/locale.rs b/components/segmenter/tests/locale.rs new file mode 100644 index 00000000000..a46ad6db242 --- /dev/null +++ b/components/segmenter/tests/locale.rs @@ -0,0 +1,62 @@ +// This file is part of ICU4X. For terms of use, please see the file +// called LICENSE at the top level of the ICU4X source tree +// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). + +use icu_locale_core::locale; +use icu_segmenter::{SentenceBreakOptions, SentenceSegmenter, WordBreakOptions, WordSegmenter}; + +// Additional segmenter tests with locale. + +#[test] +fn word_break_with_locale() { + // MidLetter is different because U+0x3A isn't MidLetter on Swedish. + let s = "hello:world"; + let mut options_sv = WordBreakOptions::default(); + options_sv.content_locale = Some(locale!("sv").into()); + let segmenter = + WordSegmenter::try_new_auto_with_options(options_sv).expect("Loading should succeed!"); + let iter = segmenter.segment_str(s); + assert_eq!( + iter.collect::>(), + vec![0, 11], + "word segmenter with Swedish" + ); + + let mut options_en = WordBreakOptions::default(); + options_en.content_locale = Some(locale!("en").into()); + let segmenter = + WordSegmenter::try_new_auto_with_options(options_en).expect("Loading should succeed!"); + let iter = segmenter.segment_str(s); + assert_eq!( + iter.collect::>(), + vec![0, 5, 6, 11], + "word segmenter with English" + ); +} + +#[test] +fn sentence_break_with_locale() { + // SB11 is different because U+0x3B is STerm on Greek. + let s = "hello; world"; + let mut options_el = SentenceBreakOptions::default(); + options_el.content_locale = Some(locale!("el").into()); + let segmenter = + SentenceSegmenter::try_new_with_options(options_el).expect("Loading should succeed!"); + let iter = segmenter.segment_str(s); + assert_eq!( + iter.collect::>(), + vec![0, 7, 12], + "sentence segmenter with Greek" + ); + + let mut options_en = SentenceBreakOptions::default(); + options_en.content_locale = Some(locale!("en").into()); + let segmenter = + SentenceSegmenter::try_new_with_options(options_en).expect("Loading should succeed!"); + let iter = segmenter.segment_str(s); + assert_eq!( + iter.collect::>(), + vec![0, 12], + "sentence segmenter with English" + ); +} diff --git a/components/segmenter/tests/spec_test.rs b/components/segmenter/tests/spec_test.rs index fa83a55cfc7..e61e17776c2 100644 --- a/components/segmenter/tests/spec_test.rs +++ b/components/segmenter/tests/spec_test.rs @@ -2,9 +2,11 @@ // called LICENSE at the top level of the ICU4X source tree // (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ). +use icu_locale_core::locale; use icu_segmenter::GraphemeClusterSegmenter; use icu_segmenter::LineSegmenter; use icu_segmenter::SentenceSegmenter; +use icu_segmenter::WordBreakOptions; use icu_segmenter::WordSegmenter; use std::char; @@ -176,7 +178,11 @@ fn run_line_break_extra_test() { fn word_break_test(file: &'static str) { let test_iter = TestContentIterator::new(file); - let segmenter = WordSegmenter::new_dictionary(); + // Default word segmenter isn't UAX29 rule. Swedish is UAX29 rule. + let mut options = WordBreakOptions::default(); + options.content_locale = Some(locale!("sv").into()); + let segmenter = + WordSegmenter::try_new_dictionary_with_options(options).expect("Loading should succeed!"); for (i, test) in test_iter.enumerate() { let s: String = test.utf8_vec.into_iter().collect(); let iter = segmenter.segment_str(&s); diff --git a/ffi/capi/bindings/c/SentenceSegmenter.h b/ffi/capi/bindings/c/SentenceSegmenter.h index 969b3ad7a48..51981ce43f1 100644 --- a/ffi/capi/bindings/c/SentenceSegmenter.h +++ b/ffi/capi/bindings/c/SentenceSegmenter.h @@ -9,6 +9,7 @@ #include "DataError.d.h" #include "DataProvider.d.h" +#include "Locale.d.h" #include "SentenceBreakIteratorLatin1.d.h" #include "SentenceBreakIteratorUtf16.d.h" #include "SentenceBreakIteratorUtf8.d.h" @@ -23,6 +24,9 @@ typedef struct icu4x_SentenceSegmenter_create_mv1_result {union {SentenceSegmenter* ok; DataError err;}; bool is_ok;} icu4x_SentenceSegmenter_create_mv1_result; icu4x_SentenceSegmenter_create_mv1_result icu4x_SentenceSegmenter_create_mv1(const DataProvider* provider); +typedef struct icu4x_SentenceSegmenter_create_with_content_locale_mv1_result {union {SentenceSegmenter* ok; DataError err;}; bool is_ok;} icu4x_SentenceSegmenter_create_with_content_locale_mv1_result; +icu4x_SentenceSegmenter_create_with_content_locale_mv1_result icu4x_SentenceSegmenter_create_with_content_locale_mv1(const DataProvider* provider, const Locale* locale); + SentenceBreakIteratorUtf8* icu4x_SentenceSegmenter_segment_utf8_mv1(const SentenceSegmenter* self, DiplomatStringView input); SentenceBreakIteratorUtf16* icu4x_SentenceSegmenter_segment_utf16_mv1(const SentenceSegmenter* self, DiplomatString16View input); diff --git a/ffi/capi/bindings/c/WordSegmenter.h b/ffi/capi/bindings/c/WordSegmenter.h index 1914e669cc1..dde32e05c86 100644 --- a/ffi/capi/bindings/c/WordSegmenter.h +++ b/ffi/capi/bindings/c/WordSegmenter.h @@ -9,6 +9,7 @@ #include "DataError.d.h" #include "DataProvider.d.h" +#include "Locale.d.h" #include "WordBreakIteratorLatin1.d.h" #include "WordBreakIteratorUtf16.d.h" #include "WordBreakIteratorUtf8.d.h" @@ -23,12 +24,21 @@ typedef struct icu4x_WordSegmenter_create_auto_mv1_result {union {WordSegmenter* ok; DataError err;}; bool is_ok;} icu4x_WordSegmenter_create_auto_mv1_result; icu4x_WordSegmenter_create_auto_mv1_result icu4x_WordSegmenter_create_auto_mv1(const DataProvider* provider); +typedef struct icu4x_WordSegmenter_create_auto_with_content_locale_mv1_result {union {WordSegmenter* ok; DataError err;}; bool is_ok;} icu4x_WordSegmenter_create_auto_with_content_locale_mv1_result; +icu4x_WordSegmenter_create_auto_with_content_locale_mv1_result icu4x_WordSegmenter_create_auto_with_content_locale_mv1(const DataProvider* provider, const Locale* locale); + typedef struct icu4x_WordSegmenter_create_lstm_mv1_result {union {WordSegmenter* ok; DataError err;}; bool is_ok;} icu4x_WordSegmenter_create_lstm_mv1_result; icu4x_WordSegmenter_create_lstm_mv1_result icu4x_WordSegmenter_create_lstm_mv1(const DataProvider* provider); +typedef struct icu4x_WordSegmenter_create_lstm_with_content_locale_mv1_result {union {WordSegmenter* ok; DataError err;}; bool is_ok;} icu4x_WordSegmenter_create_lstm_with_content_locale_mv1_result; +icu4x_WordSegmenter_create_lstm_with_content_locale_mv1_result icu4x_WordSegmenter_create_lstm_with_content_locale_mv1(const DataProvider* provider, const Locale* locale); + typedef struct icu4x_WordSegmenter_create_dictionary_mv1_result {union {WordSegmenter* ok; DataError err;}; bool is_ok;} icu4x_WordSegmenter_create_dictionary_mv1_result; icu4x_WordSegmenter_create_dictionary_mv1_result icu4x_WordSegmenter_create_dictionary_mv1(const DataProvider* provider); +typedef struct icu4x_WordSegmenter_create_dictionary_with_content_locale_mv1_result {union {WordSegmenter* ok; DataError err;}; bool is_ok;} icu4x_WordSegmenter_create_dictionary_with_content_locale_mv1_result; +icu4x_WordSegmenter_create_dictionary_with_content_locale_mv1_result icu4x_WordSegmenter_create_dictionary_with_content_locale_mv1(const DataProvider* provider, const Locale* locale); + WordBreakIteratorUtf8* icu4x_WordSegmenter_segment_utf8_mv1(const WordSegmenter* self, DiplomatStringView input); WordBreakIteratorUtf16* icu4x_WordSegmenter_segment_utf16_mv1(const WordSegmenter* self, DiplomatString16View input); diff --git a/ffi/capi/bindings/cpp/icu4x/SentenceSegmenter.d.hpp b/ffi/capi/bindings/cpp/icu4x/SentenceSegmenter.d.hpp index 2e736841eb5..a9144e0a4e6 100644 --- a/ffi/capi/bindings/cpp/icu4x/SentenceSegmenter.d.hpp +++ b/ffi/capi/bindings/cpp/icu4x/SentenceSegmenter.d.hpp @@ -12,6 +12,8 @@ namespace icu4x { namespace capi { struct DataProvider; } class DataProvider; +namespace capi { struct Locale; } +class Locale; namespace capi { struct SentenceBreakIteratorLatin1; } class SentenceBreakIteratorLatin1; namespace capi { struct SentenceBreakIteratorUtf16; } @@ -36,6 +38,8 @@ class SentenceSegmenter { inline static diplomat::result, icu4x::DataError> create(const icu4x::DataProvider& provider); + inline static diplomat::result, icu4x::DataError> create_with_content_locale(const icu4x::DataProvider& provider, const icu4x::Locale& locale); + inline std::unique_ptr segment(std::string_view input) const; inline std::unique_ptr segment16(std::u16string_view input) const; diff --git a/ffi/capi/bindings/cpp/icu4x/SentenceSegmenter.hpp b/ffi/capi/bindings/cpp/icu4x/SentenceSegmenter.hpp index 5f86dc5083f..4daff106827 100644 --- a/ffi/capi/bindings/cpp/icu4x/SentenceSegmenter.hpp +++ b/ffi/capi/bindings/cpp/icu4x/SentenceSegmenter.hpp @@ -12,6 +12,7 @@ #include "../diplomat_runtime.hpp" #include "DataError.hpp" #include "DataProvider.hpp" +#include "Locale.hpp" #include "SentenceBreakIteratorLatin1.hpp" #include "SentenceBreakIteratorUtf16.hpp" #include "SentenceBreakIteratorUtf8.hpp" @@ -24,6 +25,9 @@ namespace capi { typedef struct icu4x_SentenceSegmenter_create_mv1_result {union {icu4x::capi::SentenceSegmenter* ok; icu4x::capi::DataError err;}; bool is_ok;} icu4x_SentenceSegmenter_create_mv1_result; icu4x_SentenceSegmenter_create_mv1_result icu4x_SentenceSegmenter_create_mv1(const icu4x::capi::DataProvider* provider); + typedef struct icu4x_SentenceSegmenter_create_with_content_locale_mv1_result {union {icu4x::capi::SentenceSegmenter* ok; icu4x::capi::DataError err;}; bool is_ok;} icu4x_SentenceSegmenter_create_with_content_locale_mv1_result; + icu4x_SentenceSegmenter_create_with_content_locale_mv1_result icu4x_SentenceSegmenter_create_with_content_locale_mv1(const icu4x::capi::DataProvider* provider, const icu4x::capi::Locale* locale); + icu4x::capi::SentenceBreakIteratorUtf8* icu4x_SentenceSegmenter_segment_utf8_mv1(const icu4x::capi::SentenceSegmenter* self, diplomat::capi::DiplomatStringView input); icu4x::capi::SentenceBreakIteratorUtf16* icu4x_SentenceSegmenter_segment_utf16_mv1(const icu4x::capi::SentenceSegmenter* self, diplomat::capi::DiplomatString16View input); @@ -42,6 +46,12 @@ inline diplomat::result, icu4x::DataEr return result.is_ok ? diplomat::result, icu4x::DataError>(diplomat::Ok>(std::unique_ptr(icu4x::SentenceSegmenter::FromFFI(result.ok)))) : diplomat::result, icu4x::DataError>(diplomat::Err(icu4x::DataError::FromFFI(result.err))); } +inline diplomat::result, icu4x::DataError> icu4x::SentenceSegmenter::create_with_content_locale(const icu4x::DataProvider& provider, const icu4x::Locale& locale) { + auto result = icu4x::capi::icu4x_SentenceSegmenter_create_with_content_locale_mv1(provider.AsFFI(), + locale.AsFFI()); + return result.is_ok ? diplomat::result, icu4x::DataError>(diplomat::Ok>(std::unique_ptr(icu4x::SentenceSegmenter::FromFFI(result.ok)))) : diplomat::result, icu4x::DataError>(diplomat::Err(icu4x::DataError::FromFFI(result.err))); +} + inline std::unique_ptr icu4x::SentenceSegmenter::segment(std::string_view input) const { auto result = icu4x::capi::icu4x_SentenceSegmenter_segment_utf8_mv1(this->AsFFI(), {input.data(), input.size()}); diff --git a/ffi/capi/bindings/cpp/icu4x/WordSegmenter.d.hpp b/ffi/capi/bindings/cpp/icu4x/WordSegmenter.d.hpp index 51a41e390ad..14b3617355c 100644 --- a/ffi/capi/bindings/cpp/icu4x/WordSegmenter.d.hpp +++ b/ffi/capi/bindings/cpp/icu4x/WordSegmenter.d.hpp @@ -12,6 +12,8 @@ namespace icu4x { namespace capi { struct DataProvider; } class DataProvider; +namespace capi { struct Locale; } +class Locale; namespace capi { struct WordBreakIteratorLatin1; } class WordBreakIteratorLatin1; namespace capi { struct WordBreakIteratorUtf16; } @@ -36,10 +38,16 @@ class WordSegmenter { inline static diplomat::result, icu4x::DataError> create_auto(const icu4x::DataProvider& provider); + inline static diplomat::result, icu4x::DataError> create_auto_with_content_locale(const icu4x::DataProvider& provider, const icu4x::Locale& locale); + inline static diplomat::result, icu4x::DataError> create_lstm(const icu4x::DataProvider& provider); + inline static diplomat::result, icu4x::DataError> create_lstm_with_content_locale(const icu4x::DataProvider& provider, const icu4x::Locale& locale); + inline static diplomat::result, icu4x::DataError> create_dictionary(const icu4x::DataProvider& provider); + inline static diplomat::result, icu4x::DataError> create_dictionary_with_content_locale(const icu4x::DataProvider& provider, const icu4x::Locale& locale); + inline std::unique_ptr segment(std::string_view input) const; inline std::unique_ptr segment16(std::u16string_view input) const; diff --git a/ffi/capi/bindings/cpp/icu4x/WordSegmenter.hpp b/ffi/capi/bindings/cpp/icu4x/WordSegmenter.hpp index b38b69d3a59..9a60162ade9 100644 --- a/ffi/capi/bindings/cpp/icu4x/WordSegmenter.hpp +++ b/ffi/capi/bindings/cpp/icu4x/WordSegmenter.hpp @@ -12,6 +12,7 @@ #include "../diplomat_runtime.hpp" #include "DataError.hpp" #include "DataProvider.hpp" +#include "Locale.hpp" #include "WordBreakIteratorLatin1.hpp" #include "WordBreakIteratorUtf16.hpp" #include "WordBreakIteratorUtf8.hpp" @@ -24,12 +25,21 @@ namespace capi { typedef struct icu4x_WordSegmenter_create_auto_mv1_result {union {icu4x::capi::WordSegmenter* ok; icu4x::capi::DataError err;}; bool is_ok;} icu4x_WordSegmenter_create_auto_mv1_result; icu4x_WordSegmenter_create_auto_mv1_result icu4x_WordSegmenter_create_auto_mv1(const icu4x::capi::DataProvider* provider); + typedef struct icu4x_WordSegmenter_create_auto_with_content_locale_mv1_result {union {icu4x::capi::WordSegmenter* ok; icu4x::capi::DataError err;}; bool is_ok;} icu4x_WordSegmenter_create_auto_with_content_locale_mv1_result; + icu4x_WordSegmenter_create_auto_with_content_locale_mv1_result icu4x_WordSegmenter_create_auto_with_content_locale_mv1(const icu4x::capi::DataProvider* provider, const icu4x::capi::Locale* locale); + typedef struct icu4x_WordSegmenter_create_lstm_mv1_result {union {icu4x::capi::WordSegmenter* ok; icu4x::capi::DataError err;}; bool is_ok;} icu4x_WordSegmenter_create_lstm_mv1_result; icu4x_WordSegmenter_create_lstm_mv1_result icu4x_WordSegmenter_create_lstm_mv1(const icu4x::capi::DataProvider* provider); + typedef struct icu4x_WordSegmenter_create_lstm_with_content_locale_mv1_result {union {icu4x::capi::WordSegmenter* ok; icu4x::capi::DataError err;}; bool is_ok;} icu4x_WordSegmenter_create_lstm_with_content_locale_mv1_result; + icu4x_WordSegmenter_create_lstm_with_content_locale_mv1_result icu4x_WordSegmenter_create_lstm_with_content_locale_mv1(const icu4x::capi::DataProvider* provider, const icu4x::capi::Locale* locale); + typedef struct icu4x_WordSegmenter_create_dictionary_mv1_result {union {icu4x::capi::WordSegmenter* ok; icu4x::capi::DataError err;}; bool is_ok;} icu4x_WordSegmenter_create_dictionary_mv1_result; icu4x_WordSegmenter_create_dictionary_mv1_result icu4x_WordSegmenter_create_dictionary_mv1(const icu4x::capi::DataProvider* provider); + typedef struct icu4x_WordSegmenter_create_dictionary_with_content_locale_mv1_result {union {icu4x::capi::WordSegmenter* ok; icu4x::capi::DataError err;}; bool is_ok;} icu4x_WordSegmenter_create_dictionary_with_content_locale_mv1_result; + icu4x_WordSegmenter_create_dictionary_with_content_locale_mv1_result icu4x_WordSegmenter_create_dictionary_with_content_locale_mv1(const icu4x::capi::DataProvider* provider, const icu4x::capi::Locale* locale); + icu4x::capi::WordBreakIteratorUtf8* icu4x_WordSegmenter_segment_utf8_mv1(const icu4x::capi::WordSegmenter* self, diplomat::capi::DiplomatStringView input); icu4x::capi::WordBreakIteratorUtf16* icu4x_WordSegmenter_segment_utf16_mv1(const icu4x::capi::WordSegmenter* self, diplomat::capi::DiplomatString16View input); @@ -48,16 +58,34 @@ inline diplomat::result, icu4x::DataError> return result.is_ok ? diplomat::result, icu4x::DataError>(diplomat::Ok>(std::unique_ptr(icu4x::WordSegmenter::FromFFI(result.ok)))) : diplomat::result, icu4x::DataError>(diplomat::Err(icu4x::DataError::FromFFI(result.err))); } +inline diplomat::result, icu4x::DataError> icu4x::WordSegmenter::create_auto_with_content_locale(const icu4x::DataProvider& provider, const icu4x::Locale& locale) { + auto result = icu4x::capi::icu4x_WordSegmenter_create_auto_with_content_locale_mv1(provider.AsFFI(), + locale.AsFFI()); + return result.is_ok ? diplomat::result, icu4x::DataError>(diplomat::Ok>(std::unique_ptr(icu4x::WordSegmenter::FromFFI(result.ok)))) : diplomat::result, icu4x::DataError>(diplomat::Err(icu4x::DataError::FromFFI(result.err))); +} + inline diplomat::result, icu4x::DataError> icu4x::WordSegmenter::create_lstm(const icu4x::DataProvider& provider) { auto result = icu4x::capi::icu4x_WordSegmenter_create_lstm_mv1(provider.AsFFI()); return result.is_ok ? diplomat::result, icu4x::DataError>(diplomat::Ok>(std::unique_ptr(icu4x::WordSegmenter::FromFFI(result.ok)))) : diplomat::result, icu4x::DataError>(diplomat::Err(icu4x::DataError::FromFFI(result.err))); } +inline diplomat::result, icu4x::DataError> icu4x::WordSegmenter::create_lstm_with_content_locale(const icu4x::DataProvider& provider, const icu4x::Locale& locale) { + auto result = icu4x::capi::icu4x_WordSegmenter_create_lstm_with_content_locale_mv1(provider.AsFFI(), + locale.AsFFI()); + return result.is_ok ? diplomat::result, icu4x::DataError>(diplomat::Ok>(std::unique_ptr(icu4x::WordSegmenter::FromFFI(result.ok)))) : diplomat::result, icu4x::DataError>(diplomat::Err(icu4x::DataError::FromFFI(result.err))); +} + inline diplomat::result, icu4x::DataError> icu4x::WordSegmenter::create_dictionary(const icu4x::DataProvider& provider) { auto result = icu4x::capi::icu4x_WordSegmenter_create_dictionary_mv1(provider.AsFFI()); return result.is_ok ? diplomat::result, icu4x::DataError>(diplomat::Ok>(std::unique_ptr(icu4x::WordSegmenter::FromFFI(result.ok)))) : diplomat::result, icu4x::DataError>(diplomat::Err(icu4x::DataError::FromFFI(result.err))); } +inline diplomat::result, icu4x::DataError> icu4x::WordSegmenter::create_dictionary_with_content_locale(const icu4x::DataProvider& provider, const icu4x::Locale& locale) { + auto result = icu4x::capi::icu4x_WordSegmenter_create_dictionary_with_content_locale_mv1(provider.AsFFI(), + locale.AsFFI()); + return result.is_ok ? diplomat::result, icu4x::DataError>(diplomat::Ok>(std::unique_ptr(icu4x::WordSegmenter::FromFFI(result.ok)))) : diplomat::result, icu4x::DataError>(diplomat::Err(icu4x::DataError::FromFFI(result.err))); +} + inline std::unique_ptr icu4x::WordSegmenter::segment(std::string_view input) const { auto result = icu4x::capi::icu4x_WordSegmenter_segment_utf8_mv1(this->AsFFI(), {input.data(), input.size()}); diff --git a/ffi/capi/bindings/dart/SentenceSegmenter.g.dart b/ffi/capi/bindings/dart/SentenceSegmenter.g.dart index eb8e5511398..79d699860f3 100644 --- a/ffi/capi/bindings/dart/SentenceSegmenter.g.dart +++ b/ffi/capi/bindings/dart/SentenceSegmenter.g.dart @@ -26,10 +26,8 @@ final class SentenceSegmenter implements ffi.Finalizable { /// Construct an [`SentenceSegmenter`]. /// - /// See the [Rust documentation for `new`](https://docs.rs/icu/latest/icu/segmenter/struct.SentenceSegmenter.html#method.new) for more information. - /// /// Throws [DataError] on failure. - factory SentenceSegmenter(DataProvider provider) { + static SentenceSegmenter create(DataProvider provider) { final result = _icu4x_SentenceSegmenter_create_mv1(provider._ffi); if (!result.isOk) { throw DataError.values[result.union.err]; @@ -37,6 +35,17 @@ final class SentenceSegmenter implements ffi.Finalizable { return SentenceSegmenter._fromFfi(result.union.ok, []); } + /// Construct an [`SentenceSegmenter`]. + /// + /// Throws [DataError] on failure. + factory SentenceSegmenter(DataProvider provider, Locale locale) { + final result = _icu4x_SentenceSegmenter_create_with_content_locale_mv1(provider._ffi, locale._ffi); + if (!result.isOk) { + throw DataError.values[result.union.err]; + } + return SentenceSegmenter._fromFfi(result.union.ok, []); + } + /// Segments a string. /// /// Ill-formed input is treated as if errors had been replaced with REPLACEMENT CHARACTERs according @@ -62,6 +71,11 @@ external void _icu4x_SentenceSegmenter_destroy_mv1(ffi.Pointer self); // ignore: non_constant_identifier_names external _ResultOpaqueInt32 _icu4x_SentenceSegmenter_create_mv1(ffi.Pointer provider); +@meta.ResourceIdentifier('icu4x_SentenceSegmenter_create_with_content_locale_mv1') +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true, symbol: 'icu4x_SentenceSegmenter_create_with_content_locale_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_SentenceSegmenter_create_with_content_locale_mv1(ffi.Pointer provider, ffi.Pointer locale); + @meta.ResourceIdentifier('icu4x_SentenceSegmenter_segment_utf16_mv1') @ffi.Native Function(ffi.Pointer, _SliceUtf16)>(isLeaf: true, symbol: 'icu4x_SentenceSegmenter_segment_utf16_mv1') // ignore: non_constant_identifier_names diff --git a/ffi/capi/bindings/dart/WordSegmenter.g.dart b/ffi/capi/bindings/dart/WordSegmenter.g.dart index 6920c8456af..5aee544c07c 100644 --- a/ffi/capi/bindings/dart/WordSegmenter.g.dart +++ b/ffi/capi/bindings/dart/WordSegmenter.g.dart @@ -41,6 +41,23 @@ final class WordSegmenter implements ffi.Finalizable { return WordSegmenter._fromFfi(result.union.ok, []); } + /// Construct an [`WordSegmenter`] with automatically selecting the best available LSTM + /// or dictionary payload data. + /// + /// Note: currently, it uses dictionary for Chinese and Japanese, and LSTM for Burmese, + /// Khmer, Lao, and Thai. + /// + /// See the [Rust documentation for `try_new_auto_with_options`](https://docs.rs/icu/latest/icu/segmenter/struct.WordSegmenter.html#method.try_new_auto_with_options) for more information. + /// + /// Throws [DataError] on failure. + factory WordSegmenter.autoWithContentLocale(DataProvider provider, Locale locale) { + final result = _icu4x_WordSegmenter_create_auto_with_content_locale_mv1(provider._ffi, locale._ffi); + if (!result.isOk) { + throw DataError.values[result.union.err]; + } + return WordSegmenter._fromFfi(result.union.ok, []); + } + /// Construct an [`WordSegmenter`] with LSTM payload data for Burmese, Khmer, Lao, and /// Thai. /// @@ -58,6 +75,23 @@ final class WordSegmenter implements ffi.Finalizable { return WordSegmenter._fromFfi(result.union.ok, []); } + /// Construct an [`WordSegmenter`] with given a locale, and LSTM payload data for Burmese, + /// Khmer, Lao, and Thai. + /// + /// Warning: [`WordSegmenter`] created by this function doesn't handle Chinese or + /// Japanese. + /// + /// See the [Rust documentation for `try_new_lstm_with_options`](https://docs.rs/icu/latest/icu/segmenter/struct.WordSegmenter.html#method.try_new_lstm_with_options) for more information. + /// + /// Throws [DataError] on failure. + factory WordSegmenter.lstmWithContentLocale(DataProvider provider, Locale locale) { + final result = _icu4x_WordSegmenter_create_lstm_with_content_locale_mv1(provider._ffi, locale._ffi); + if (!result.isOk) { + throw DataError.values[result.union.err]; + } + return WordSegmenter._fromFfi(result.union.ok, []); + } + /// Construct an [`WordSegmenter`] with dictionary payload data for Chinese, Japanese, /// Burmese, Khmer, Lao, and Thai. /// @@ -72,6 +106,20 @@ final class WordSegmenter implements ffi.Finalizable { return WordSegmenter._fromFfi(result.union.ok, []); } + /// Construct an [`WordSegmenter`] with given a locale, and dictionary payload data for Chinese, + /// Japanese, Burmese, Khmer, Lao, and Thai. + /// + /// See the [Rust documentation for `try_new_dictionary_with_options`](https://docs.rs/icu/latest/icu/segmenter/struct.WordSegmenter.html#method.try_new_dictionary_with_options) for more information. + /// + /// Throws [DataError] on failure. + factory WordSegmenter.dictionaryWithContentLocale(DataProvider provider, Locale locale) { + final result = _icu4x_WordSegmenter_create_dictionary_with_content_locale_mv1(provider._ffi, locale._ffi); + if (!result.isOk) { + throw DataError.values[result.union.err]; + } + return WordSegmenter._fromFfi(result.union.ok, []); + } + /// Segments a string. /// /// Ill-formed input is treated as if errors had been replaced with REPLACEMENT CHARACTERs according @@ -97,16 +145,31 @@ external void _icu4x_WordSegmenter_destroy_mv1(ffi.Pointer self); // ignore: non_constant_identifier_names external _ResultOpaqueInt32 _icu4x_WordSegmenter_create_auto_mv1(ffi.Pointer provider); +@meta.ResourceIdentifier('icu4x_WordSegmenter_create_auto_with_content_locale_mv1') +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true, symbol: 'icu4x_WordSegmenter_create_auto_with_content_locale_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_WordSegmenter_create_auto_with_content_locale_mv1(ffi.Pointer provider, ffi.Pointer locale); + @meta.ResourceIdentifier('icu4x_WordSegmenter_create_lstm_mv1') @ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer)>(isLeaf: true, symbol: 'icu4x_WordSegmenter_create_lstm_mv1') // ignore: non_constant_identifier_names external _ResultOpaqueInt32 _icu4x_WordSegmenter_create_lstm_mv1(ffi.Pointer provider); +@meta.ResourceIdentifier('icu4x_WordSegmenter_create_lstm_with_content_locale_mv1') +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true, symbol: 'icu4x_WordSegmenter_create_lstm_with_content_locale_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_WordSegmenter_create_lstm_with_content_locale_mv1(ffi.Pointer provider, ffi.Pointer locale); + @meta.ResourceIdentifier('icu4x_WordSegmenter_create_dictionary_mv1') @ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer)>(isLeaf: true, symbol: 'icu4x_WordSegmenter_create_dictionary_mv1') // ignore: non_constant_identifier_names external _ResultOpaqueInt32 _icu4x_WordSegmenter_create_dictionary_mv1(ffi.Pointer provider); +@meta.ResourceIdentifier('icu4x_WordSegmenter_create_dictionary_with_content_locale_mv1') +@ffi.Native<_ResultOpaqueInt32 Function(ffi.Pointer, ffi.Pointer)>(isLeaf: true, symbol: 'icu4x_WordSegmenter_create_dictionary_with_content_locale_mv1') +// ignore: non_constant_identifier_names +external _ResultOpaqueInt32 _icu4x_WordSegmenter_create_dictionary_with_content_locale_mv1(ffi.Pointer provider, ffi.Pointer locale); + @meta.ResourceIdentifier('icu4x_WordSegmenter_segment_utf16_mv1') @ffi.Native Function(ffi.Pointer, _SliceUtf16)>(isLeaf: true, symbol: 'icu4x_WordSegmenter_segment_utf16_mv1') // ignore: non_constant_identifier_names diff --git a/ffi/capi/bindings/js/SentenceSegmenter.d.ts b/ffi/capi/bindings/js/SentenceSegmenter.d.ts index 434a769ecd3..9015ae09f6f 100644 --- a/ffi/capi/bindings/js/SentenceSegmenter.d.ts +++ b/ffi/capi/bindings/js/SentenceSegmenter.d.ts @@ -1,6 +1,7 @@ // generated by diplomat-tool import type { DataError } from "./DataError" import type { DataProvider } from "./DataProvider" +import type { Locale } from "./Locale" import type { SentenceBreakIteratorUtf16 } from "./SentenceBreakIteratorUtf16" import type { pointer, codepoint } from "./diplomat-runtime.d.ts"; @@ -16,5 +17,7 @@ export class SentenceSegmenter { static create(provider: DataProvider): SentenceSegmenter; + static withContentLocale(provider: DataProvider, locale: Locale): SentenceSegmenter; + segment(input: string): SentenceBreakIteratorUtf16; } \ No newline at end of file diff --git a/ffi/capi/bindings/js/SentenceSegmenter.mjs b/ffi/capi/bindings/js/SentenceSegmenter.mjs index 25600c84f1b..a4220726162 100644 --- a/ffi/capi/bindings/js/SentenceSegmenter.mjs +++ b/ffi/capi/bindings/js/SentenceSegmenter.mjs @@ -1,6 +1,7 @@ // generated by diplomat-tool import { DataError } from "./DataError.mjs" import { DataProvider } from "./DataProvider.mjs" +import { Locale } from "./Locale.mjs" import { SentenceBreakIteratorUtf16 } from "./SentenceBreakIteratorUtf16.mjs" import wasm from "./diplomat-wasm.mjs"; import * as diplomatRuntime from "./diplomat-runtime.mjs"; @@ -59,6 +60,24 @@ export class SentenceSegmenter { } } + static withContentLocale(provider, locale) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_SentenceSegmenter_create_with_content_locale_mv1(diplomatReceive.buffer, provider.ffiValue, locale.ffiValue); + + try { + if (!diplomatReceive.resultFlag) { + const cause = DataError[Array.from(DataError.values.keys())[diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)]]; + throw new globalThis.Error('DataError: ' + cause.value, { cause }); + } + return new SentenceSegmenter(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + segment(input) { let functionGarbageCollectorGrip = new diplomatRuntime.GarbageCollectorGrip(); const inputSlice = functionGarbageCollectorGrip.alloc(diplomatRuntime.DiplomatBuf.str16(wasm, input)); diff --git a/ffi/capi/bindings/js/WordSegmenter.d.ts b/ffi/capi/bindings/js/WordSegmenter.d.ts index 3d201258f08..1d006c5f3f2 100644 --- a/ffi/capi/bindings/js/WordSegmenter.d.ts +++ b/ffi/capi/bindings/js/WordSegmenter.d.ts @@ -1,6 +1,7 @@ // generated by diplomat-tool import type { DataError } from "./DataError" import type { DataProvider } from "./DataProvider" +import type { Locale } from "./Locale" import type { WordBreakIteratorUtf16 } from "./WordBreakIteratorUtf16" import type { pointer, codepoint } from "./diplomat-runtime.d.ts"; @@ -16,9 +17,15 @@ export class WordSegmenter { static createAuto(provider: DataProvider): WordSegmenter; + static createAutoWithContentLocale(provider: DataProvider, locale: Locale): WordSegmenter; + static createLstm(provider: DataProvider): WordSegmenter; + static createLstmWithContentLocale(provider: DataProvider, locale: Locale): WordSegmenter; + static createDictionary(provider: DataProvider): WordSegmenter; + static createDictionaryWithContentLocale(provider: DataProvider, locale: Locale): WordSegmenter; + segment(input: string): WordBreakIteratorUtf16; } \ No newline at end of file diff --git a/ffi/capi/bindings/js/WordSegmenter.mjs b/ffi/capi/bindings/js/WordSegmenter.mjs index 7eabcd01b64..41dd7a24e0c 100644 --- a/ffi/capi/bindings/js/WordSegmenter.mjs +++ b/ffi/capi/bindings/js/WordSegmenter.mjs @@ -1,6 +1,7 @@ // generated by diplomat-tool import { DataError } from "./DataError.mjs" import { DataProvider } from "./DataProvider.mjs" +import { Locale } from "./Locale.mjs" import { WordBreakIteratorUtf16 } from "./WordBreakIteratorUtf16.mjs" import wasm from "./diplomat-wasm.mjs"; import * as diplomatRuntime from "./diplomat-runtime.mjs"; @@ -59,6 +60,24 @@ export class WordSegmenter { } } + static createAutoWithContentLocale(provider, locale) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_WordSegmenter_create_auto_with_content_locale_mv1(diplomatReceive.buffer, provider.ffiValue, locale.ffiValue); + + try { + if (!diplomatReceive.resultFlag) { + const cause = DataError[Array.from(DataError.values.keys())[diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)]]; + throw new globalThis.Error('DataError: ' + cause.value, { cause }); + } + return new WordSegmenter(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + static createLstm(provider) { const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); @@ -77,6 +96,24 @@ export class WordSegmenter { } } + static createLstmWithContentLocale(provider, locale) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_WordSegmenter_create_lstm_with_content_locale_mv1(diplomatReceive.buffer, provider.ffiValue, locale.ffiValue); + + try { + if (!diplomatReceive.resultFlag) { + const cause = DataError[Array.from(DataError.values.keys())[diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)]]; + throw new globalThis.Error('DataError: ' + cause.value, { cause }); + } + return new WordSegmenter(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + static createDictionary(provider) { const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); @@ -95,6 +132,24 @@ export class WordSegmenter { } } + static createDictionaryWithContentLocale(provider, locale) { + const diplomatReceive = new diplomatRuntime.DiplomatReceiveBuf(wasm, 5, 4, true); + + const result = wasm.icu4x_WordSegmenter_create_dictionary_with_content_locale_mv1(diplomatReceive.buffer, provider.ffiValue, locale.ffiValue); + + try { + if (!diplomatReceive.resultFlag) { + const cause = DataError[Array.from(DataError.values.keys())[diplomatRuntime.enumDiscriminant(wasm, diplomatReceive.buffer)]]; + throw new globalThis.Error('DataError: ' + cause.value, { cause }); + } + return new WordSegmenter(diplomatRuntime.internalConstructor, diplomatRuntime.ptrRead(wasm, diplomatReceive.buffer), []); + } + + finally { + diplomatReceive.free(); + } + } + segment(input) { let functionGarbageCollectorGrip = new diplomatRuntime.GarbageCollectorGrip(); const inputSlice = functionGarbageCollectorGrip.alloc(diplomatRuntime.DiplomatBuf.str16(wasm, input)); diff --git a/ffi/capi/src/segmenter_sentence.rs b/ffi/capi/src/segmenter_sentence.rs index 4a5eeedce96..34e40d4ce80 100644 --- a/ffi/capi/src/segmenter_sentence.rs +++ b/ffi/capi/src/segmenter_sentence.rs @@ -9,6 +9,7 @@ pub mod ffi { use alloc::boxed::Box; use crate::errors::ffi::DataError; + use crate::locale_core::ffi::Locale; use crate::provider::ffi::DataProvider; #[diplomat::opaque] @@ -40,8 +41,7 @@ pub mod ffi { impl SentenceSegmenter { /// Construct an [`SentenceSegmenter`]. - #[diplomat::rust_link(icu::segmenter::SentenceSegmenter::new, FnInStruct)] - #[diplomat::attr(supports = fallible_constructors, constructor)] + #[diplomat::rust_link(icu::segmenter::SentenceSegmenter::new, FnInStruct, hidden)] pub fn create(provider: &DataProvider) -> Result, DataError> { Ok(Box::new(SentenceSegmenter(call_constructor!( icu_segmenter::SentenceSegmenter::new [r => Ok(r)], @@ -51,6 +51,27 @@ pub mod ffi { )?))) } + /// Construct an [`SentenceSegmenter`]. + #[diplomat::rust_link( + icu::segmenter::SentenceSegmenter::try_new_with_options, + FnInStruct, + hidden + )] + #[diplomat::attr(supports = fallible_constructors, constructor)] + #[diplomat::attr(supports = non_exhaustive_structs, rename = "with_content_locale")] + pub fn create_with_content_locale( + provider: &DataProvider, + locale: &Locale, + ) -> Result, DataError> { + Ok(Box::new(SentenceSegmenter(call_constructor!( + icu_segmenter::SentenceSegmenter::try_new_with_options, + icu_segmenter::SentenceSegmenter::try_new_with_options_with_any_provider, + icu_segmenter::SentenceSegmenter::try_new_with_options_with_buffer_provider, + provider, + locale.into(), + )?))) + } + /// Segments a string. /// /// Ill-formed input is treated as if errors had been replaced with REPLACEMENT CHARACTERs according @@ -142,3 +163,11 @@ pub mod ffi { } } } + +impl From<&crate::locale_core::ffi::Locale> for icu_segmenter::SentenceBreakOptions { + fn from(other: &crate::locale_core::ffi::Locale) -> Self { + let mut options = icu_segmenter::SentenceBreakOptions::default(); + options.content_locale = Some(other.to_datalocale()); + options + } +} diff --git a/ffi/capi/src/segmenter_word.rs b/ffi/capi/src/segmenter_word.rs index 0e6a8c5434c..79939bf259a 100644 --- a/ffi/capi/src/segmenter_word.rs +++ b/ffi/capi/src/segmenter_word.rs @@ -9,6 +9,7 @@ pub mod ffi { use alloc::boxed::Box; use crate::errors::ffi::DataError; + use crate::locale_core::ffi::Locale; use crate::provider::ffi::DataProvider; #[diplomat::enum_convert(icu_segmenter::WordType, needs_wildcard)] @@ -71,6 +72,26 @@ pub mod ffi { )?))) } + /// Construct an [`WordSegmenter`] with automatically selecting the best available LSTM + /// or dictionary payload data. + /// + /// Note: currently, it uses dictionary for Chinese and Japanese, and LSTM for Burmese, + /// Khmer, Lao, and Thai. + #[diplomat::rust_link(icu::segmenter::WordSegmenter::try_new_auto_with_options, FnInStruct)] + #[diplomat::attr(supports = fallible_constructors, named_constructor = "auto_with_content_locale")] + pub fn create_auto_with_content_locale( + provider: &DataProvider, + locale: &Locale, + ) -> Result, DataError> { + Ok(Box::new(WordSegmenter(call_constructor!( + icu_segmenter::WordSegmenter::try_new_auto_with_options, + icu_segmenter::WordSegmenter::try_new_auto_with_options_with_any_provider, + icu_segmenter::WordSegmenter::try_new_auto_with_options_with_buffer_provider, + provider, + locale.into(), + )?))) + } + /// Construct an [`WordSegmenter`] with LSTM payload data for Burmese, Khmer, Lao, and /// Thai. /// @@ -87,6 +108,26 @@ pub mod ffi { )?))) } + /// Construct an [`WordSegmenter`] with given a locale, and LSTM payload data for Burmese, + /// Khmer, Lao, and Thai. + /// + /// Warning: [`WordSegmenter`] created by this function doesn't handle Chinese or + /// Japanese. + #[diplomat::rust_link(icu::segmenter::WordSegmenter::try_new_lstm_with_options, FnInStruct)] + #[diplomat::attr(supports = fallible_constructors, named_constructor = "lstm_with_content_locale")] + pub fn create_lstm_with_content_locale( + provider: &DataProvider, + locale: &Locale, + ) -> Result, DataError> { + Ok(Box::new(WordSegmenter(call_constructor!( + icu_segmenter::WordSegmenter::try_new_lstm_with_options, + icu_segmenter::WordSegmenter::try_new_lstm_with_options_with_any_provider, + icu_segmenter::WordSegmenter::try_new_lstm_with_options_with_buffer_provider, + provider, + locale.into(), + )?))) + } + /// Construct an [`WordSegmenter`] with dictionary payload data for Chinese, Japanese, /// Burmese, Khmer, Lao, and Thai. #[diplomat::rust_link(icu::segmenter::WordSegmenter::new_dictionary, FnInStruct)] @@ -100,6 +141,26 @@ pub mod ffi { )?))) } + /// Construct an [`WordSegmenter`] with given a locale, and dictionary payload data for Chinese, + /// Japanese, Burmese, Khmer, Lao, and Thai. + #[diplomat::rust_link( + icu::segmenter::WordSegmenter::try_new_dictionary_with_options, + FnInStruct + )] + #[diplomat::attr(supports = fallible_constructors, named_constructor = "dictionary_with_content_locale")] + pub fn create_dictionary_with_content_locale( + provider: &DataProvider, + locale: &Locale, + ) -> Result, DataError> { + Ok(Box::new(WordSegmenter(call_constructor!( + icu_segmenter::WordSegmenter::try_new_dictionary_with_options, + icu_segmenter::WordSegmenter::try_new_dictionary_with_options_with_any_provider, + icu_segmenter::WordSegmenter::try_new_dictionary_with_options_with_buffer_provider, + provider, + locale.into(), + )?))) + } + /// Segments a string. /// /// Ill-formed input is treated as if errors had been replaced with REPLACEMENT CHARACTERs according @@ -235,3 +296,11 @@ pub mod ffi { } } } + +impl From<&crate::locale_core::ffi::Locale> for icu_segmenter::WordBreakOptions { + fn from(other: &crate::locale_core::ffi::Locale) -> Self { + let mut options = icu_segmenter::WordBreakOptions::default(); + options.content_locale = Some(other.to_datalocale()); + options + } +} diff --git a/ffi/capi/tests/missing_apis.txt b/ffi/capi/tests/missing_apis.txt index eaf1b2f3e7e..dd91e6a691e 100644 --- a/ffi/capi/tests/missing_apis.txt +++ b/ffi/capi/tests/missing_apis.txt @@ -616,6 +616,8 @@ icu::properties::names::PropertyEnumToValueNameSparseMapperBorrowed::get#FnInStr icu::properties::names::PropertyScriptToIcuScriptMapper#Struct icu::properties::names::PropertyScriptToIcuScriptMapperBorrowed#Struct icu::properties::names::PropertyScriptToIcuScriptMapperBorrowed::get#FnInStruct +icu::segmenter::SentenceBreakOptions#Struct +icu::segmenter::WordBreakOptions#Struct icu::timezone::CustomTimeZone::new_with_bcp47_id#FnInStruct icu::timezone::CustomZonedDateTime#Struct icu::timezone::CustomZonedDateTime::from_str#FnInStruct diff --git a/provider/data/segmenter/data/mod.rs b/provider/data/segmenter/data/mod.rs index 975dc52e079..e8b9fbe0e96 100644 --- a/provider/data/segmenter/data/mod.rs +++ b/provider/data/segmenter/data/mod.rs @@ -4,7 +4,9 @@ include!("dictionary_for_word_line_extended_v1_marker.rs.data"); include!("grapheme_cluster_break_data_v2_marker.rs.data"); include!("line_break_data_v2_marker.rs.data"); include!("lstm_for_word_line_auto_v1_marker.rs.data"); +include!("sentence_break_data_override_v1_marker.rs.data"); include!("sentence_break_data_v2_marker.rs.data"); +include!("word_break_data_override_v1_marker.rs.data"); include!("word_break_data_v2_marker.rs.data"); /// Marks a type as a data provider. You can then use macros like /// `impl_core_helloworld_v1` to add implementations. @@ -40,7 +42,9 @@ macro_rules! impl_data_provider { impl_grapheme_cluster_break_data_v2_marker!($provider); impl_line_break_data_v2_marker!($provider); impl_lstm_for_word_line_auto_v1_marker!($provider); + impl_sentence_break_data_override_v1_marker!($provider); impl_sentence_break_data_v2_marker!($provider); + impl_word_break_data_override_v1_marker!($provider); impl_word_break_data_v2_marker!($provider); }; } @@ -56,7 +60,9 @@ macro_rules! impl_any_provider { h if h == ::INFO.path.hashed() => icu_provider::DataProvider::::load(self, req).map(icu_provider::DataResponse::wrap_into_any_response), h if h == ::INFO.path.hashed() => icu_provider::DataProvider::::load(self, req).map(icu_provider::DataResponse::wrap_into_any_response), h if h == ::INFO.path.hashed() => icu_provider::DataProvider::::load(self, req).map(icu_provider::DataResponse::wrap_into_any_response), + h if h == ::INFO.path.hashed() => icu_provider::DataProvider::::load(self, req).map(icu_provider::DataResponse::wrap_into_any_response), h if h == ::INFO.path.hashed() => icu_provider::DataProvider::::load(self, req).map(icu_provider::DataResponse::wrap_into_any_response), + h if h == ::INFO.path.hashed() => icu_provider::DataProvider::::load(self, req).map(icu_provider::DataResponse::wrap_into_any_response), h if h == ::INFO.path.hashed() => icu_provider::DataProvider::::load(self, req).map(icu_provider::DataResponse::wrap_into_any_response), _ => Err(icu_provider::DataErrorKind::MarkerNotFound.with_req(marker, req)), } diff --git a/provider/data/segmenter/data/sentence_break_data_override_v1_marker.rs.data b/provider/data/segmenter/data/sentence_break_data_override_v1_marker.rs.data new file mode 100644 index 00000000000..f7f2f501570 --- /dev/null +++ b/provider/data/segmenter/data/sentence_break_data_override_v1_marker.rs.data @@ -0,0 +1,80 @@ +// @generated +/// Implement `DataProvider` on the given struct using the data +/// hardcoded in this file. This allows the struct to be used with +/// `icu`'s `_unstable` constructors. +/// +/// Using this implementation will embed the following data in the binary's data segment: +/// * 35B for the lookup data structure (1 data identifiers) +/// * 332B[^1] for the actual data (1 unique structs) +/// +/// [^1]: these numbers can be smaller in practice due to linker deduplication +#[doc(hidden)] +#[macro_export] +macro_rules! __impl_sentence_break_data_override_v1_marker { + ($ provider : ty) => { + #[clippy::msrv = "1.70"] + const _: () = <$provider>::MUST_USE_MAKE_PROVIDER_MACRO; + #[clippy::msrv = "1.70"] + impl $provider { + const DATA_SENTENCE_BREAK_DATA_OVERRIDE_V1_MARKER: icu_provider_baked::zerotrie::Data = icu_provider_baked::zerotrie::Data { trie: icu_provider_baked::zerotrie::ZeroTrieSimpleAscii { store: b"el\x80" }, values: &[icu::segmenter::provider::RuleBreakDataOverrideV1 { property_table_override: icu::collections::codepointtrie::CodePointTrie::from_parts(icu::collections::codepointtrie::CodePointTrieHeader { high_start: 1024u32, shifted12_high_start: 1u16, index3_null_offset: 32767u16, data_null_offset: 64u32, null_value: 0u32, trie_type: icu::collections::codepointtrie::TrieType::Small }, unsafe { zerovec::ZeroVec::from_bytes_unchecked(b"\0\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0B\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0") }, unsafe { zerovec::ZeroVec::from_bytes_unchecked(b"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\r\0\0\0") }, 0u8) }] }; + } + #[clippy::msrv = "1.70"] + impl icu_provider::DataProvider for $provider { + fn load(&self, req: icu_provider::DataRequest) -> Result, icu_provider::DataError> { + let mut metadata = icu_provider::DataResponseMetadata::default(); + let payload = if let Some(payload) = icu_provider_baked::DataStore::get(&Self::DATA_SENTENCE_BREAK_DATA_OVERRIDE_V1_MARKER, req.id, req.metadata.attributes_prefix_match) { + payload + } else { + const FALLBACKER: icu::locale::fallback::LocaleFallbackerWithConfig<'static> = icu::locale::fallback::LocaleFallbacker::new().for_config(::INFO.fallback_config); + let mut fallback_iterator = FALLBACKER.fallback_for(req.id.locale.clone()); + loop { + if let Some(payload) = icu_provider_baked::DataStore::get(&Self::DATA_SENTENCE_BREAK_DATA_OVERRIDE_V1_MARKER, icu_provider::DataIdentifierBorrowed::for_marker_attributes_and_locale(req.id.marker_attributes, fallback_iterator.get()), req.metadata.attributes_prefix_match) { + metadata.locale = Some(fallback_iterator.take()); + break payload; + } + if fallback_iterator.get().is_default() { + return Err(icu_provider::DataErrorKind::IdentifierNotFound.with_req(::INFO, req)); + } + fallback_iterator.step(); + } + }; + Ok(icu_provider::DataResponse { payload: icu_provider::DataPayload::from_static_ref(payload), metadata }) + } + } + }; + ($ provider : ty , DRY) => { + __impl_sentence_break_data_override_v1_marker!($provider); + #[clippy::msrv = "1.70"] + impl icu_provider::DryDataProvider for $provider { + fn dry_load(&self, req: icu_provider::DataRequest) -> Result { + icu_provider::DataProvider::::load(self, req).map(|r| r.metadata) + } + } + }; + ($ provider : ty , ITER) => { + __impl_sentence_break_data_override_v1_marker!($provider); + #[clippy::msrv = "1.70"] + impl icu_provider::IterableDataProvider for $provider { + fn iter_ids(&self) -> Result>, icu_provider::DataError> { + Ok(icu_provider_baked::DataStore::iter(&Self::DATA_SENTENCE_BREAK_DATA_OVERRIDE_V1_MARKER).collect()) + } + } + }; + ($ provider : ty , DRY , ITER) => { + __impl_sentence_break_data_override_v1_marker!($provider); + #[clippy::msrv = "1.70"] + impl icu_provider::DryDataProvider for $provider { + fn dry_load(&self, req: icu_provider::DataRequest) -> Result { + icu_provider::DataProvider::::load(self, req).map(|r| r.metadata) + } + } + #[clippy::msrv = "1.70"] + impl icu_provider::IterableDataProvider for $provider { + fn iter_ids(&self) -> Result>, icu_provider::DataError> { + Ok(icu_provider_baked::DataStore::iter(&Self::DATA_SENTENCE_BREAK_DATA_OVERRIDE_V1_MARKER).collect()) + } + } + }; +} +#[doc(inline)] +pub use __impl_sentence_break_data_override_v1_marker as impl_sentence_break_data_override_v1_marker; diff --git a/provider/data/segmenter/data/word_break_data_override_v1_marker.rs.data b/provider/data/segmenter/data/word_break_data_override_v1_marker.rs.data new file mode 100644 index 00000000000..1c5e54d6d77 --- /dev/null +++ b/provider/data/segmenter/data/word_break_data_override_v1_marker.rs.data @@ -0,0 +1,80 @@ +// @generated +/// Implement `DataProvider` on the given struct using the data +/// hardcoded in this file. This allows the struct to be used with +/// `icu`'s `_unstable` constructors. +/// +/// Using this implementation will embed the following data in the binary's data segment: +/// * 40B for the lookup data structure (2 data identifiers) +/// * 556B[^1] for the actual data (1 unique structs) +/// +/// [^1]: these numbers can be smaller in practice due to linker deduplication +#[doc(hidden)] +#[macro_export] +macro_rules! __impl_word_break_data_override_v1_marker { + ($ provider : ty) => { + #[clippy::msrv = "1.70"] + const _: () = <$provider>::MUST_USE_MAKE_PROVIDER_MACRO; + #[clippy::msrv = "1.70"] + impl $provider { + const DATA_WORD_BREAK_DATA_OVERRIDE_V1_MARKER: icu_provider_baked::zerotrie::Data = icu_provider_baked::zerotrie::Data { trie: icu_provider_baked::zerotrie::ZeroTrieSimpleAscii { store: b"\xC2fs\x02i\x80v\x80" }, values: &[icu::segmenter::provider::RuleBreakDataOverrideV1 { property_table_override: icu::collections::codepointtrie::CodePointTrie::from_parts(icu::collections::codepointtrie::CodePointTrieHeader { high_start: 65536u32, shifted12_high_start: 16u16, index3_null_offset: 1u16, data_null_offset: 64u32, null_value: 0u32, trie_type: icu::collections::codepointtrie::TrieType::Small }, unsafe { zerovec::ZeroVec::from_bytes_unchecked(b"\0\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0\x88\0\x90\0\x90\0\x91\0\0\0\x10\0 \x000\0@\0P\0`\0p\0@\0P\0`\0p\0@\0P\0`\0p\0@\0P\0`\0p\0@\0P\0`\0p\0@\0P\0`\0p\0@\0P\0`\0p\0@\0P\0`\0p\0@\0@\0@\0@\0@\x005\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\x000\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0@\0D\0H\0H\0H\0H\0H\0H\0H\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0\x01\0h\0") }, unsafe { zerovec::ZeroVec::from_bytes_unchecked(b"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x0E\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0") }, 0u8) }] }; + } + #[clippy::msrv = "1.70"] + impl icu_provider::DataProvider for $provider { + fn load(&self, req: icu_provider::DataRequest) -> Result, icu_provider::DataError> { + let mut metadata = icu_provider::DataResponseMetadata::default(); + let payload = if let Some(payload) = icu_provider_baked::DataStore::get(&Self::DATA_WORD_BREAK_DATA_OVERRIDE_V1_MARKER, req.id, req.metadata.attributes_prefix_match) { + payload + } else { + const FALLBACKER: icu::locale::fallback::LocaleFallbackerWithConfig<'static> = icu::locale::fallback::LocaleFallbacker::new().for_config(::INFO.fallback_config); + let mut fallback_iterator = FALLBACKER.fallback_for(req.id.locale.clone()); + loop { + if let Some(payload) = icu_provider_baked::DataStore::get(&Self::DATA_WORD_BREAK_DATA_OVERRIDE_V1_MARKER, icu_provider::DataIdentifierBorrowed::for_marker_attributes_and_locale(req.id.marker_attributes, fallback_iterator.get()), req.metadata.attributes_prefix_match) { + metadata.locale = Some(fallback_iterator.take()); + break payload; + } + if fallback_iterator.get().is_default() { + return Err(icu_provider::DataErrorKind::IdentifierNotFound.with_req(::INFO, req)); + } + fallback_iterator.step(); + } + }; + Ok(icu_provider::DataResponse { payload: icu_provider::DataPayload::from_static_ref(payload), metadata }) + } + } + }; + ($ provider : ty , DRY) => { + __impl_word_break_data_override_v1_marker!($provider); + #[clippy::msrv = "1.70"] + impl icu_provider::DryDataProvider for $provider { + fn dry_load(&self, req: icu_provider::DataRequest) -> Result { + icu_provider::DataProvider::::load(self, req).map(|r| r.metadata) + } + } + }; + ($ provider : ty , ITER) => { + __impl_word_break_data_override_v1_marker!($provider); + #[clippy::msrv = "1.70"] + impl icu_provider::IterableDataProvider for $provider { + fn iter_ids(&self) -> Result>, icu_provider::DataError> { + Ok(icu_provider_baked::DataStore::iter(&Self::DATA_WORD_BREAK_DATA_OVERRIDE_V1_MARKER).collect()) + } + } + }; + ($ provider : ty , DRY , ITER) => { + __impl_word_break_data_override_v1_marker!($provider); + #[clippy::msrv = "1.70"] + impl icu_provider::DryDataProvider for $provider { + fn dry_load(&self, req: icu_provider::DataRequest) -> Result { + icu_provider::DataProvider::::load(self, req).map(|r| r.metadata) + } + } + #[clippy::msrv = "1.70"] + impl icu_provider::IterableDataProvider for $provider { + fn iter_ids(&self) -> Result>, icu_provider::DataError> { + Ok(icu_provider_baked::DataStore::iter(&Self::DATA_WORD_BREAK_DATA_OVERRIDE_V1_MARKER).collect()) + } + } + }; +} +#[doc(inline)] +pub use __impl_word_break_data_override_v1_marker as impl_word_break_data_override_v1_marker; diff --git a/provider/data/segmenter/data/word_break_data_v2_marker.rs.data b/provider/data/segmenter/data/word_break_data_v2_marker.rs.data index eb8baf28d14..f1fa234863e 100644 --- a/provider/data/segmenter/data/word_break_data_v2_marker.rs.data +++ b/provider/data/segmenter/data/word_break_data_v2_marker.rs.data @@ -16,7 +16,7 @@ macro_rules! __impl_word_break_data_v2_marker { #[clippy::msrv = "1.71.1"] impl $provider { #[doc(hidden)] - pub const SINGLETON_WORD_BREAK_DATA_V2_MARKER: &'static ::DataStruct = &icu::segmenter::provider::RuleBreakDataV2 { property_table: icu::collections::codepointtrie::CodePointTrie::from_parts(icu::collections::codepointtrie::CodePointTrieHeader { high_start: 918016u32, shifted12_high_start: 225u16, index3_null_offset: 1130u16, data_null_offset: 14u32, null_value: 0u32, trie_type: icu::collections::codepointtrie::TrieType::Small }, unsafe { zerovec::ZeroVec::from_bytes_unchecked(b"\0\0@\0{\0\xBB\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\x1B\x01[\x01k\x01\xAB\x01\xCE\x01\xF3\0\xF3\0\x0C\x02\xF3\0\x1C\x02M\x02\x84\x02\xC2\x02\x02\x037\x03\xF3\0h\x03\xA8\x03\xDD\x03\xF7\x037\x04w\x04\xB7\x04\xEF\x04%\x05a\x05\x9F\x05\xDE\x05\x1C\x06[\x06\x99\x06\xD8\x06\x16\x07V\x07\x94\x07\xD2\x07\x10\x08P\x08\x8E\x08\xCE\x08\x0C\tL\t\x8A\t\xCA\t\n\nI\n\x89\n\xC8\n\x08\x0BH\x0B\x88\x0B\xC3\x0B\0\x0C\x10\x0B*\x0B:\x0BP\x0Bp\x0B\x8E\x0B\xA6\x0B\xC5\x0B\xE5\x0B\xE5\x0B\xF2\x0B\x0F\x0C/\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0Ca\x0C\0\0\x10\0 \x000\0@\0P\0`\0p\0{\0\x8B\0\x9B\0\xAB\0\xBB\0\xCB\0\xDB\0\xEB\0\xF3\0\x03\x01\x13\x01#\x01\xF3\0\x03\x01\x13\x01#\x01\xF3\0\x03\x01\x13\x01#\x01\xF3\0\x03\x01\x13\x01#\x01\x1B\x01+\x01;\x01K\x01[\x01k\x01{\x01\x8B\x01k\x01{\x01\x8B\x01\x9B\x01\xAB\x01\xBB\x01\xCB\x01\xDB\x01\xCE\x01\xDE\x01\xEE\x01\xFE\x01\xF3\0\x03\x01\x13\x01#\x01\xF3\0\x03\x01\x13\x01#\x01\x0C\x02\x1C\x02,\x02<\x02\xF3\0\x03\x01\x13\x01#\x01\x1C\x02,\x02<\x02L\x02M\x02]\x02m\x02}\x02\x84\x02\x94\x02\xA4\x02\xB4\x02\xC2\x02\xD2\x02\xE2\x02\xF2\x02\x02\x03\x12\x03\"\x032\x037\x03G\x03W\x03g\x03\xF3\0\x03\x01\x13\x01#\x01h\x03x\x03\x88\x03\x98\x03\xA8\x03\xB8\x03\xC8\x03\xD8\x03\xDD\x03\xED\x03\xFD\x03\r\x04\xF7\x03\x07\x04\x17\x04'\x047\x04G\x04W\x04g\x04w\x04\x87\x04\x97\x04\xA7\x04\xB7\x04\xC7\x04\xD7\x04\xE7\x04\xEF\x04\xFF\x04\x0F\x05\x1F\x05%\x055\x05E\x05U\x05a\x05q\x05\x81\x05\x91\x05\x9F\x05\xAF\x05\xBF\x05\xCF\x05\xDE\x05\xEE\x05\xFE\x05\x0E\x06\x1C\x06,\x06<\x06L\x06[\x06k\x06{\x06\x8B\x06\x99\x06\xA9\x06\xB9\x06\xC9\x06\xD8\x06\xE8\x06\xF8\x06\x08\x07\x16\x07&\x076\x07F\x07V\x07f\x07v\x07\x86\x07\x94\x07\xA4\x07\xB4\x07\xC4\x07\xD2\x07\xE2\x07\xF2\x07\x02\x08\x10\x08 \x080\x08@\x08P\x08`\x08p\x08\x80\x08\x8E\x08\x9E\x08\xAE\x08\xBE\x08\xCE\x08\xDE\x08\xEE\x08\xFE\x08\x0C\t\x1C\t,\t<\tL\t\\\tl\t|\t\x8A\t\x9A\t\xAA\t\xBA\t\xCA\t\xDA\t\xEA\t\xFA\t\n\n\x1A\n*\n:\nI\nY\ni\ny\n\x89\n\x99\n\xA9\n\xB9\n\xC8\n\xD8\n\xE8\n\xF8\n\x08\x0B\x18\x0B(\x0B8\x0BH\x0BX\x0Bh\x0Bx\x0B\x88\x0B\x98\x0B\xA8\x0B\xB8\x0B\xC3\x0B\xD3\x0B\xE3\x0B\xF3\x0B\0\x0C\x10\x0C \x0C0\x0CJ\nJ\nJ\nJ\n<\x07J\nJ\nJ\nJ\n@\x0C\xF3\0\xF3\0P\x0C\xF3\0\xF3\0\xC7\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0`\x0Cp\x0C\xF3\0\xF3\0`\x0C\xF3\0\xF3\0h\x0Cx\x0C\xCB\0\xF3\0\xF3\0\xF3\0x\x0C\xF3\0\xF3\0\xF3\0\x80\x0C\x0E\0\x0E\0\xF3\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\x90\x0C@\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0W\x02\xF3\0\xA0\x0Cp\0\xF3\0\xF3\0\xF3\0\xF3\0\xD6\t\xA7\x0C\xF3\0\xB7\x0C\xF3\0\xC6\x0C\xF3\0\xD6\x0C\xC5\0\xE6\x0CJ\nJ\nJ\nJ\nJ\n\xF6\x0C<\x07\x0E\0\x04\r<\x07\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xA7\x0C\x14\r\xF3\0\x1B\r\xF3\0\xF3\0\xF3\0\xF3\0+\r\xF3\0L\0\xF4\x0B\xF4\x0B1\x04J\nv\n;\rJ\nJ\nx\nJ\nK\r[\r\x0E\0\x0E\0\xF3\0k\rJ\nJ\nJ\nu\nJ\n{\r<\x07<\x07v\n[\x01\xB3\x02\x0E\0\x0E\0\x0E\0\x11\x02\xF3\0\xF3\0W\x01\x8A\r<\x07E\x08\xA1\x04\x13\x02\xF3\0\x9A\r7\x04\xF3\0\xF3\0U\x01\xA1\x04\xF3\0\xF3\0W\x01\xAA\r\xBA\r7\x04\xF3\0M\0\xA7\x0C\xF3\0\xF3\0Y\x02\x0E\0\xD8\x0B\xCA\r\xD3\r\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0[\x01[\x01[\x01[\x01\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\x90\x0C\xF3\0\xF3\0\x90\x0C\xE3\r\xF3\0M\0\xF3\0\xF3\0\xF3\0\x02\x06\xF3\r\x03\x0EN\0\xF3\r\x13\x0E#\x0E/\x0E?\x0EN\x0EZ\x0Ej\x0Ez\x0E\x0E\0N\0\x0E\0\x0E\0\x0E\0[\x01[\x01\xA4\x04\x87\x0E\x93\x0E\xA1\x0E\xB0\x0E\xC0\x0E\x0E\0\xF3\0\xF3\0\xA7\x0C\xCF\x0E\xD9\x0E\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xE4\x0E\xF0\x0E\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF0\x0E\x0E\0\x0E\0\x0E\0\x95\0\x0E\0\xF9\x0E\x05\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\x003\x01\x15\x0F\xF3\0)\x01\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xE4\x0E\xF2\x0E%\x0F\x0E\0\x0E\0*\x0F:\x0F=\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FK\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0F[\x0Fh\x0Fm\x0Fz\x0F\x86\x0F\x95\x0F\xA2\x0F\x0E\0\x0E\0\xAD\x0F\xBC\x0F\xBD\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xDE\x0E\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xAD\x0F\xC1\x0F\x0E\0\x0E\0\x0E\0\xCD\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xDD\x0F\xEC\x0F\xF3\0\xF3\0P\x0C\xF3\0\xF3\0\xF3\0\xA8\x0CA\x08\xF3\0\xFC\x0F\0\x06\0\x06\0\x06\0\x06[\x01[\x01\x0E\0\x0E\0\xA8\x03\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0J\n\x0C\x10J\nJ\nJ\nJ\nJ\n$\x0BJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n\x17\x10\x0E\0\x0E\0'\x10\x0E\x006\x10F\x10I\nJ\nJ\nJ\nJ\nV\x10f\x10f\x10f\x10f\x10f\x10k\x10<\0\xF3\0\xF3\0@\0\xF3\0\xF3\0\xF3\0\xF3\0L\0\x0E\0\xF3\0\xF3\0\x0E\0\x0E\0\x0E\0f\x10\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0{\x10\x0E\0\x0E\0\x0E\0f\x10f\x10g\x10f\x10f\x10f\x10f\x10f\x10\x8B\x10\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0J\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0N\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0M\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0N\0\xF3\0B\x06\x0E\0\xF3\0\xF3\0L\x01\x9B\x10\xF3\0M\x01\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xA3\x04\xAF\x04\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0p\0\xAA\x10\x0E\0?\0\xBA\x10\xF3\0\xC7\x10\x0E\0\xF3\0\xF3\0\xF3\0\xD7\x10\x14\x02\xF3\0\xF3\0W\x01\xE7\x10<\x07[\x01\xF7\x107\x04\xF3\0\x07\x11\xF3\0T\x01\xA1\x04\xF3\0N\0\x12\x02\xF3\0\xF3\0X\x01\x14\x11<\x07J\n$\x11\xF3\0\xF3\0R\x01\x0E\x114\x11<\x07J\nJ\nJ\nJ\nJ\nJ\n%\x0B?\nP\x01B\x11Q\x11*\r\0\x06\xF3\0\xF3\0\xF3\0)\x01\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0a\x11<\x07\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xD7\x10\xF3\0q\x11\xF3\0\xF3\0O\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0J\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nv\nJ\nJ\nJ\nJ\nJ\nJ\nK\r\x0E\0\x0E\0\xFC\x0Fy\x11\x88\x11\x92\x11\xA2\x11\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xB2\x11\x0E\0>\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0M\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0?\0\xF3\0\xF3\0\xC2\x11\x0E\0\x0E\0O\0[\x01\xD2\x11[\x01\xDF\x11\xE4\x11\xF4\x11\x0E\0\xCD\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\x04\x12\x14\x120\0@\0P\0@\0p\0#\x12f\x10f\x10)\x12\xF3\0L\0P\x119\x12\x0E\0F\x12\xC6\0\xF3\0\xCB\0V\x12M\0M\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0p\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0e\x12\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0j\x12\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0N\0\xF3\0\xF3\0\xF3\0\xA7\x03\xA4\x04\x0E\0\xF3\0\xF3\0\xAA\x04\xF3\0p\0\xF3\0\xF3\0z\x12\xF3\0M\0\xF3\0\xF3\0\x8A\x12d\x12\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0M\0<\x07\xF3\0\xF3\0\x8A\x12\xF3\0O\0\xF3\0\xF3\0\xC2\x11\xF3\0\xF3\0\xF3\0\xD7\x10\xC7\0\xC7\0\x97\x12\xD0\0\xA5\x12\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xFC\x0F\xF3\0+\r\xC2\x11\x0E\0\xCC\0\xF3\0\xF3\0\xB5\x12\x0E\0\x0E\0\x0E\0\x0E\0\xC5\x12\xF3\0\xF3\0\xCF\x12\xF3\0+\r\xF3\0\xFC\x0F\xF3\0L\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xDE\x12\xF3\0+\r\xF3\0)\x01\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0+\x01\x0E\0\x0E\0\x0E\0\x0E\0\xEE\x12\xE2\x06\xF3\0\xFE\x12\x0E\0\x0E\0\xF3\0N\0\xF3\0N\0\x0E\0\x0E\0\xCA\0\xF3\0\x0E\x13\x0E\0\xF3\0\xF3\0\xF3\0+\r\xF3\0+\r\xF3\0g\x12\xF3\0\xB2\x11\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xA7\x0C\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0g\x12\xF3\0\xF3\0\xF3\0g\x12\xF3\0\xF3\0\x1E\x13<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0.\x13\xB2\x11\x0E\0\x0E\0\x0E\0C\x08\xF3\0N\0A\x0B\xF3\0U\x01\xA4\x04\x0E\0\xF3\0>\x13\x0E\0\x0E\0\xF3\0e\x12\x0E\0\xF3\0\xFC\x0F\x13\x02\xF3\0\xF3\0S\x01\x0E\x11\x0E\x001\x04N\x13\x13\x02\xF3\0\xF3\0]\x13k\x13\xF3\0\xA7\x0C<\x07\x13\x02\xF3\0T\x01{\x13\x8B\x13\xF3\0\xF3\0\x9B\x13\x13\x02\xF3\0\xF3\0X\x01\xAB\x13\xBB\x13\x0E\0\x0E\0\xF3\0\xD0\0O\x01\xCB\x13\xDA\x13\x0E\0\x0E\0\x0E\0\xEA\x13\xC4\0\xA7\x0C\xF3\0\xF3\0L\x01\xF5\x0B<\x07\xFA\x13\xEE\x05\xC9\0\t\x14\x94\x07\x19\x14'\x14\xA0\x04\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0V\x017\x14G\x14\xB2\x11\x0E\0\xF3\0\xF3\0\xF3\0[\x01W\x14<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0L\x01g\x14\xA4\x04w\x14\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0[\x01\x84\x14<\x07\x0E\0\x0E\0\xF3\0\xF3\0P\x01 \x04<\x07\x0E\0\x0E\0\x0E\0J\n\xFB\nx\n\x94\x14\xA3\x14\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0O\x01\xF5\x0B\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0<\x07\xA8\x03\xB3\x14\x96\x12\xF3\0\xC3\x14\xD1\x14<\x07\x0E\0\x0E\0\x0E\0\x0E\0\xE1\x14\xF3\0\xF3\0\xF0\x14\xFF\x14\x0E\0\x0F\x15\xF3\0\xF3\0\x1C\x15+\x15;\x15\xF3\0\xF3\0Q\x01K\x15\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xA7\x0C\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xC9\0\xF3\0L\x01\xD4\x0B\xA7\x03<\x07\x0E\0?\0\xF3\0\x93\x02\xD3\x0B\x0E\x11\x0E\0\x0E\0\x0E\0\x0E\0\x02\x07\xF3\0\xF3\0[\x15j\x15<\x07\x94\x12\xF3\0z\x15\x87\x15<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\x97\x15\xA7\x15\xD1\0\xF3\0\xB3\x15\xA2\x04<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xA7\x03\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0)\x01\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0L\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xD7\x10\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xA7\x03\xF3\0\xF3\0\xF3\0\xC3\x15\xD3\x15\xE7\x10\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xFC\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xA7\x0C\xF3\0L\0<\x07\xF3\0\xF3\0\xF3\0\xF3\0L\0<\x07\xF3\0M\0\xA0\x04\xF3\0\xF3\0\xF3\0\x0E\x11\xD7\x10<\x07>\0\xDA\x04\xF3\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\x01\x08Z\x01[\x01[\x01\xDB\x15\x13\x02\x0E\0\x0E\0\x0E\0\x0E\0\xEB\x15&\x0B\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xFB\x15\x0B\x16J\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n\x1B\x16)\x16\x0E\09\x16E\x16\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0p\0N\0\xA7\x0CU\x16e\x16\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0[\x01[\x01\xDA\x03[\x01\x0E\x11\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0p\x16}\x16\x8A\x16\x0E\0\x96\x16\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xA4\x16\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xCD\0\xF3\0\xF3\0\xF3\0\xC5\0\xB2\x16\xC0\x16\xCE\0\xF3\0\xF3\0\xF3\0c\x0C\x7F\x06\xF3\0\xCD\x16\xDD\x16\xD1\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xE7\x16\xF3\0\xD1\0\xC7\0\xF3\0\xC7\0\xF3\0\xCD\0\xF3\0\xCD\0L\0\xF3\0L\0\xF3\0\xC9\0\xF3\0\xC9\0\xF3\0\xF4\x16\x02\x17\x02\x17\x02\x17[\x01[\x01[\x01\x12\x17[\x01[\x01\xF3\x0B\"\x08#\x08E\x08\x94\x02\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0L\0&\r\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xD4\x0B\x1D\x17+\x17\xF3\0\xF3\0\xF3\0M\0\x0E\0A\x08\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0N\0;\x17K\x17\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0[\x17\x0E\0\xF3\0\xF3\0O\x01<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0O\x01<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0k\x17L\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0e\x12\x0E\x11\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0{\x17<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xCE\0\xF3\0\x8A\x17\x97\x17\xA5\x17\xB5\x17\xC3\x17\xCB\x17\xC8\0O\0\xDA\x17O\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0A\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0F(\x0F\x0E\0\x95\0\xF3\0)\x01\xF3\0\xE5\x17\xF3\x17\x03\x18\x12\x18(\x0FA\x0FA\x0FA\x0F\"\x18(\x188\x18H\x18\x95\0V\x18\xF9\x0EA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0Fb\x18A\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FC\x0Fr\x18A\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0F\x0E\0\x0E\0\x0E\0A\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0t\x18\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0s\x18A\x0FA\x0F)\x0F\x0E\0\x0E\0\x0E\0\x84\x18Q\x0F\x0E\0\x0E\0\x84\x18\x0E\0'\x0FA\x0FA\x0FA\x0FA\x0FA\x0F)\x0FA\x0FA\x0F\x8C\x18:\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0<\x07A\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FC\x0FJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n\x0E\0\x0E\0J\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nK\rJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nv\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n&\x0BJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n'\x0BJ\nJ\nJ\nJ\nJ\nv\n\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0J\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\ny\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x9C\x18\x0E\0[\x01[\x01[\x01[\x01[\x01[\x01\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01\x0E\0y\0\x8D\0\xAD\0\xCD\0\xED\0\r\x01-\x01M\x01m\x01\x89\x01\xA9\x01\xC3\x01\xE3\x01\x03\x02#\x02C\x02c\x02~\x02\x9E\x02\xBE\x02\xDA\x02\xEE\x02\x0E\x03.\x03N\x03n\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x92\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\xB2\x03\xB2\x03\xCA\x03\xEA\x03\n\x04*\x04\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03J\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04z\x04\x94\x04\xB2\x04\xD2\x04\xF2\x04\x12\x052\x05R\x05r\x05\x92\x05\xB2\x05\xCA\x05\xEA\x05\n\x06*\x06J\x06j\x06\x8A\x06\xAA\x06\xC5\x06\xB2\x03\xE5\x06\x05\x07j\x04j\x04j\x04j\x04\x1A\x07\xB2\x03\xB2\x03:\x07j\x04j\x04j\x04j\x04j\x04\xB2\x03Z\x07j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04\xB2\x03z\x07j\x04\x96\x07j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04\xB6\x07\xD6\x07j\x04j\x04j\x04j\x04j\x04\xF6\x07j\x04j\x04j\x04j\x04j\x04j\x04j\x04\x06\x08\x1B\x087\x08W\x08m\x08j\x04\x8D\x08j\x04\x9D\x08\xBD\x08\xD4\x08\xE7\x08\xF7\x08\x17\tj\x04j\x047\tW\tw\t\x97\t\xB2\t\xD2\t\xE7\t\x07\n\x08\n\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03(\n\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x038\nW\n\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03m\n\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03x\n\x8E\x03\x97\nj\x04j\x04j\x04j\x04\x8E\x03\x9B\nj\x04j\x04\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\xBB\n\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\xD0\nj\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04\xF0\n") }, unsafe { zerovec::ZeroVec::from_bytes_unchecked(b"\0\0\0\0\0\0\0\0\0\0\x02\x03\x03\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x12\0\x0C\0\0\0\0\x0B\0\0\0\0\x0F\0\r\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x0E\x0F\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\x11\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x13\n\0\0\x07\x13\0\0\0\0\0\0\n\0\x0E\0\0\n\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\0\n\n\0\0\n\n\n\n\x0F\n\0\0\0\0\0\0\n\x0E\n\n\n\0\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\0\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\n\n\n\n\0\n\x0E\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x0F\n\0\0\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\x04\x04\0\x04\x04\0\x04\0\0\0\0\0\0\0\0\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\0\0\0\0\t\t\t\t\n\x0E\0\0\0\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\x0F\x0F\0\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\x07\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\x10\x0F\0\n\n\x04\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\x04\x04\x04\x04\x04\x04\x04\x10\0\x04\x04\x04\x04\x04\x04\n\n\x04\x04\0\x04\x04\x04\x04\n\n\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\n\n\n\0\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\n\x04\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\0\0\x0F\0\n\0\0\x04\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\x04\x04\x04\n\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\0\x10\x10\0\0\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x10\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\0\n\n\n\n\n\n\n\n\0\0\n\n\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\0\n\0\0\0\n\n\n\n\0\0\x04\n\x04\x04\x04\x04\x04\0\0\x04\x04\0\0\x04\x04\x04\n\0\0\0\0\0\0\0\0\x04\0\0\0\0\n\n\0\n\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\n\n\0\0\0\0\0\0\0\0\0\0\n\0\x04\0\x04\x04\x04\0\n\n\n\n\n\n\0\0\0\0\n\n\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\0\n\n\0\n\n\0\n\n\0\0\x04\0\x04\x04\x04\0\0\0\0\x04\x04\0\0\x04\x04\x04\0\0\0\x04\0\0\0\0\0\0\0\n\n\n\n\0\n\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x04\x04\n\n\n\x04\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\0\n\n\n\n\n\n\n\n\n\0\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\0\n\n\0\n\n\n\n\n\0\0\x04\n\x04\x04\x04\x04\x04\x04\0\x04\x04\x04\0\x04\x04\x04\0\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\n\x04\x04\x04\x04\x04\x04\0\x04\x04\x04\0\n\n\n\n\n\n\n\n\0\0\n\n\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\0\n\n\0\n\n\n\n\n\0\0\x04\n\x04\x04\x04\x04\x04\0\0\x04\x04\0\0\x04\x04\x04\0\0\0\0\0\0\0\x04\x04\x04\0\0\0\0\n\n\0\n\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\n\0\n\n\n\n\n\n\0\0\0\n\n\n\0\n\n\n\n\0\0\0\n\n\0\n\0\n\n\0\0\0\n\n\0\0\0\n\n\n\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\x04\x04\x04\0\0\0\x04\x04\x04\0\x04\x04\x04\x04\0\0\n\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\0\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\x04\n\x04\x04\x04\x04\x04\0\x04\x04\x04\0\x04\x04\x04\x04\0\0\0\0\0\0\0\x04\x04\0\n\n\n\0\0\n\0\0\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\x04\x04\x04\0\n\n\n\n\n\n\n\n\0\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\0\0\x04\n\x04\x04\x04\x04\x04\0\x04\x04\x04\0\x04\x04\x04\x04\0\0\0\0\0\0\0\x04\x04\0\0\0\0\0\0\n\n\0\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\n\n\x04\0\0\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\n\n\n\n\n\n\n\n\n\0\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\n\x04\x04\x04\x04\x04\0\x04\x04\x04\0\x04\x04\x04\x04\n\0\0\0\0\0\n\n\n\x04\0\0\0\0\0\0\0\n\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\0\x04\x04\x04\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\0\n\0\0\n\n\n\n\n\n\n\0\0\0\x04\0\0\0\0\x04\x04\x04\x04\x04\x04\0\x04\0\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x14\x14\0\x14\0\x14\x14\x14\x14\x14\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\x14\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\0\x14\x14\x14\x14\x14\0\x14\0\x14\x14\x14\x14\x14\x14\x14\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\x14\x14\x14\x14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\x04\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\0\0\x04\0\x04\0\x04\0\0\0\0\x04\x04\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\x04\x04\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x14\x14\x14\x14\x14\x14\n\n\n\n\n\n\0\n\0\0\0\0\0\n\0\0\n\n\n\n\n\n\n\n\n\0\n\n\n\n\0\0\n\n\n\n\n\n\n\0\n\0\n\n\n\n\0\0\n\n\n\n\n\n\n\n\n\n\n\0\0\x04\x04\x04\n\n\n\n\n\n\0\0\n\n\n\n\n\n\0\0\x12\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\0\0\0\n\n\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\n\n\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\0\n\n\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\n\0\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\x14\x14\x14\x14\0\0\0\x14\0\0\0\0\x14\x14\0\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x07\x04\n\n\n\n\n\x04\x04\n\n\n\n\n\n\n\n\n\x04\n\0\0\0\0\0\n\n\n\n\n\n\0\0\0\0\0\0\0\0\0\0\x14\x14\x14\x14\x14\0\0\0\0\0\0\0\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x14\0\0\0\x14\x14\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\0\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\0\0\0\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\x04\n\n\x04\x04\x04\n\0\0\0\0\0\n\n\n\n\n\n\n\n\0\n\0\n\0\n\0\n\0\0\n\n\n\0\n\n\n\n\n\n\n\0\0\0\n\n\n\n\0\0\n\n\n\n\n\n\0\0\0\0\x12\x12\x12\x12\x12\x12\x12\0\x12\x12\x12\0\x04\x05\x07\x07\0\0\0\0\0\0\0\0\r\r\0\0\0\0\0\0\r\0\0\x0E\x03\x03\x07\x07\x07\x07\x07\x11\0\0\0\0\0\0\0\0\0\0\0\0\x13\0\0\x11\0\0\0\x0F\0\0\0\0\x13\0\0\0\0\0\0\x11\0\0\0\0\0\0\0\0\0\0\x12\x07\x07\x07\x07\x07\0\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\n\0\0\0\0\n\0\0\n\n\n\n\n\n\0\n\0\0\0\n\n\n\n\n\0\0\x13\0\n\0\n\0\n\0\n\n\n\n\0\n\n\n\n\n\n\n\n\n\x13\0\0\n\n\n\n\0\0\0\0\0\n\n\n\n\n\0\0\0\0\n\0\0\0\0\x13\x13\x13\x13\x13\x13\0\0\0\0\0\0\0\0\0\x13\x13\0\0\0\0\0\0\0\0\0\0\x13\x13\0\0\0\0\0\0\0\0\x13\0\0\0\0\0\0\0\0\0\x13\x13\x13\x13\x13\x13\x13\0\0\0\0\x13\x13\x13\0\0\0\0\0\n\n\x13\n\n\n\n\n\n\n\n\n\n\n\n\n\x13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x13\x13\x13\x13\0\x13\x13\x13\x13\x13\x13\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\0\0\0\0\0\0\0\0\0\x13\x13\x13\x13\x13\x13\0\0\x13\x13\x13\x13\x13\x13\x13\x13\0\x13\0\x13\0\0\0\0\0\0\x13\0\0\0\0\0\0\0\x13\x13\0\0\0\0\0\0\0\0\0\0\0\x13\0\0\x13\0\0\0\0\x13\0\x13\0\0\0\x13\x13\x13\0\x13\0\0\0\0\0\0\0\0\x13\x13\x13\x13\x13\0\0\0\0\0\0\0\0\x13\x13\x13\0\0\0\0\0\0\0\0\x13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x13\x13\0\0\0\0\x13\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\0\0\0\0\0\0\n\n\n\n\x04\x04\n\n\0\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\0\0\0\0\0\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\x14\x14\x14\x14\x14\x14\0\0\0\0\0\0\0\0\0\0\x12\0\0\0\0\x14\0\x14\0\0\0\0\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x04\x04\x04\x04\x04\x04\x13\x08\x08\x08\x08\x08\0\0\x14\x14\x14\x14\n\x13\0\0\x14\x14\x14\x14\x14\x14\x14\0\0\x04\x04\x08\x08\x14\x14\x14\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\0\x08\x08\x08\x08\0\0\0\0\0\0\0\x13\0\x13\0\0\0\0\0\0\x08\x08\x08\x08\x08\x08\x08\x08\0\0\0\0\0\0\0\0\x04\x04\x04\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\n\n\0\n\0\n\n\n\n\n\0\0\0\0\0\0\n\n\x04\n\n\n\x04\n\n\n\n\x04\n\n\n\n\x04\x04\x04\x04\x04\0\0\0\0\x04\0\0\0\n\n\n\n\0\0\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\x04\x04\n\n\n\n\n\n\0\0\0\n\0\n\n\x04\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x14\x14\x14\x14\x14\0\n\n\n\x04\n\n\n\n\n\n\n\n\x04\x04\0\0\n\n\n\x04\x04\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\0\0\n\n\n\n\n\n\0\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\0\x04\x04\0\0\n\n\n\n\n\n\n\0\0\0\0\n\n\n\n\n\0\0\0\0\0\t\x04\t\t\t\t\t\t\t\t\t\0\t\t\t\t\t\t\t\0\t\t\t\t\t\0\t\0\t\t\0\t\t\0\t\t\t\t\t\t\t\t\t\t\n\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\0\0\0\0\0\0\0\0\x0F\0\0\x0E\x0F\0\0\0\0\0\0\0\0\0\0\0\x11\x11\0\0\0\0\0\0\0\0\0\0\0\0\0\x11\x11\x11\x0F\0\r\0\x0F\x0E\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\x07\0\0\0\0\0\0\0\r\0\0\0\0\x0F\0\r\0\0\0\0\0\0\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x04\x04\0\0\n\n\n\n\n\n\0\0\n\n\n\0\0\0\0\0\0\0\0\0\x07\x07\x07\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\0\n\n\0\n\n\n\n\n\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\n\n\n\n\n\n\x04\x04\x04\x04\x04\0\0\0\0\0\n\n\n\n\0\0\0\0\n\n\n\n\n\n\n\n\0\n\n\0\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\0\n\n\0\0\0\n\0\n\n\n\n\n\n\n\n\n\0\0\0\0\0\n\n\n\n\n\n\0\0\n\0\n\n\n\n\n\n\0\n\n\0\0\0\n\0\0\n\n\n\0\n\n\0\0\0\0\0\0\0\0\0\0\n\x04\x04\x04\0\x04\x04\0\0\0\0\0\x04\x04\x04\x04\n\n\n\n\n\n\0\0\x04\x04\x04\0\0\0\0\x04\n\n\n\n\n\x04\x04\0\0\0\0\0\0\0\0\0\n\n\n\n\x04\x04\x04\x04\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\0\x04\x04\0\0\0\n\n\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\x04\n\n\x04\x04\n\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\x10\0\0\x04\0\0\0\0\0\0\0\0\0\0\x10\0\0\x04\x04\x04\x04\x04\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\n\x04\x04\n\0\0\0\0\0\0\0\0\n\n\n\x04\0\0\n\0\0\0\0\0\0\0\0\0\x04\n\n\n\n\0\0\0\0\x04\x04\x04\x04\0\x04\x04\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\n\0\n\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\x04\n\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\0\n\0\n\n\n\n\0\n\x04\x04\x04\x04\0\n\n\n\n\n\n\n\n\0\0\n\0\n\n\0\n\n\n\n\n\0\x04\x04\n\x04\x04\n\0\0\0\0\0\0\x04\0\0\0\0\0\n\n\n\x04\x04\0\0\x04\x04\x04\x04\x04\x04\x04\0\0\0\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\x04\n\x04\x04\x04\x04\n\n\0\n\0\0\0\0\0\0\0\0\x04\x04\x04\x04\x04\x04\0\0\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\n\n\n\n\x04\x04\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x14\x14\0\0\0\x14\x14\x14\x14\x14\x14\x14\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\0\0\n\0\0\n\n\n\n\x04\x04\x04\x04\x04\x04\0\x04\x04\0\0\x04\x04\x04\x04\n\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\0\0\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\0\0\x04\x04\x04\x04\x04\x04\n\0\n\x04\0\0\0\0\0\0\0\0\0\0\0\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\n\x04\x04\x04\x04\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\n\0\0\n\x04\x04\x04\x04\x04\x04\0\0\0\x04\0\x04\x04\0\x04\x04\x04\x04\x04\x04\n\x04\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\0\x04\x04\x04\x04\x04\n\0\0\0\0\0\0\0\n\n\n\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\x04\x04\n\x04\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\0\0\0\x04\x04\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x04\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\x04\n\n\x14\x14\x04\0\0\0\0\0\0\0\0\0\0\0\x08\x08\x08\x08\0\x08\x08\x08\x08\x08\x08\x08\0\x08\x08\0\x08\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x08\x08\x08\0\0\0\0\0\0\0\0\0\0\0\0\0\x14\0\0\0\0\0\0\0\0\0\0\0\0\0\x14\x14\x14\0\0\x08\0\0\0\0\0\0\0\0\0\0\x08\x08\x08\x08\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\0\0\0\x04\x04\0\x07\x07\x07\x07\0\0\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\x04\0\0\0\x04\x04\x04\x07\x07\x07\x07\x07\x07\x07\x07\x04\x04\x04\x04\x04\0\0\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\0\0\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\0\n\0\0\n\n\0\0\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\0\n\0\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\0\n\n\n\n\n\0\n\0\0\0\n\n\n\n\n\n\0\0\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\x04\x04\x04\x04\x04\0\x04\x04\0\x04\x04\x04\x04\x04\0\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\0\n\n\n\n\n\n\n\0\n\n\n\n\0\n\n\0\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\n\0\0\0\0\n\n\0\n\0\0\n\0\n\n\n\n\n\n\n\0\n\n\n\n\0\n\0\n\0\0\0\0\n\0\0\0\0\n\0\n\0\n\0\n\n\n\0\n\n\0\n\0\0\n\0\n\0\n\0\n\0\n\n\0\n\0\0\n\n\n\n\0\n\n\n\n\0\n\n\n\n\0\n\0\n\n\n\0\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\0\0\x13\x13\x13\x13\n\n\n\n\n\n\n\n\n\n\n\n\x13\x13\n\n\n\n\n\n\n\n\n\n\0\0\0\0\x13\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\0\0\0\0\x13\x13\x13\x13\x13\x13\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x14\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\0\0\0\0\0\0\0\0\0\x13\0\0\0\0\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x04\x04\x04\x04\x04\0\0\0\0\0\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\0\0\0\0\0\0\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\x13\x13\x13\x13\0\x07\0\0\0\0\0\0\0\0\0\0\0\0\0\0") }, 0u8), break_state_table: unsafe { zerovec::ZeroVec::from_bytes_unchecked(b"\xFD\xFD\xFD\xFD\0\x19\xFD\0\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x04\x04\xFD\x04\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x1B\x05\xFD\x1C\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x06\x06'\x06\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x07\x07\xFD\x07\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x08\x08\xFD\x08\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\t\t\xFD\t\xFD\xFF\xFF\x9A#! \xFD\xFF\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\n\x15\xFD\n\xFD\xFF\xFF\x1E\xFD\x1F\x1D\xFD\xFF\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x0B\x0B\xFD\x0B\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x0C\x0C\xFD\x0C\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\r\r\xFD\r\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x0E\x0E\xFD\x0E\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x0F\x0F\xFD\x0F\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x10\x10\xFD\x10\xFD\xFF\xFF$\xFD&\xFD%\xFF\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x11\x11\xFD\x11\xFF\xFF\xFF\xFD\xFD\xFD\xFD\xFD\xFF\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x16\x18\xFD\x17\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x13\x1A\xFD\x13\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFE\xFE\xFE\xFE\n\x15\xFE\n\xFE\xFF\xFF\x1E\xFE\x1F\x1D\xFE\xFF\xFF\xFD\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFD\xFD\xFD\xFD\xFD\x16\x18\xFD\x17\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x16\x18\xFD\x17\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x16\x18\xFD\x17\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFD\xFE\xFE\xFE\xFE\x13\xFE\xFE\x13\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFD\xFD\xFD\xFD\xFD\x1B\x05\xFD\x1C\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x1B\x05\xFD\x1C\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFE\xFE\xFE\xFE\x1D\x1D\xFE\x1D\xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\x1E\x1E\xFE\x1E\xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\x1F\x1F\xFE\x1F\xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE \xFE \xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE!!\xFE!\xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\"\"\xFE\"\xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFD\xFE\xFE\xFE\xFE##\xFE#\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE$\xFE\xFE$\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE%\xFE\xFE%\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE&\xFE\xFE&\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFD\xFD\xFD\xFD\xFD(\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD") }, word_type_table: unsafe { zerovec::ZeroVec::from_bytes_unchecked(b"\0\0\0\0\0\0\0\x02\x02\x02\0\0\0\0\0\x01\x02\0\0\x02\x02\x02\x02\x02\0\0\x01\x01\x01\x02\x02\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x02\x02\x02\0\0\0\x02\x02\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0") }, property_count: 43u8, last_codepoint_property: 20u8, sot_property: 41u8, eot_property: 42u8, complex_property: 20u8 }; + pub const SINGLETON_WORD_BREAK_DATA_V2_MARKER: &'static ::DataStruct = &icu::segmenter::provider::RuleBreakDataV2 { property_table: icu::collections::codepointtrie::CodePointTrie::from_parts(icu::collections::codepointtrie::CodePointTrieHeader { high_start: 918016u32, shifted12_high_start: 225u16, index3_null_offset: 1130u16, data_null_offset: 14u32, null_value: 0u32, trie_type: icu::collections::codepointtrie::TrieType::Small }, unsafe { zerovec::ZeroVec::from_bytes_unchecked(b"\0\0@\0{\0\xBB\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\x1B\x01[\x01k\x01\xAB\x01\xCE\x01\xF3\0\xF3\0\x0C\x02\xF3\0\x1C\x02M\x02\x84\x02\xC2\x02\x02\x037\x03\xF3\0h\x03\xA8\x03\xDD\x03\xF7\x037\x04w\x04\xB7\x04\xEF\x04%\x05a\x05\x9F\x05\xDE\x05\x1C\x06[\x06\x99\x06\xD8\x06\x16\x07V\x07\x94\x07\xD2\x07\x10\x08P\x08\x8E\x08\xCE\x08\x0C\tL\t\x8A\t\xCA\t\n\nI\n\x89\n\xC8\n\x08\x0BH\x0B\x88\x0B\xC3\x0B\0\x0C\x10\x0B*\x0B:\x0BP\x0Bp\x0B\x8E\x0B\xA6\x0B\xC5\x0B\xE5\x0B\xE5\x0B\xF2\x0B\x0F\x0C/\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0Ca\x0C\0\0\x10\0 \x000\0@\0P\0`\0p\0{\0\x8B\0\x9B\0\xAB\0\xBB\0\xCB\0\xDB\0\xEB\0\xF3\0\x03\x01\x13\x01#\x01\xF3\0\x03\x01\x13\x01#\x01\xF3\0\x03\x01\x13\x01#\x01\xF3\0\x03\x01\x13\x01#\x01\x1B\x01+\x01;\x01K\x01[\x01k\x01{\x01\x8B\x01k\x01{\x01\x8B\x01\x9B\x01\xAB\x01\xBB\x01\xCB\x01\xDB\x01\xCE\x01\xDE\x01\xEE\x01\xFE\x01\xF3\0\x03\x01\x13\x01#\x01\xF3\0\x03\x01\x13\x01#\x01\x0C\x02\x1C\x02,\x02<\x02\xF3\0\x03\x01\x13\x01#\x01\x1C\x02,\x02<\x02L\x02M\x02]\x02m\x02}\x02\x84\x02\x94\x02\xA4\x02\xB4\x02\xC2\x02\xD2\x02\xE2\x02\xF2\x02\x02\x03\x12\x03\"\x032\x037\x03G\x03W\x03g\x03\xF3\0\x03\x01\x13\x01#\x01h\x03x\x03\x88\x03\x98\x03\xA8\x03\xB8\x03\xC8\x03\xD8\x03\xDD\x03\xED\x03\xFD\x03\r\x04\xF7\x03\x07\x04\x17\x04'\x047\x04G\x04W\x04g\x04w\x04\x87\x04\x97\x04\xA7\x04\xB7\x04\xC7\x04\xD7\x04\xE7\x04\xEF\x04\xFF\x04\x0F\x05\x1F\x05%\x055\x05E\x05U\x05a\x05q\x05\x81\x05\x91\x05\x9F\x05\xAF\x05\xBF\x05\xCF\x05\xDE\x05\xEE\x05\xFE\x05\x0E\x06\x1C\x06,\x06<\x06L\x06[\x06k\x06{\x06\x8B\x06\x99\x06\xA9\x06\xB9\x06\xC9\x06\xD8\x06\xE8\x06\xF8\x06\x08\x07\x16\x07&\x076\x07F\x07V\x07f\x07v\x07\x86\x07\x94\x07\xA4\x07\xB4\x07\xC4\x07\xD2\x07\xE2\x07\xF2\x07\x02\x08\x10\x08 \x080\x08@\x08P\x08`\x08p\x08\x80\x08\x8E\x08\x9E\x08\xAE\x08\xBE\x08\xCE\x08\xDE\x08\xEE\x08\xFE\x08\x0C\t\x1C\t,\t<\tL\t\\\tl\t|\t\x8A\t\x9A\t\xAA\t\xBA\t\xCA\t\xDA\t\xEA\t\xFA\t\n\n\x1A\n*\n:\nI\nY\ni\ny\n\x89\n\x99\n\xA9\n\xB9\n\xC8\n\xD8\n\xE8\n\xF8\n\x08\x0B\x18\x0B(\x0B8\x0BH\x0BX\x0Bh\x0Bx\x0B\x88\x0B\x98\x0B\xA8\x0B\xB8\x0B\xC3\x0B\xD3\x0B\xE3\x0B\xF3\x0B\0\x0C\x10\x0C \x0C0\x0CJ\nJ\nJ\nJ\n<\x07J\nJ\nJ\nJ\n@\x0C\xF3\0\xF3\0P\x0C\xF3\0\xF3\0\xC7\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0`\x0Cp\x0C\xF3\0\xF3\0`\x0C\xF3\0\xF3\0h\x0Cx\x0C\xCB\0\xF3\0\xF3\0\xF3\0x\x0C\xF3\0\xF3\0\xF3\0\x80\x0C\x0E\0\x0E\0\xF3\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\x90\x0C@\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0W\x02\xF3\0\xA0\x0Cp\0\xF3\0\xF3\0\xF3\0\xF3\0\xD6\t\xA7\x0C\xF3\0\xB7\x0C\xF3\0\xC6\x0C\xF3\0\xD6\x0C\xC5\0\xE6\x0CJ\nJ\nJ\nJ\nJ\n\xF6\x0C<\x07\x0E\0\x04\r<\x07\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xA7\x0C\x14\r\xF3\0\x1B\r\xF3\0\xF3\0\xF3\0\xF3\0+\r\xF3\0L\0\xF4\x0B\xF4\x0B1\x04J\nv\n;\rJ\nJ\nx\nJ\nK\r[\r\x0E\0\x0E\0\xF3\0k\rJ\nJ\nJ\nu\nJ\n{\r<\x07<\x07v\n[\x01\xB3\x02\x0E\0\x0E\0\x0E\0\x11\x02\xF3\0\xF3\0W\x01\x8A\r<\x07E\x08\xA1\x04\x13\x02\xF3\0\x9A\r7\x04\xF3\0\xF3\0U\x01\xA1\x04\xF3\0\xF3\0W\x01\xAA\r\xBA\r7\x04\xF3\0M\0\xA7\x0C\xF3\0\xF3\0Y\x02\x0E\0\xD8\x0B\xCA\r\xD3\r\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0[\x01[\x01[\x01[\x01\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\x90\x0C\xF3\0\xF3\0\x90\x0C\xE3\r\xF3\0M\0\xF3\0\xF3\0\xF3\0\x02\x06\xF3\r\x03\x0EN\0\xF3\r\x13\x0E#\x0E/\x0E?\x0EN\x0EZ\x0Ej\x0Ez\x0E\x0E\0N\0\x0E\0\x0E\0\x0E\0[\x01[\x01\xA4\x04\x87\x0E\x93\x0E\xA1\x0E\xB0\x0E\xC0\x0E\x0E\0\xF3\0\xF3\0\xA7\x0C\xCF\x0E\xD9\x0E\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xE4\x0E\xF0\x0E\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF0\x0E\x0E\0\x0E\0\x0E\0\x95\0\x0E\0\xF9\x0E\x05\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\x003\x01\x15\x0F\xF3\0)\x01\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xE4\x0E\xF2\x0E%\x0F\x0E\0\x0E\0*\x0F:\x0F=\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FK\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0F[\x0Fh\x0Fm\x0Fz\x0F\x86\x0F\x95\x0F\xA2\x0F\x0E\0\x0E\0\xAD\x0F\xBC\x0F\xBD\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xDE\x0E\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xAD\x0F\xC1\x0F\x0E\0\x0E\0\x0E\0\xCD\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xDD\x0F\xEC\x0F\xF3\0\xF3\0P\x0C\xF3\0\xF3\0\xF3\0\xA8\x0CA\x08\xF3\0\xFC\x0F\0\x06\0\x06\0\x06\0\x06[\x01[\x01\x0E\0\x0E\0\xA8\x03\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0J\n\x0C\x10J\nJ\nJ\nJ\nJ\n$\x0BJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n\x17\x10\x0E\0\x0E\0'\x10\x0E\x006\x10F\x10I\nJ\nJ\nJ\nJ\nV\x10f\x10f\x10f\x10f\x10f\x10k\x10<\0\xF3\0\xF3\0@\0\xF3\0\xF3\0\xF3\0\xF3\0L\0\x0E\0\xF3\0\xF3\0\x0E\0\x0E\0\x0E\0f\x10\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0{\x10\x0E\0\x0E\0\x0E\0f\x10f\x10g\x10f\x10f\x10f\x10f\x10f\x10\x8B\x10\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0J\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0N\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0M\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0N\0\xF3\0B\x06\x0E\0\xF3\0\xF3\0L\x01\x9B\x10\xF3\0M\x01\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xA3\x04\xAF\x04\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0p\0\xAA\x10\x0E\0?\0\xBA\x10\xF3\0\xC7\x10\x0E\0\xF3\0\xF3\0\xF3\0\xD7\x10\x14\x02\xF3\0\xF3\0W\x01\xE7\x10<\x07[\x01\xF7\x107\x04\xF3\0\x07\x11\xF3\0T\x01\xA1\x04\xF3\0N\0\x12\x02\xF3\0\xF3\0X\x01\x14\x11<\x07J\n$\x11\xF3\0\xF3\0R\x01\x0E\x114\x11<\x07J\nJ\nJ\nJ\nJ\nJ\n%\x0B?\nP\x01B\x11Q\x11*\r\0\x06\xF3\0\xF3\0\xF3\0)\x01\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0a\x11<\x07\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xD7\x10\xF3\0q\x11\xF3\0\xF3\0O\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0J\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nv\nJ\nJ\nJ\nJ\nJ\nJ\nK\r\x0E\0\x0E\0\xFC\x0Fy\x11\x88\x11\x92\x11\xA2\x11\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xB2\x11\x0E\0>\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0M\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0?\0\xF3\0\xF3\0\xC2\x11\x0E\0\x0E\0O\0[\x01\xD2\x11[\x01\xDF\x11\xE4\x11\xF4\x11\x0E\0\xCD\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\x04\x12\x14\x120\0@\0P\0@\0p\0#\x12f\x10f\x10)\x12\xF3\0L\0P\x119\x12\x0E\0F\x12\xC6\0\xF3\0\xCB\0V\x12M\0M\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0p\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0e\x12\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0j\x12\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0N\0\xF3\0\xF3\0\xF3\0\xA7\x03\xA4\x04\x0E\0\xF3\0\xF3\0\xAA\x04\xF3\0p\0\xF3\0\xF3\0z\x12\xF3\0M\0\xF3\0\xF3\0\x8A\x12d\x12\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0M\0<\x07\xF3\0\xF3\0\x8A\x12\xF3\0O\0\xF3\0\xF3\0\xC2\x11\xF3\0\xF3\0\xF3\0\xD7\x10\xC7\0\xC7\0\x97\x12\xD0\0\xA5\x12\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xFC\x0F\xF3\0+\r\xC2\x11\x0E\0\xCC\0\xF3\0\xF3\0\xB5\x12\x0E\0\x0E\0\x0E\0\x0E\0\xC5\x12\xF3\0\xF3\0\xCF\x12\xF3\0+\r\xF3\0\xFC\x0F\xF3\0L\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xDE\x12\xF3\0+\r\xF3\0)\x01\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0+\x01\x0E\0\x0E\0\x0E\0\x0E\0\xEE\x12\xE2\x06\xF3\0\xFE\x12\x0E\0\x0E\0\xF3\0N\0\xF3\0N\0\x0E\0\x0E\0\xCA\0\xF3\0\x0E\x13\x0E\0\xF3\0\xF3\0\xF3\0+\r\xF3\0+\r\xF3\0g\x12\xF3\0\xB2\x11\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xA7\x0C\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0g\x12\xF3\0\xF3\0\xF3\0g\x12\xF3\0\xF3\0\x1E\x13<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0.\x13\xB2\x11\x0E\0\x0E\0\x0E\0C\x08\xF3\0N\0A\x0B\xF3\0U\x01\xA4\x04\x0E\0\xF3\0>\x13\x0E\0\x0E\0\xF3\0e\x12\x0E\0\xF3\0\xFC\x0F\x13\x02\xF3\0\xF3\0S\x01\x0E\x11\x0E\x001\x04N\x13\x13\x02\xF3\0\xF3\0]\x13k\x13\xF3\0\xA7\x0C<\x07\x13\x02\xF3\0T\x01{\x13\x8B\x13\xF3\0\xF3\0\x9B\x13\x13\x02\xF3\0\xF3\0X\x01\xAB\x13\xBB\x13\x0E\0\x0E\0\xF3\0\xD0\0O\x01\xCB\x13\xDA\x13\x0E\0\x0E\0\x0E\0\xEA\x13\xC4\0\xA7\x0C\xF3\0\xF3\0L\x01\xF5\x0B<\x07\xFA\x13\xEE\x05\xC9\0\t\x14\x94\x07\x19\x14'\x14\xA0\x04\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0V\x017\x14G\x14\xB2\x11\x0E\0\xF3\0\xF3\0\xF3\0[\x01W\x14<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0L\x01g\x14\xA4\x04w\x14\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0[\x01\x84\x14<\x07\x0E\0\x0E\0\xF3\0\xF3\0P\x01 \x04<\x07\x0E\0\x0E\0\x0E\0J\n\xFB\nx\n\x94\x14\xA3\x14\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0O\x01\xF5\x0B\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0<\x07\xA8\x03\xB3\x14\x96\x12\xF3\0\xC3\x14\xD1\x14<\x07\x0E\0\x0E\0\x0E\0\x0E\0\xE1\x14\xF3\0\xF3\0\xF0\x14\xFF\x14\x0E\0\x0F\x15\xF3\0\xF3\0\x1C\x15+\x15;\x15\xF3\0\xF3\0Q\x01K\x15\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xA7\x0C\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xC9\0\xF3\0L\x01\xD4\x0B\xA7\x03<\x07\x0E\0?\0\xF3\0\x93\x02\xD3\x0B\x0E\x11\x0E\0\x0E\0\x0E\0\x0E\0\x02\x07\xF3\0\xF3\0[\x15j\x15<\x07\x94\x12\xF3\0z\x15\x87\x15<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\x97\x15\xA7\x15\xD1\0\xF3\0\xB3\x15\xA2\x04<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xA7\x03\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0)\x01\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0L\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xD7\x10\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xA7\x03\xF3\0\xF3\0\xF3\0\xC3\x15\xD3\x15\xE7\x10\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xFC\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xA7\x0C\xF3\0L\0<\x07\xF3\0\xF3\0\xF3\0\xF3\0L\0<\x07\xF3\0M\0\xA0\x04\xF3\0\xF3\0\xF3\0\x0E\x11\xD7\x10<\x07>\0\xDA\x04\xF3\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\x01\x08Z\x01[\x01[\x01\xDB\x15\x13\x02\x0E\0\x0E\0\x0E\0\x0E\0\xEB\x15&\x0B\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xFB\x15\x0B\x16J\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n\x1B\x16)\x16\x0E\09\x16E\x16\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0p\0N\0\xA7\x0CU\x16e\x16\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0[\x01[\x01\xDA\x03[\x01\x0E\x11\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0p\x16}\x16\x8A\x16\x0E\0\x96\x16\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xA4\x16\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xCD\0\xF3\0\xF3\0\xF3\0\xC5\0\xB2\x16\xC0\x16\xCE\0\xF3\0\xF3\0\xF3\0c\x0C\x7F\x06\xF3\0\xCD\x16\xDD\x16\xD1\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xE7\x16\xF3\0\xD1\0\xC7\0\xF3\0\xC7\0\xF3\0\xCD\0\xF3\0\xCD\0L\0\xF3\0L\0\xF3\0\xC9\0\xF3\0\xC9\0\xF3\0\xF4\x16\x02\x17\x02\x17\x02\x17[\x01[\x01[\x01\x12\x17[\x01[\x01\xF3\x0B\"\x08#\x08E\x08\x94\x02\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0L\0&\r\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xD4\x0B\x1D\x17+\x17\xF3\0\xF3\0\xF3\0M\0\x0E\0A\x08\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0N\0;\x17K\x17\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0[\x17\x0E\0\xF3\0\xF3\0O\x01<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0O\x01<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0k\x17L\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0e\x12\x0E\x11\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0{\x17<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xCE\0\xF3\0\x8A\x17\x97\x17\xA5\x17\xB5\x17\xC3\x17\xCB\x17\xC8\0O\0\xDA\x17O\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0A\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0F(\x0F\x0E\0\x95\0\xF3\0)\x01\xF3\0\xE5\x17\xF3\x17\x03\x18\x12\x18(\x0FA\x0FA\x0FA\x0F\"\x18(\x188\x18H\x18\x95\0V\x18\xF9\x0EA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0Fb\x18A\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FC\x0Fr\x18A\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0F\x0E\0\x0E\0\x0E\0A\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0t\x18\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0s\x18A\x0FA\x0F)\x0F\x0E\0\x0E\0\x0E\0\x84\x18Q\x0F\x0E\0\x0E\0\x84\x18\x0E\0'\x0FA\x0FA\x0FA\x0FA\x0FA\x0F)\x0FA\x0FA\x0F\x8C\x18:\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0<\x07A\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FC\x0FJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n\x0E\0\x0E\0J\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nK\rJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nv\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n&\x0BJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n'\x0BJ\nJ\nJ\nJ\nJ\nv\n\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0J\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\ny\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x9C\x18\x0E\0[\x01[\x01[\x01[\x01[\x01[\x01\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01\x0E\0y\0\x8D\0\xAD\0\xCD\0\xED\0\r\x01-\x01M\x01m\x01\x89\x01\xA9\x01\xC3\x01\xE3\x01\x03\x02#\x02C\x02c\x02~\x02\x9E\x02\xBE\x02\xDA\x02\xEE\x02\x0E\x03.\x03N\x03n\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x92\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\xB2\x03\xB2\x03\xCA\x03\xEA\x03\n\x04*\x04\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03J\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04z\x04\x94\x04\xB2\x04\xD2\x04\xF2\x04\x12\x052\x05R\x05r\x05\x92\x05\xB2\x05\xCA\x05\xEA\x05\n\x06*\x06J\x06j\x06\x8A\x06\xAA\x06\xC5\x06\xB2\x03\xE5\x06\x05\x07j\x04j\x04j\x04j\x04\x1A\x07\xB2\x03\xB2\x03:\x07j\x04j\x04j\x04j\x04j\x04\xB2\x03Z\x07j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04\xB2\x03z\x07j\x04\x96\x07j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04\xB6\x07\xD6\x07j\x04j\x04j\x04j\x04j\x04\xF6\x07j\x04j\x04j\x04j\x04j\x04j\x04j\x04\x06\x08\x1B\x087\x08W\x08m\x08j\x04\x8D\x08j\x04\x9D\x08\xBD\x08\xD4\x08\xE7\x08\xF7\x08\x17\tj\x04j\x047\tW\tw\t\x97\t\xB2\t\xD2\t\xE7\t\x07\n\x08\n\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03(\n\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x038\nW\n\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03m\n\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03x\n\x8E\x03\x97\nj\x04j\x04j\x04j\x04\x8E\x03\x9B\nj\x04j\x04\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\xBB\n\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\xD0\nj\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04\xF0\n") }, unsafe { zerovec::ZeroVec::from_bytes_unchecked(b"\0\0\0\0\0\0\0\0\0\0\x02\x03\x03\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x12\0\x0C\0\0\0\0\x0B\0\0\0\0\x0F\0\r\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\x0F\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\x11\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x13\n\0\0\x07\x13\0\0\0\0\0\0\n\0\x0E\0\0\n\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\0\n\n\0\0\n\n\n\n\x0F\n\0\0\0\0\0\0\n\x0E\n\n\n\0\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\0\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\n\n\n\n\0\n\x0E\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x0F\n\0\0\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\x04\x04\0\x04\x04\0\x04\0\0\0\0\0\0\0\0\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\0\0\0\0\t\t\t\t\n\x0E\0\0\0\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\x0F\x0F\0\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\x07\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\x10\x0F\0\n\n\x04\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\x04\x04\x04\x04\x04\x04\x04\x10\0\x04\x04\x04\x04\x04\x04\n\n\x04\x04\0\x04\x04\x04\x04\n\n\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\n\n\n\0\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\n\x04\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\0\0\x0F\0\n\0\0\x04\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\x04\x04\x04\n\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\0\x10\x10\0\0\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x10\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\0\n\n\n\n\n\n\n\n\0\0\n\n\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\0\n\0\0\0\n\n\n\n\0\0\x04\n\x04\x04\x04\x04\x04\0\0\x04\x04\0\0\x04\x04\x04\n\0\0\0\0\0\0\0\0\x04\0\0\0\0\n\n\0\n\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\n\n\0\0\0\0\0\0\0\0\0\0\n\0\x04\0\x04\x04\x04\0\n\n\n\n\n\n\0\0\0\0\n\n\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\0\n\n\0\n\n\0\n\n\0\0\x04\0\x04\x04\x04\0\0\0\0\x04\x04\0\0\x04\x04\x04\0\0\0\x04\0\0\0\0\0\0\0\n\n\n\n\0\n\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x04\x04\n\n\n\x04\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\0\n\n\n\n\n\n\n\n\n\0\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\0\n\n\0\n\n\n\n\n\0\0\x04\n\x04\x04\x04\x04\x04\x04\0\x04\x04\x04\0\x04\x04\x04\0\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\n\x04\x04\x04\x04\x04\x04\0\x04\x04\x04\0\n\n\n\n\n\n\n\n\0\0\n\n\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\0\n\n\0\n\n\n\n\n\0\0\x04\n\x04\x04\x04\x04\x04\0\0\x04\x04\0\0\x04\x04\x04\0\0\0\0\0\0\0\x04\x04\x04\0\0\0\0\n\n\0\n\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\n\0\n\n\n\n\n\n\0\0\0\n\n\n\0\n\n\n\n\0\0\0\n\n\0\n\0\n\n\0\0\0\n\n\0\0\0\n\n\n\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\x04\x04\x04\0\0\0\x04\x04\x04\0\x04\x04\x04\x04\0\0\n\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\0\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\x04\n\x04\x04\x04\x04\x04\0\x04\x04\x04\0\x04\x04\x04\x04\0\0\0\0\0\0\0\x04\x04\0\n\n\n\0\0\n\0\0\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\x04\x04\x04\0\n\n\n\n\n\n\n\n\0\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\0\0\x04\n\x04\x04\x04\x04\x04\0\x04\x04\x04\0\x04\x04\x04\x04\0\0\0\0\0\0\0\x04\x04\0\0\0\0\0\0\n\n\0\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\n\n\x04\0\0\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\n\n\n\n\n\n\n\n\n\0\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\n\x04\x04\x04\x04\x04\0\x04\x04\x04\0\x04\x04\x04\x04\n\0\0\0\0\0\n\n\n\x04\0\0\0\0\0\0\0\n\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\0\x04\x04\x04\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\0\n\0\0\n\n\n\n\n\n\n\0\0\0\x04\0\0\0\0\x04\x04\x04\x04\x04\x04\0\x04\0\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x14\x14\0\x14\0\x14\x14\x14\x14\x14\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\x14\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\0\x14\x14\x14\x14\x14\0\x14\0\x14\x14\x14\x14\x14\x14\x14\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\x14\x14\x14\x14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\x04\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\0\0\x04\0\x04\0\x04\0\0\0\0\x04\x04\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\x04\x04\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x14\x14\x14\x14\x14\x14\n\n\n\n\n\n\0\n\0\0\0\0\0\n\0\0\n\n\n\n\n\n\n\n\n\0\n\n\n\n\0\0\n\n\n\n\n\n\n\0\n\0\n\n\n\n\0\0\n\n\n\n\n\n\n\n\n\n\n\0\0\x04\x04\x04\n\n\n\n\n\n\0\0\n\n\n\n\n\n\0\0\x12\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\0\0\0\n\n\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\n\n\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\0\n\n\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\n\0\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\x14\x14\x14\x14\0\0\0\x14\0\0\0\0\x14\x14\0\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x07\x04\n\n\n\n\n\x04\x04\n\n\n\n\n\n\n\n\n\x04\n\0\0\0\0\0\n\n\n\n\n\n\0\0\0\0\0\0\0\0\0\0\x14\x14\x14\x14\x14\0\0\0\0\0\0\0\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x14\0\0\0\x14\x14\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\0\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\0\0\0\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\x04\n\n\x04\x04\x04\n\0\0\0\0\0\n\n\n\n\n\n\n\n\0\n\0\n\0\n\0\n\0\0\n\n\n\0\n\n\n\n\n\n\n\0\0\0\n\n\n\n\0\0\n\n\n\n\n\n\0\0\0\0\x12\x12\x12\x12\x12\x12\x12\0\x12\x12\x12\0\x04\x05\x07\x07\0\0\0\0\0\0\0\0\r\r\0\0\0\0\0\0\r\0\0\x0E\x03\x03\x07\x07\x07\x07\x07\x11\0\0\0\0\0\0\0\0\0\0\0\0\x13\0\0\x11\0\0\0\x0F\0\0\0\0\x13\0\0\0\0\0\0\x11\0\0\0\0\0\0\0\0\0\0\x12\x07\x07\x07\x07\x07\0\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\n\0\0\0\0\n\0\0\n\n\n\n\n\n\0\n\0\0\0\n\n\n\n\n\0\0\x13\0\n\0\n\0\n\0\n\n\n\n\0\n\n\n\n\n\n\n\n\n\x13\0\0\n\n\n\n\0\0\0\0\0\n\n\n\n\n\0\0\0\0\n\0\0\0\0\x13\x13\x13\x13\x13\x13\0\0\0\0\0\0\0\0\0\x13\x13\0\0\0\0\0\0\0\0\0\0\x13\x13\0\0\0\0\0\0\0\0\x13\0\0\0\0\0\0\0\0\0\x13\x13\x13\x13\x13\x13\x13\0\0\0\0\x13\x13\x13\0\0\0\0\0\n\n\x13\n\n\n\n\n\n\n\n\n\n\n\n\n\x13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x13\x13\x13\x13\0\x13\x13\x13\x13\x13\x13\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\0\0\0\0\0\0\0\0\0\x13\x13\x13\x13\x13\x13\0\0\x13\x13\x13\x13\x13\x13\x13\x13\0\x13\0\x13\0\0\0\0\0\0\x13\0\0\0\0\0\0\0\x13\x13\0\0\0\0\0\0\0\0\0\0\0\x13\0\0\x13\0\0\0\0\x13\0\x13\0\0\0\x13\x13\x13\0\x13\0\0\0\0\0\0\0\0\x13\x13\x13\x13\x13\0\0\0\0\0\0\0\0\x13\x13\x13\0\0\0\0\0\0\0\0\x13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x13\x13\0\0\0\0\x13\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\0\0\0\0\0\0\n\n\n\n\x04\x04\n\n\0\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\0\0\0\0\0\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\x14\x14\x14\x14\x14\x14\0\0\0\0\0\0\0\0\0\0\x12\0\0\0\0\x14\0\x14\0\0\0\0\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x04\x04\x04\x04\x04\x04\x13\x08\x08\x08\x08\x08\0\0\x14\x14\x14\x14\n\x13\0\0\x14\x14\x14\x14\x14\x14\x14\0\0\x04\x04\x08\x08\x14\x14\x14\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\0\x08\x08\x08\x08\0\0\0\0\0\0\0\x13\0\x13\0\0\0\0\0\0\x08\x08\x08\x08\x08\x08\x08\x08\0\0\0\0\0\0\0\0\x04\x04\x04\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\n\n\0\n\0\n\n\n\n\n\0\0\0\0\0\0\n\n\x04\n\n\n\x04\n\n\n\n\x04\n\n\n\n\x04\x04\x04\x04\x04\0\0\0\0\x04\0\0\0\n\n\n\n\0\0\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\x04\x04\n\n\n\n\n\n\0\0\0\n\0\n\n\x04\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x14\x14\x14\x14\x14\0\n\n\n\x04\n\n\n\n\n\n\n\n\x04\x04\0\0\n\n\n\x04\x04\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\0\0\n\n\n\n\n\n\0\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\0\x04\x04\0\0\n\n\n\n\n\n\n\0\0\0\0\n\n\n\n\n\0\0\0\0\0\t\x04\t\t\t\t\t\t\t\t\t\0\t\t\t\t\t\t\t\0\t\t\t\t\t\0\t\0\t\t\0\t\t\0\t\t\t\t\t\t\t\t\t\t\n\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\0\0\0\0\0\0\0\0\x0F\0\0\x0E\x0F\0\0\0\0\0\0\0\0\0\0\0\x11\x11\0\0\0\0\0\0\0\0\0\0\0\0\0\x11\x11\x11\x0F\0\r\0\x0F\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\x07\0\0\0\0\0\0\0\r\0\0\0\0\x0F\0\r\0\0\0\0\0\0\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x04\x04\0\0\n\n\n\n\n\n\0\0\n\n\n\0\0\0\0\0\0\0\0\0\x07\x07\x07\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\0\n\n\0\n\n\n\n\n\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\n\n\n\n\n\n\x04\x04\x04\x04\x04\0\0\0\0\0\n\n\n\n\0\0\0\0\n\n\n\n\n\n\n\n\0\n\n\0\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\0\n\n\0\0\0\n\0\n\n\n\n\n\n\n\n\n\0\0\0\0\0\n\n\n\n\n\n\0\0\n\0\n\n\n\n\n\n\0\n\n\0\0\0\n\0\0\n\n\n\0\n\n\0\0\0\0\0\0\0\0\0\0\n\x04\x04\x04\0\x04\x04\0\0\0\0\0\x04\x04\x04\x04\n\n\n\n\n\n\0\0\x04\x04\x04\0\0\0\0\x04\n\n\n\n\n\x04\x04\0\0\0\0\0\0\0\0\0\n\n\n\n\x04\x04\x04\x04\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\0\x04\x04\0\0\0\n\n\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\x04\n\n\x04\x04\n\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\x10\0\0\x04\0\0\0\0\0\0\0\0\0\0\x10\0\0\x04\x04\x04\x04\x04\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\n\x04\x04\n\0\0\0\0\0\0\0\0\n\n\n\x04\0\0\n\0\0\0\0\0\0\0\0\0\x04\n\n\n\n\0\0\0\0\x04\x04\x04\x04\0\x04\x04\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\n\0\n\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\x04\n\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\0\n\0\n\n\n\n\0\n\x04\x04\x04\x04\0\n\n\n\n\n\n\n\n\0\0\n\0\n\n\0\n\n\n\n\n\0\x04\x04\n\x04\x04\n\0\0\0\0\0\0\x04\0\0\0\0\0\n\n\n\x04\x04\0\0\x04\x04\x04\x04\x04\x04\x04\0\0\0\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\x04\n\x04\x04\x04\x04\n\n\0\n\0\0\0\0\0\0\0\0\x04\x04\x04\x04\x04\x04\0\0\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\n\n\n\n\x04\x04\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x14\x14\0\0\0\x14\x14\x14\x14\x14\x14\x14\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\0\0\n\0\0\n\n\n\n\x04\x04\x04\x04\x04\x04\0\x04\x04\0\0\x04\x04\x04\x04\n\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\0\0\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\0\0\x04\x04\x04\x04\x04\x04\n\0\n\x04\0\0\0\0\0\0\0\0\0\0\0\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\n\x04\x04\x04\x04\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\n\0\0\n\x04\x04\x04\x04\x04\x04\0\0\0\x04\0\x04\x04\0\x04\x04\x04\x04\x04\x04\n\x04\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\0\x04\x04\x04\x04\x04\n\0\0\0\0\0\0\0\n\n\n\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\x04\x04\n\x04\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\0\0\0\x04\x04\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x04\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\x04\n\n\x14\x14\x04\0\0\0\0\0\0\0\0\0\0\0\x08\x08\x08\x08\0\x08\x08\x08\x08\x08\x08\x08\0\x08\x08\0\x08\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x08\x08\x08\0\0\0\0\0\0\0\0\0\0\0\0\0\x14\0\0\0\0\0\0\0\0\0\0\0\0\0\x14\x14\x14\0\0\x08\0\0\0\0\0\0\0\0\0\0\x08\x08\x08\x08\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\0\0\0\x04\x04\0\x07\x07\x07\x07\0\0\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\x04\0\0\0\x04\x04\x04\x07\x07\x07\x07\x07\x07\x07\x07\x04\x04\x04\x04\x04\0\0\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\0\0\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\0\n\0\0\n\n\0\0\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\0\n\0\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\0\n\n\n\n\n\0\n\0\0\0\n\n\n\n\n\n\0\0\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\x04\x04\x04\x04\x04\0\x04\x04\0\x04\x04\x04\x04\x04\0\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\0\n\n\n\n\n\n\n\0\n\n\n\n\0\n\n\0\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\n\0\0\0\0\n\n\0\n\0\0\n\0\n\n\n\n\n\n\n\0\n\n\n\n\0\n\0\n\0\0\0\0\n\0\0\0\0\n\0\n\0\n\0\n\n\n\0\n\n\0\n\0\0\n\0\n\0\n\0\n\0\n\n\0\n\0\0\n\n\n\n\0\n\n\n\n\0\n\n\n\n\0\n\0\n\n\n\0\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\0\0\x13\x13\x13\x13\n\n\n\n\n\n\n\n\n\n\n\n\x13\x13\n\n\n\n\n\n\n\n\n\n\0\0\0\0\x13\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\0\0\0\0\x13\x13\x13\x13\x13\x13\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x14\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\0\0\0\0\0\0\0\0\0\x13\0\0\0\0\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x04\x04\x04\x04\x04\0\0\0\0\0\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\0\0\0\0\0\0\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\x13\x13\x13\x13\0\x07\0\0\0\0\0\0\0\0\0\0\0\0\0\0") }, 0u8), break_state_table: unsafe { zerovec::ZeroVec::from_bytes_unchecked(b"\xFD\xFD\xFD\xFD\0\x19\xFD\0\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x04\x04\xFD\x04\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x1B\x05\xFD\x1C\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x06\x06'\x06\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x07\x07\xFD\x07\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x08\x08\xFD\x08\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\t\t\xFD\t\xFD\xFF\xFF\x9A#! \xFD\xFF\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\n\x15\xFD\n\xFD\xFF\xFF\x1E\xFD\x1F\x1D\xFD\xFF\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x0B\x0B\xFD\x0B\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x0C\x0C\xFD\x0C\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\r\r\xFD\r\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x0E\x0E\xFD\x0E\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x0F\x0F\xFD\x0F\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x10\x10\xFD\x10\xFD\xFF\xFF$\xFD&\xFD%\xFF\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x11\x11\xFD\x11\xFF\xFF\xFF\xFD\xFD\xFD\xFD\xFD\xFF\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x16\x18\xFD\x17\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x13\x1A\xFD\x13\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFE\xFE\xFE\xFE\n\x15\xFE\n\xFE\xFF\xFF\x1E\xFE\x1F\x1D\xFE\xFF\xFF\xFD\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFD\xFD\xFD\xFD\xFD\x16\x18\xFD\x17\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x16\x18\xFD\x17\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x16\x18\xFD\x17\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFD\xFE\xFE\xFE\xFE\x13\xFE\xFE\x13\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFD\xFD\xFD\xFD\xFD\x1B\x05\xFD\x1C\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x1B\x05\xFD\x1C\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFE\xFE\xFE\xFE\x1D\x1D\xFE\x1D\xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\x1E\x1E\xFE\x1E\xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\x1F\x1F\xFE\x1F\xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE \xFE \xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE!!\xFE!\xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\"\"\xFE\"\xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFD\xFE\xFE\xFE\xFE##\xFE#\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE$\xFE\xFE$\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE%\xFE\xFE%\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE&\xFE\xFE&\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFD\xFD\xFD\xFD\xFD(\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD") }, word_type_table: unsafe { zerovec::ZeroVec::from_bytes_unchecked(b"\0\0\0\0\0\0\0\x02\x02\x02\0\0\0\0\0\x01\x02\0\0\x02\x02\x02\x02\x02\0\0\x01\x01\x01\x02\x02\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x02\x02\x02\0\0\0\x02\x02\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0") }, property_count: 43u8, last_codepoint_property: 20u8, sot_property: 41u8, eot_property: 42u8, complex_property: 20u8 }; } #[clippy::msrv = "1.71.1"] impl icu_provider::DataProvider for $provider { diff --git a/provider/data/segmenter/fingerprints.csv b/provider/data/segmenter/fingerprints.csv index 7c9d986e15b..afa77db595f 100644 --- a/provider/data/segmenter/fingerprints.csv +++ b/provider/data/segmenter/fingerprints.csv @@ -15,5 +15,12 @@ segmenter/lstm/wl_auto@1, und/Burmese_codepoints_exclusive_model4_heavy, 91369B, segmenter/lstm/wl_auto@1, und/Khmer_codepoints_exclusive_model4_heavy, 74669B, 74372B, b25f5219c4b970f2 segmenter/lstm/wl_auto@1, und/Lao_codepoints_exclusive_model4_heavy, 72164B, 71867B, 7e0c3ea7801791bd segmenter/lstm/wl_auto@1, und/Thai_codepoints_exclusive_model4_heavy, 72331B, 72034B, c46e2e0c098c1fc1 +segmenter/sentence/override@1, , 35B, 1 identifiers +segmenter/sentence/override@1, , 332B, 273B, 1 unique payloads +segmenter/sentence/override@1, el, 332B, 273B, 745d858a06d47385 segmenter/sentence@2, , 14528B, 14422B, da95c51c93946d95 -segmenter/word@2, , 14768B, 14663B, 7cb863d0724b4119 +segmenter/word/override@1, , 40B, 2 identifiers +segmenter/word/override@1, , 556B, 496B, 1 unique payloads +segmenter/word/override@1, fi, 556B, 496B, e523305ca615559e +segmenter/word/override@1, sv, -> fi +segmenter/word@2, , 14768B, 14663B, ca0e9def272a3e47 diff --git a/provider/data/segmenter/stubdata/mod.rs b/provider/data/segmenter/stubdata/mod.rs index 975dc52e079..e8b9fbe0e96 100644 --- a/provider/data/segmenter/stubdata/mod.rs +++ b/provider/data/segmenter/stubdata/mod.rs @@ -4,7 +4,9 @@ include!("dictionary_for_word_line_extended_v1_marker.rs.data"); include!("grapheme_cluster_break_data_v2_marker.rs.data"); include!("line_break_data_v2_marker.rs.data"); include!("lstm_for_word_line_auto_v1_marker.rs.data"); +include!("sentence_break_data_override_v1_marker.rs.data"); include!("sentence_break_data_v2_marker.rs.data"); +include!("word_break_data_override_v1_marker.rs.data"); include!("word_break_data_v2_marker.rs.data"); /// Marks a type as a data provider. You can then use macros like /// `impl_core_helloworld_v1` to add implementations. @@ -40,7 +42,9 @@ macro_rules! impl_data_provider { impl_grapheme_cluster_break_data_v2_marker!($provider); impl_line_break_data_v2_marker!($provider); impl_lstm_for_word_line_auto_v1_marker!($provider); + impl_sentence_break_data_override_v1_marker!($provider); impl_sentence_break_data_v2_marker!($provider); + impl_word_break_data_override_v1_marker!($provider); impl_word_break_data_v2_marker!($provider); }; } @@ -56,7 +60,9 @@ macro_rules! impl_any_provider { h if h == ::INFO.path.hashed() => icu_provider::DataProvider::::load(self, req).map(icu_provider::DataResponse::wrap_into_any_response), h if h == ::INFO.path.hashed() => icu_provider::DataProvider::::load(self, req).map(icu_provider::DataResponse::wrap_into_any_response), h if h == ::INFO.path.hashed() => icu_provider::DataProvider::::load(self, req).map(icu_provider::DataResponse::wrap_into_any_response), + h if h == ::INFO.path.hashed() => icu_provider::DataProvider::::load(self, req).map(icu_provider::DataResponse::wrap_into_any_response), h if h == ::INFO.path.hashed() => icu_provider::DataProvider::::load(self, req).map(icu_provider::DataResponse::wrap_into_any_response), + h if h == ::INFO.path.hashed() => icu_provider::DataProvider::::load(self, req).map(icu_provider::DataResponse::wrap_into_any_response), h if h == ::INFO.path.hashed() => icu_provider::DataProvider::::load(self, req).map(icu_provider::DataResponse::wrap_into_any_response), _ => Err(icu_provider::DataErrorKind::MarkerNotFound.with_req(marker, req)), } diff --git a/provider/data/segmenter/stubdata/sentence_break_data_override_v1_marker.rs.data b/provider/data/segmenter/stubdata/sentence_break_data_override_v1_marker.rs.data new file mode 100644 index 00000000000..f4ca874490f --- /dev/null +++ b/provider/data/segmenter/stubdata/sentence_break_data_override_v1_marker.rs.data @@ -0,0 +1,53 @@ +// @generated +/// Implement `DataProvider` on the given struct using the data +/// hardcoded in this file. This allows the struct to be used with +/// `icu`'s `_unstable` constructors. +#[doc(hidden)] +#[macro_export] +macro_rules! __impl_sentence_break_data_override_v1_marker { + ($ provider : ty) => { + #[clippy::msrv = "1.70"] + const _: () = <$provider>::MUST_USE_MAKE_PROVIDER_MACRO; + #[clippy::msrv = "1.70"] + impl icu_provider::DataProvider for $provider { + fn load(&self, req: icu_provider::DataRequest) -> Result, icu_provider::DataError> { + Err(icu_provider::DataErrorKind::IdentifierNotFound.with_req(::INFO, req)) + } + } + }; + ($ provider : ty , DRY) => { + __impl_sentence_break_data_override_v1_marker!($provider); + #[clippy::msrv = "1.70"] + impl icu_provider::DryDataProvider for $provider { + fn dry_load(&self, req: icu_provider::DataRequest) -> Result { + Err(icu_provider::DataErrorKind::IdentifierNotFound.with_req(::INFO, req)) + } + } + }; + ($ provider : ty , ITER) => { + __impl_sentence_break_data_override_v1_marker!($provider); + #[clippy::msrv = "1.70"] + impl icu_provider::IterableDataProvider for $provider { + fn iter_ids(&self) -> Result>, icu_provider::DataError> { + Ok(Default::default()) + } + } + }; + ($ provider : ty , DRY , ITER) => { + __impl_sentence_break_data_override_v1_marker!($provider); + #[clippy::msrv = "1.70"] + impl icu_provider::DryDataProvider for $provider { + fn dry_load(&self, req: icu_provider::DataRequest) -> Result { + Err(icu_provider::DataErrorKind::IdentifierNotFound.with_req(::INFO, req)) + } + } + #[clippy::msrv = "1.70"] + impl icu_provider::IterableDataProvider for $provider { + fn iter_ids(&self) -> Result>, icu_provider::DataError> { + Ok(Default::default()) + } + } + }; +} +#[doc(inline)] +pub use __impl_sentence_break_data_override_v1_marker as impl_sentence_break_data_override_v1_marker; diff --git a/provider/data/segmenter/stubdata/word_break_data_override_v1_marker.rs.data b/provider/data/segmenter/stubdata/word_break_data_override_v1_marker.rs.data new file mode 100644 index 00000000000..cab16837d34 --- /dev/null +++ b/provider/data/segmenter/stubdata/word_break_data_override_v1_marker.rs.data @@ -0,0 +1,53 @@ +// @generated +/// Implement `DataProvider` on the given struct using the data +/// hardcoded in this file. This allows the struct to be used with +/// `icu`'s `_unstable` constructors. +#[doc(hidden)] +#[macro_export] +macro_rules! __impl_word_break_data_override_v1_marker { + ($ provider : ty) => { + #[clippy::msrv = "1.70"] + const _: () = <$provider>::MUST_USE_MAKE_PROVIDER_MACRO; + #[clippy::msrv = "1.70"] + impl icu_provider::DataProvider for $provider { + fn load(&self, req: icu_provider::DataRequest) -> Result, icu_provider::DataError> { + Err(icu_provider::DataErrorKind::IdentifierNotFound.with_req(::INFO, req)) + } + } + }; + ($ provider : ty , DRY) => { + __impl_word_break_data_override_v1_marker!($provider); + #[clippy::msrv = "1.70"] + impl icu_provider::DryDataProvider for $provider { + fn dry_load(&self, req: icu_provider::DataRequest) -> Result { + Err(icu_provider::DataErrorKind::IdentifierNotFound.with_req(::INFO, req)) + } + } + }; + ($ provider : ty , ITER) => { + __impl_word_break_data_override_v1_marker!($provider); + #[clippy::msrv = "1.70"] + impl icu_provider::IterableDataProvider for $provider { + fn iter_ids(&self) -> Result>, icu_provider::DataError> { + Ok(Default::default()) + } + } + }; + ($ provider : ty , DRY , ITER) => { + __impl_word_break_data_override_v1_marker!($provider); + #[clippy::msrv = "1.70"] + impl icu_provider::DryDataProvider for $provider { + fn dry_load(&self, req: icu_provider::DataRequest) -> Result { + Err(icu_provider::DataErrorKind::IdentifierNotFound.with_req(::INFO, req)) + } + } + #[clippy::msrv = "1.70"] + impl icu_provider::IterableDataProvider for $provider { + fn iter_ids(&self) -> Result>, icu_provider::DataError> { + Ok(Default::default()) + } + } + }; +} +#[doc(inline)] +pub use __impl_word_break_data_override_v1_marker as impl_word_break_data_override_v1_marker; diff --git a/provider/data/segmenter/stubdata/word_break_data_v2_marker.rs.data b/provider/data/segmenter/stubdata/word_break_data_v2_marker.rs.data index eb8baf28d14..f1fa234863e 100644 --- a/provider/data/segmenter/stubdata/word_break_data_v2_marker.rs.data +++ b/provider/data/segmenter/stubdata/word_break_data_v2_marker.rs.data @@ -16,7 +16,7 @@ macro_rules! __impl_word_break_data_v2_marker { #[clippy::msrv = "1.71.1"] impl $provider { #[doc(hidden)] - pub const SINGLETON_WORD_BREAK_DATA_V2_MARKER: &'static ::DataStruct = &icu::segmenter::provider::RuleBreakDataV2 { property_table: icu::collections::codepointtrie::CodePointTrie::from_parts(icu::collections::codepointtrie::CodePointTrieHeader { high_start: 918016u32, shifted12_high_start: 225u16, index3_null_offset: 1130u16, data_null_offset: 14u32, null_value: 0u32, trie_type: icu::collections::codepointtrie::TrieType::Small }, unsafe { zerovec::ZeroVec::from_bytes_unchecked(b"\0\0@\0{\0\xBB\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\x1B\x01[\x01k\x01\xAB\x01\xCE\x01\xF3\0\xF3\0\x0C\x02\xF3\0\x1C\x02M\x02\x84\x02\xC2\x02\x02\x037\x03\xF3\0h\x03\xA8\x03\xDD\x03\xF7\x037\x04w\x04\xB7\x04\xEF\x04%\x05a\x05\x9F\x05\xDE\x05\x1C\x06[\x06\x99\x06\xD8\x06\x16\x07V\x07\x94\x07\xD2\x07\x10\x08P\x08\x8E\x08\xCE\x08\x0C\tL\t\x8A\t\xCA\t\n\nI\n\x89\n\xC8\n\x08\x0BH\x0B\x88\x0B\xC3\x0B\0\x0C\x10\x0B*\x0B:\x0BP\x0Bp\x0B\x8E\x0B\xA6\x0B\xC5\x0B\xE5\x0B\xE5\x0B\xF2\x0B\x0F\x0C/\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0Ca\x0C\0\0\x10\0 \x000\0@\0P\0`\0p\0{\0\x8B\0\x9B\0\xAB\0\xBB\0\xCB\0\xDB\0\xEB\0\xF3\0\x03\x01\x13\x01#\x01\xF3\0\x03\x01\x13\x01#\x01\xF3\0\x03\x01\x13\x01#\x01\xF3\0\x03\x01\x13\x01#\x01\x1B\x01+\x01;\x01K\x01[\x01k\x01{\x01\x8B\x01k\x01{\x01\x8B\x01\x9B\x01\xAB\x01\xBB\x01\xCB\x01\xDB\x01\xCE\x01\xDE\x01\xEE\x01\xFE\x01\xF3\0\x03\x01\x13\x01#\x01\xF3\0\x03\x01\x13\x01#\x01\x0C\x02\x1C\x02,\x02<\x02\xF3\0\x03\x01\x13\x01#\x01\x1C\x02,\x02<\x02L\x02M\x02]\x02m\x02}\x02\x84\x02\x94\x02\xA4\x02\xB4\x02\xC2\x02\xD2\x02\xE2\x02\xF2\x02\x02\x03\x12\x03\"\x032\x037\x03G\x03W\x03g\x03\xF3\0\x03\x01\x13\x01#\x01h\x03x\x03\x88\x03\x98\x03\xA8\x03\xB8\x03\xC8\x03\xD8\x03\xDD\x03\xED\x03\xFD\x03\r\x04\xF7\x03\x07\x04\x17\x04'\x047\x04G\x04W\x04g\x04w\x04\x87\x04\x97\x04\xA7\x04\xB7\x04\xC7\x04\xD7\x04\xE7\x04\xEF\x04\xFF\x04\x0F\x05\x1F\x05%\x055\x05E\x05U\x05a\x05q\x05\x81\x05\x91\x05\x9F\x05\xAF\x05\xBF\x05\xCF\x05\xDE\x05\xEE\x05\xFE\x05\x0E\x06\x1C\x06,\x06<\x06L\x06[\x06k\x06{\x06\x8B\x06\x99\x06\xA9\x06\xB9\x06\xC9\x06\xD8\x06\xE8\x06\xF8\x06\x08\x07\x16\x07&\x076\x07F\x07V\x07f\x07v\x07\x86\x07\x94\x07\xA4\x07\xB4\x07\xC4\x07\xD2\x07\xE2\x07\xF2\x07\x02\x08\x10\x08 \x080\x08@\x08P\x08`\x08p\x08\x80\x08\x8E\x08\x9E\x08\xAE\x08\xBE\x08\xCE\x08\xDE\x08\xEE\x08\xFE\x08\x0C\t\x1C\t,\t<\tL\t\\\tl\t|\t\x8A\t\x9A\t\xAA\t\xBA\t\xCA\t\xDA\t\xEA\t\xFA\t\n\n\x1A\n*\n:\nI\nY\ni\ny\n\x89\n\x99\n\xA9\n\xB9\n\xC8\n\xD8\n\xE8\n\xF8\n\x08\x0B\x18\x0B(\x0B8\x0BH\x0BX\x0Bh\x0Bx\x0B\x88\x0B\x98\x0B\xA8\x0B\xB8\x0B\xC3\x0B\xD3\x0B\xE3\x0B\xF3\x0B\0\x0C\x10\x0C \x0C0\x0CJ\nJ\nJ\nJ\n<\x07J\nJ\nJ\nJ\n@\x0C\xF3\0\xF3\0P\x0C\xF3\0\xF3\0\xC7\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0`\x0Cp\x0C\xF3\0\xF3\0`\x0C\xF3\0\xF3\0h\x0Cx\x0C\xCB\0\xF3\0\xF3\0\xF3\0x\x0C\xF3\0\xF3\0\xF3\0\x80\x0C\x0E\0\x0E\0\xF3\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\x90\x0C@\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0W\x02\xF3\0\xA0\x0Cp\0\xF3\0\xF3\0\xF3\0\xF3\0\xD6\t\xA7\x0C\xF3\0\xB7\x0C\xF3\0\xC6\x0C\xF3\0\xD6\x0C\xC5\0\xE6\x0CJ\nJ\nJ\nJ\nJ\n\xF6\x0C<\x07\x0E\0\x04\r<\x07\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xA7\x0C\x14\r\xF3\0\x1B\r\xF3\0\xF3\0\xF3\0\xF3\0+\r\xF3\0L\0\xF4\x0B\xF4\x0B1\x04J\nv\n;\rJ\nJ\nx\nJ\nK\r[\r\x0E\0\x0E\0\xF3\0k\rJ\nJ\nJ\nu\nJ\n{\r<\x07<\x07v\n[\x01\xB3\x02\x0E\0\x0E\0\x0E\0\x11\x02\xF3\0\xF3\0W\x01\x8A\r<\x07E\x08\xA1\x04\x13\x02\xF3\0\x9A\r7\x04\xF3\0\xF3\0U\x01\xA1\x04\xF3\0\xF3\0W\x01\xAA\r\xBA\r7\x04\xF3\0M\0\xA7\x0C\xF3\0\xF3\0Y\x02\x0E\0\xD8\x0B\xCA\r\xD3\r\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0[\x01[\x01[\x01[\x01\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\x90\x0C\xF3\0\xF3\0\x90\x0C\xE3\r\xF3\0M\0\xF3\0\xF3\0\xF3\0\x02\x06\xF3\r\x03\x0EN\0\xF3\r\x13\x0E#\x0E/\x0E?\x0EN\x0EZ\x0Ej\x0Ez\x0E\x0E\0N\0\x0E\0\x0E\0\x0E\0[\x01[\x01\xA4\x04\x87\x0E\x93\x0E\xA1\x0E\xB0\x0E\xC0\x0E\x0E\0\xF3\0\xF3\0\xA7\x0C\xCF\x0E\xD9\x0E\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xE4\x0E\xF0\x0E\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF0\x0E\x0E\0\x0E\0\x0E\0\x95\0\x0E\0\xF9\x0E\x05\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\x003\x01\x15\x0F\xF3\0)\x01\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xE4\x0E\xF2\x0E%\x0F\x0E\0\x0E\0*\x0F:\x0F=\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FK\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0F[\x0Fh\x0Fm\x0Fz\x0F\x86\x0F\x95\x0F\xA2\x0F\x0E\0\x0E\0\xAD\x0F\xBC\x0F\xBD\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xDE\x0E\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xAD\x0F\xC1\x0F\x0E\0\x0E\0\x0E\0\xCD\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xDD\x0F\xEC\x0F\xF3\0\xF3\0P\x0C\xF3\0\xF3\0\xF3\0\xA8\x0CA\x08\xF3\0\xFC\x0F\0\x06\0\x06\0\x06\0\x06[\x01[\x01\x0E\0\x0E\0\xA8\x03\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0J\n\x0C\x10J\nJ\nJ\nJ\nJ\n$\x0BJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n\x17\x10\x0E\0\x0E\0'\x10\x0E\x006\x10F\x10I\nJ\nJ\nJ\nJ\nV\x10f\x10f\x10f\x10f\x10f\x10k\x10<\0\xF3\0\xF3\0@\0\xF3\0\xF3\0\xF3\0\xF3\0L\0\x0E\0\xF3\0\xF3\0\x0E\0\x0E\0\x0E\0f\x10\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0{\x10\x0E\0\x0E\0\x0E\0f\x10f\x10g\x10f\x10f\x10f\x10f\x10f\x10\x8B\x10\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0J\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0N\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0M\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0N\0\xF3\0B\x06\x0E\0\xF3\0\xF3\0L\x01\x9B\x10\xF3\0M\x01\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xA3\x04\xAF\x04\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0p\0\xAA\x10\x0E\0?\0\xBA\x10\xF3\0\xC7\x10\x0E\0\xF3\0\xF3\0\xF3\0\xD7\x10\x14\x02\xF3\0\xF3\0W\x01\xE7\x10<\x07[\x01\xF7\x107\x04\xF3\0\x07\x11\xF3\0T\x01\xA1\x04\xF3\0N\0\x12\x02\xF3\0\xF3\0X\x01\x14\x11<\x07J\n$\x11\xF3\0\xF3\0R\x01\x0E\x114\x11<\x07J\nJ\nJ\nJ\nJ\nJ\n%\x0B?\nP\x01B\x11Q\x11*\r\0\x06\xF3\0\xF3\0\xF3\0)\x01\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0a\x11<\x07\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xD7\x10\xF3\0q\x11\xF3\0\xF3\0O\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0J\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nv\nJ\nJ\nJ\nJ\nJ\nJ\nK\r\x0E\0\x0E\0\xFC\x0Fy\x11\x88\x11\x92\x11\xA2\x11\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xB2\x11\x0E\0>\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0M\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0?\0\xF3\0\xF3\0\xC2\x11\x0E\0\x0E\0O\0[\x01\xD2\x11[\x01\xDF\x11\xE4\x11\xF4\x11\x0E\0\xCD\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\x04\x12\x14\x120\0@\0P\0@\0p\0#\x12f\x10f\x10)\x12\xF3\0L\0P\x119\x12\x0E\0F\x12\xC6\0\xF3\0\xCB\0V\x12M\0M\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0p\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0e\x12\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0j\x12\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0N\0\xF3\0\xF3\0\xF3\0\xA7\x03\xA4\x04\x0E\0\xF3\0\xF3\0\xAA\x04\xF3\0p\0\xF3\0\xF3\0z\x12\xF3\0M\0\xF3\0\xF3\0\x8A\x12d\x12\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0M\0<\x07\xF3\0\xF3\0\x8A\x12\xF3\0O\0\xF3\0\xF3\0\xC2\x11\xF3\0\xF3\0\xF3\0\xD7\x10\xC7\0\xC7\0\x97\x12\xD0\0\xA5\x12\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xFC\x0F\xF3\0+\r\xC2\x11\x0E\0\xCC\0\xF3\0\xF3\0\xB5\x12\x0E\0\x0E\0\x0E\0\x0E\0\xC5\x12\xF3\0\xF3\0\xCF\x12\xF3\0+\r\xF3\0\xFC\x0F\xF3\0L\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xDE\x12\xF3\0+\r\xF3\0)\x01\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0+\x01\x0E\0\x0E\0\x0E\0\x0E\0\xEE\x12\xE2\x06\xF3\0\xFE\x12\x0E\0\x0E\0\xF3\0N\0\xF3\0N\0\x0E\0\x0E\0\xCA\0\xF3\0\x0E\x13\x0E\0\xF3\0\xF3\0\xF3\0+\r\xF3\0+\r\xF3\0g\x12\xF3\0\xB2\x11\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xA7\x0C\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0g\x12\xF3\0\xF3\0\xF3\0g\x12\xF3\0\xF3\0\x1E\x13<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0.\x13\xB2\x11\x0E\0\x0E\0\x0E\0C\x08\xF3\0N\0A\x0B\xF3\0U\x01\xA4\x04\x0E\0\xF3\0>\x13\x0E\0\x0E\0\xF3\0e\x12\x0E\0\xF3\0\xFC\x0F\x13\x02\xF3\0\xF3\0S\x01\x0E\x11\x0E\x001\x04N\x13\x13\x02\xF3\0\xF3\0]\x13k\x13\xF3\0\xA7\x0C<\x07\x13\x02\xF3\0T\x01{\x13\x8B\x13\xF3\0\xF3\0\x9B\x13\x13\x02\xF3\0\xF3\0X\x01\xAB\x13\xBB\x13\x0E\0\x0E\0\xF3\0\xD0\0O\x01\xCB\x13\xDA\x13\x0E\0\x0E\0\x0E\0\xEA\x13\xC4\0\xA7\x0C\xF3\0\xF3\0L\x01\xF5\x0B<\x07\xFA\x13\xEE\x05\xC9\0\t\x14\x94\x07\x19\x14'\x14\xA0\x04\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0V\x017\x14G\x14\xB2\x11\x0E\0\xF3\0\xF3\0\xF3\0[\x01W\x14<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0L\x01g\x14\xA4\x04w\x14\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0[\x01\x84\x14<\x07\x0E\0\x0E\0\xF3\0\xF3\0P\x01 \x04<\x07\x0E\0\x0E\0\x0E\0J\n\xFB\nx\n\x94\x14\xA3\x14\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0O\x01\xF5\x0B\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0<\x07\xA8\x03\xB3\x14\x96\x12\xF3\0\xC3\x14\xD1\x14<\x07\x0E\0\x0E\0\x0E\0\x0E\0\xE1\x14\xF3\0\xF3\0\xF0\x14\xFF\x14\x0E\0\x0F\x15\xF3\0\xF3\0\x1C\x15+\x15;\x15\xF3\0\xF3\0Q\x01K\x15\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xA7\x0C\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xC9\0\xF3\0L\x01\xD4\x0B\xA7\x03<\x07\x0E\0?\0\xF3\0\x93\x02\xD3\x0B\x0E\x11\x0E\0\x0E\0\x0E\0\x0E\0\x02\x07\xF3\0\xF3\0[\x15j\x15<\x07\x94\x12\xF3\0z\x15\x87\x15<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\x97\x15\xA7\x15\xD1\0\xF3\0\xB3\x15\xA2\x04<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xA7\x03\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0)\x01\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0L\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xD7\x10\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xA7\x03\xF3\0\xF3\0\xF3\0\xC3\x15\xD3\x15\xE7\x10\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xFC\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xA7\x0C\xF3\0L\0<\x07\xF3\0\xF3\0\xF3\0\xF3\0L\0<\x07\xF3\0M\0\xA0\x04\xF3\0\xF3\0\xF3\0\x0E\x11\xD7\x10<\x07>\0\xDA\x04\xF3\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\x01\x08Z\x01[\x01[\x01\xDB\x15\x13\x02\x0E\0\x0E\0\x0E\0\x0E\0\xEB\x15&\x0B\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xFB\x15\x0B\x16J\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n\x1B\x16)\x16\x0E\09\x16E\x16\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0p\0N\0\xA7\x0CU\x16e\x16\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0[\x01[\x01\xDA\x03[\x01\x0E\x11\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0p\x16}\x16\x8A\x16\x0E\0\x96\x16\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xA4\x16\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xCD\0\xF3\0\xF3\0\xF3\0\xC5\0\xB2\x16\xC0\x16\xCE\0\xF3\0\xF3\0\xF3\0c\x0C\x7F\x06\xF3\0\xCD\x16\xDD\x16\xD1\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xE7\x16\xF3\0\xD1\0\xC7\0\xF3\0\xC7\0\xF3\0\xCD\0\xF3\0\xCD\0L\0\xF3\0L\0\xF3\0\xC9\0\xF3\0\xC9\0\xF3\0\xF4\x16\x02\x17\x02\x17\x02\x17[\x01[\x01[\x01\x12\x17[\x01[\x01\xF3\x0B\"\x08#\x08E\x08\x94\x02\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0L\0&\r\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xD4\x0B\x1D\x17+\x17\xF3\0\xF3\0\xF3\0M\0\x0E\0A\x08\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0N\0;\x17K\x17\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0[\x17\x0E\0\xF3\0\xF3\0O\x01<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0O\x01<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0k\x17L\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0e\x12\x0E\x11\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0{\x17<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xCE\0\xF3\0\x8A\x17\x97\x17\xA5\x17\xB5\x17\xC3\x17\xCB\x17\xC8\0O\0\xDA\x17O\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0A\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0F(\x0F\x0E\0\x95\0\xF3\0)\x01\xF3\0\xE5\x17\xF3\x17\x03\x18\x12\x18(\x0FA\x0FA\x0FA\x0F\"\x18(\x188\x18H\x18\x95\0V\x18\xF9\x0EA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0Fb\x18A\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FC\x0Fr\x18A\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0F\x0E\0\x0E\0\x0E\0A\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0t\x18\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0s\x18A\x0FA\x0F)\x0F\x0E\0\x0E\0\x0E\0\x84\x18Q\x0F\x0E\0\x0E\0\x84\x18\x0E\0'\x0FA\x0FA\x0FA\x0FA\x0FA\x0F)\x0FA\x0FA\x0F\x8C\x18:\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0<\x07A\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FC\x0FJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n\x0E\0\x0E\0J\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nK\rJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nv\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n&\x0BJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n'\x0BJ\nJ\nJ\nJ\nJ\nv\n\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0J\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\ny\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x9C\x18\x0E\0[\x01[\x01[\x01[\x01[\x01[\x01\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01\x0E\0y\0\x8D\0\xAD\0\xCD\0\xED\0\r\x01-\x01M\x01m\x01\x89\x01\xA9\x01\xC3\x01\xE3\x01\x03\x02#\x02C\x02c\x02~\x02\x9E\x02\xBE\x02\xDA\x02\xEE\x02\x0E\x03.\x03N\x03n\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x92\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\xB2\x03\xB2\x03\xCA\x03\xEA\x03\n\x04*\x04\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03J\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04z\x04\x94\x04\xB2\x04\xD2\x04\xF2\x04\x12\x052\x05R\x05r\x05\x92\x05\xB2\x05\xCA\x05\xEA\x05\n\x06*\x06J\x06j\x06\x8A\x06\xAA\x06\xC5\x06\xB2\x03\xE5\x06\x05\x07j\x04j\x04j\x04j\x04\x1A\x07\xB2\x03\xB2\x03:\x07j\x04j\x04j\x04j\x04j\x04\xB2\x03Z\x07j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04\xB2\x03z\x07j\x04\x96\x07j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04\xB6\x07\xD6\x07j\x04j\x04j\x04j\x04j\x04\xF6\x07j\x04j\x04j\x04j\x04j\x04j\x04j\x04\x06\x08\x1B\x087\x08W\x08m\x08j\x04\x8D\x08j\x04\x9D\x08\xBD\x08\xD4\x08\xE7\x08\xF7\x08\x17\tj\x04j\x047\tW\tw\t\x97\t\xB2\t\xD2\t\xE7\t\x07\n\x08\n\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03(\n\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x038\nW\n\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03m\n\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03x\n\x8E\x03\x97\nj\x04j\x04j\x04j\x04\x8E\x03\x9B\nj\x04j\x04\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\xBB\n\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\xD0\nj\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04\xF0\n") }, unsafe { zerovec::ZeroVec::from_bytes_unchecked(b"\0\0\0\0\0\0\0\0\0\0\x02\x03\x03\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x12\0\x0C\0\0\0\0\x0B\0\0\0\0\x0F\0\r\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x0E\x0F\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\x11\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x13\n\0\0\x07\x13\0\0\0\0\0\0\n\0\x0E\0\0\n\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\0\n\n\0\0\n\n\n\n\x0F\n\0\0\0\0\0\0\n\x0E\n\n\n\0\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\0\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\n\n\n\n\0\n\x0E\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x0F\n\0\0\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\x04\x04\0\x04\x04\0\x04\0\0\0\0\0\0\0\0\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\0\0\0\0\t\t\t\t\n\x0E\0\0\0\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\x0F\x0F\0\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\x07\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\x10\x0F\0\n\n\x04\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\x04\x04\x04\x04\x04\x04\x04\x10\0\x04\x04\x04\x04\x04\x04\n\n\x04\x04\0\x04\x04\x04\x04\n\n\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\n\n\n\0\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\n\x04\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\0\0\x0F\0\n\0\0\x04\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\x04\x04\x04\n\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\0\x10\x10\0\0\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x10\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\0\n\n\n\n\n\n\n\n\0\0\n\n\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\0\n\0\0\0\n\n\n\n\0\0\x04\n\x04\x04\x04\x04\x04\0\0\x04\x04\0\0\x04\x04\x04\n\0\0\0\0\0\0\0\0\x04\0\0\0\0\n\n\0\n\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\n\n\0\0\0\0\0\0\0\0\0\0\n\0\x04\0\x04\x04\x04\0\n\n\n\n\n\n\0\0\0\0\n\n\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\0\n\n\0\n\n\0\n\n\0\0\x04\0\x04\x04\x04\0\0\0\0\x04\x04\0\0\x04\x04\x04\0\0\0\x04\0\0\0\0\0\0\0\n\n\n\n\0\n\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x04\x04\n\n\n\x04\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\0\n\n\n\n\n\n\n\n\n\0\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\0\n\n\0\n\n\n\n\n\0\0\x04\n\x04\x04\x04\x04\x04\x04\0\x04\x04\x04\0\x04\x04\x04\0\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\n\x04\x04\x04\x04\x04\x04\0\x04\x04\x04\0\n\n\n\n\n\n\n\n\0\0\n\n\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\0\n\n\0\n\n\n\n\n\0\0\x04\n\x04\x04\x04\x04\x04\0\0\x04\x04\0\0\x04\x04\x04\0\0\0\0\0\0\0\x04\x04\x04\0\0\0\0\n\n\0\n\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\n\0\n\n\n\n\n\n\0\0\0\n\n\n\0\n\n\n\n\0\0\0\n\n\0\n\0\n\n\0\0\0\n\n\0\0\0\n\n\n\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\x04\x04\x04\0\0\0\x04\x04\x04\0\x04\x04\x04\x04\0\0\n\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\0\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\x04\n\x04\x04\x04\x04\x04\0\x04\x04\x04\0\x04\x04\x04\x04\0\0\0\0\0\0\0\x04\x04\0\n\n\n\0\0\n\0\0\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\x04\x04\x04\0\n\n\n\n\n\n\n\n\0\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\0\0\x04\n\x04\x04\x04\x04\x04\0\x04\x04\x04\0\x04\x04\x04\x04\0\0\0\0\0\0\0\x04\x04\0\0\0\0\0\0\n\n\0\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\n\n\x04\0\0\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\n\n\n\n\n\n\n\n\n\0\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\n\x04\x04\x04\x04\x04\0\x04\x04\x04\0\x04\x04\x04\x04\n\0\0\0\0\0\n\n\n\x04\0\0\0\0\0\0\0\n\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\0\x04\x04\x04\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\0\n\0\0\n\n\n\n\n\n\n\0\0\0\x04\0\0\0\0\x04\x04\x04\x04\x04\x04\0\x04\0\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x14\x14\0\x14\0\x14\x14\x14\x14\x14\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\x14\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\0\x14\x14\x14\x14\x14\0\x14\0\x14\x14\x14\x14\x14\x14\x14\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\x14\x14\x14\x14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\x04\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\0\0\x04\0\x04\0\x04\0\0\0\0\x04\x04\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\x04\x04\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x14\x14\x14\x14\x14\x14\n\n\n\n\n\n\0\n\0\0\0\0\0\n\0\0\n\n\n\n\n\n\n\n\n\0\n\n\n\n\0\0\n\n\n\n\n\n\n\0\n\0\n\n\n\n\0\0\n\n\n\n\n\n\n\n\n\n\n\0\0\x04\x04\x04\n\n\n\n\n\n\0\0\n\n\n\n\n\n\0\0\x12\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\0\0\0\n\n\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\n\n\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\0\n\n\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\n\0\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\x14\x14\x14\x14\0\0\0\x14\0\0\0\0\x14\x14\0\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x07\x04\n\n\n\n\n\x04\x04\n\n\n\n\n\n\n\n\n\x04\n\0\0\0\0\0\n\n\n\n\n\n\0\0\0\0\0\0\0\0\0\0\x14\x14\x14\x14\x14\0\0\0\0\0\0\0\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x14\0\0\0\x14\x14\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\0\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\0\0\0\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\x04\n\n\x04\x04\x04\n\0\0\0\0\0\n\n\n\n\n\n\n\n\0\n\0\n\0\n\0\n\0\0\n\n\n\0\n\n\n\n\n\n\n\0\0\0\n\n\n\n\0\0\n\n\n\n\n\n\0\0\0\0\x12\x12\x12\x12\x12\x12\x12\0\x12\x12\x12\0\x04\x05\x07\x07\0\0\0\0\0\0\0\0\r\r\0\0\0\0\0\0\r\0\0\x0E\x03\x03\x07\x07\x07\x07\x07\x11\0\0\0\0\0\0\0\0\0\0\0\0\x13\0\0\x11\0\0\0\x0F\0\0\0\0\x13\0\0\0\0\0\0\x11\0\0\0\0\0\0\0\0\0\0\x12\x07\x07\x07\x07\x07\0\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\n\0\0\0\0\n\0\0\n\n\n\n\n\n\0\n\0\0\0\n\n\n\n\n\0\0\x13\0\n\0\n\0\n\0\n\n\n\n\0\n\n\n\n\n\n\n\n\n\x13\0\0\n\n\n\n\0\0\0\0\0\n\n\n\n\n\0\0\0\0\n\0\0\0\0\x13\x13\x13\x13\x13\x13\0\0\0\0\0\0\0\0\0\x13\x13\0\0\0\0\0\0\0\0\0\0\x13\x13\0\0\0\0\0\0\0\0\x13\0\0\0\0\0\0\0\0\0\x13\x13\x13\x13\x13\x13\x13\0\0\0\0\x13\x13\x13\0\0\0\0\0\n\n\x13\n\n\n\n\n\n\n\n\n\n\n\n\n\x13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x13\x13\x13\x13\0\x13\x13\x13\x13\x13\x13\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\0\0\0\0\0\0\0\0\0\x13\x13\x13\x13\x13\x13\0\0\x13\x13\x13\x13\x13\x13\x13\x13\0\x13\0\x13\0\0\0\0\0\0\x13\0\0\0\0\0\0\0\x13\x13\0\0\0\0\0\0\0\0\0\0\0\x13\0\0\x13\0\0\0\0\x13\0\x13\0\0\0\x13\x13\x13\0\x13\0\0\0\0\0\0\0\0\x13\x13\x13\x13\x13\0\0\0\0\0\0\0\0\x13\x13\x13\0\0\0\0\0\0\0\0\x13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x13\x13\0\0\0\0\x13\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\0\0\0\0\0\0\n\n\n\n\x04\x04\n\n\0\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\0\0\0\0\0\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\x14\x14\x14\x14\x14\x14\0\0\0\0\0\0\0\0\0\0\x12\0\0\0\0\x14\0\x14\0\0\0\0\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x04\x04\x04\x04\x04\x04\x13\x08\x08\x08\x08\x08\0\0\x14\x14\x14\x14\n\x13\0\0\x14\x14\x14\x14\x14\x14\x14\0\0\x04\x04\x08\x08\x14\x14\x14\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\0\x08\x08\x08\x08\0\0\0\0\0\0\0\x13\0\x13\0\0\0\0\0\0\x08\x08\x08\x08\x08\x08\x08\x08\0\0\0\0\0\0\0\0\x04\x04\x04\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\n\n\0\n\0\n\n\n\n\n\0\0\0\0\0\0\n\n\x04\n\n\n\x04\n\n\n\n\x04\n\n\n\n\x04\x04\x04\x04\x04\0\0\0\0\x04\0\0\0\n\n\n\n\0\0\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\x04\x04\n\n\n\n\n\n\0\0\0\n\0\n\n\x04\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x14\x14\x14\x14\x14\0\n\n\n\x04\n\n\n\n\n\n\n\n\x04\x04\0\0\n\n\n\x04\x04\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\0\0\n\n\n\n\n\n\0\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\0\x04\x04\0\0\n\n\n\n\n\n\n\0\0\0\0\n\n\n\n\n\0\0\0\0\0\t\x04\t\t\t\t\t\t\t\t\t\0\t\t\t\t\t\t\t\0\t\t\t\t\t\0\t\0\t\t\0\t\t\0\t\t\t\t\t\t\t\t\t\t\n\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\0\0\0\0\0\0\0\0\x0F\0\0\x0E\x0F\0\0\0\0\0\0\0\0\0\0\0\x11\x11\0\0\0\0\0\0\0\0\0\0\0\0\0\x11\x11\x11\x0F\0\r\0\x0F\x0E\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\x07\0\0\0\0\0\0\0\r\0\0\0\0\x0F\0\r\0\0\0\0\0\0\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x04\x04\0\0\n\n\n\n\n\n\0\0\n\n\n\0\0\0\0\0\0\0\0\0\x07\x07\x07\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\0\n\n\0\n\n\n\n\n\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\n\n\n\n\n\n\x04\x04\x04\x04\x04\0\0\0\0\0\n\n\n\n\0\0\0\0\n\n\n\n\n\n\n\n\0\n\n\0\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\0\n\n\0\0\0\n\0\n\n\n\n\n\n\n\n\n\0\0\0\0\0\n\n\n\n\n\n\0\0\n\0\n\n\n\n\n\n\0\n\n\0\0\0\n\0\0\n\n\n\0\n\n\0\0\0\0\0\0\0\0\0\0\n\x04\x04\x04\0\x04\x04\0\0\0\0\0\x04\x04\x04\x04\n\n\n\n\n\n\0\0\x04\x04\x04\0\0\0\0\x04\n\n\n\n\n\x04\x04\0\0\0\0\0\0\0\0\0\n\n\n\n\x04\x04\x04\x04\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\0\x04\x04\0\0\0\n\n\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\x04\n\n\x04\x04\n\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\x10\0\0\x04\0\0\0\0\0\0\0\0\0\0\x10\0\0\x04\x04\x04\x04\x04\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\n\x04\x04\n\0\0\0\0\0\0\0\0\n\n\n\x04\0\0\n\0\0\0\0\0\0\0\0\0\x04\n\n\n\n\0\0\0\0\x04\x04\x04\x04\0\x04\x04\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\n\0\n\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\x04\n\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\0\n\0\n\n\n\n\0\n\x04\x04\x04\x04\0\n\n\n\n\n\n\n\n\0\0\n\0\n\n\0\n\n\n\n\n\0\x04\x04\n\x04\x04\n\0\0\0\0\0\0\x04\0\0\0\0\0\n\n\n\x04\x04\0\0\x04\x04\x04\x04\x04\x04\x04\0\0\0\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\x04\n\x04\x04\x04\x04\n\n\0\n\0\0\0\0\0\0\0\0\x04\x04\x04\x04\x04\x04\0\0\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\n\n\n\n\x04\x04\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x14\x14\0\0\0\x14\x14\x14\x14\x14\x14\x14\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\0\0\n\0\0\n\n\n\n\x04\x04\x04\x04\x04\x04\0\x04\x04\0\0\x04\x04\x04\x04\n\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\0\0\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\0\0\x04\x04\x04\x04\x04\x04\n\0\n\x04\0\0\0\0\0\0\0\0\0\0\0\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\n\x04\x04\x04\x04\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\n\0\0\n\x04\x04\x04\x04\x04\x04\0\0\0\x04\0\x04\x04\0\x04\x04\x04\x04\x04\x04\n\x04\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\0\x04\x04\x04\x04\x04\n\0\0\0\0\0\0\0\n\n\n\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\x04\x04\n\x04\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\0\0\0\x04\x04\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x04\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\x04\n\n\x14\x14\x04\0\0\0\0\0\0\0\0\0\0\0\x08\x08\x08\x08\0\x08\x08\x08\x08\x08\x08\x08\0\x08\x08\0\x08\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x08\x08\x08\0\0\0\0\0\0\0\0\0\0\0\0\0\x14\0\0\0\0\0\0\0\0\0\0\0\0\0\x14\x14\x14\0\0\x08\0\0\0\0\0\0\0\0\0\0\x08\x08\x08\x08\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\0\0\0\x04\x04\0\x07\x07\x07\x07\0\0\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\x04\0\0\0\x04\x04\x04\x07\x07\x07\x07\x07\x07\x07\x07\x04\x04\x04\x04\x04\0\0\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\0\0\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\0\n\0\0\n\n\0\0\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\0\n\0\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\0\n\n\n\n\n\0\n\0\0\0\n\n\n\n\n\n\0\0\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\x04\x04\x04\x04\x04\0\x04\x04\0\x04\x04\x04\x04\x04\0\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\0\n\n\n\n\n\n\n\0\n\n\n\n\0\n\n\0\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\n\0\0\0\0\n\n\0\n\0\0\n\0\n\n\n\n\n\n\n\0\n\n\n\n\0\n\0\n\0\0\0\0\n\0\0\0\0\n\0\n\0\n\0\n\n\n\0\n\n\0\n\0\0\n\0\n\0\n\0\n\0\n\n\0\n\0\0\n\n\n\n\0\n\n\n\n\0\n\n\n\n\0\n\0\n\n\n\0\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\0\0\x13\x13\x13\x13\n\n\n\n\n\n\n\n\n\n\n\n\x13\x13\n\n\n\n\n\n\n\n\n\n\0\0\0\0\x13\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\0\0\0\0\x13\x13\x13\x13\x13\x13\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x14\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\0\0\0\0\0\0\0\0\0\x13\0\0\0\0\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x04\x04\x04\x04\x04\0\0\0\0\0\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\0\0\0\0\0\0\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\x13\x13\x13\x13\0\x07\0\0\0\0\0\0\0\0\0\0\0\0\0\0") }, 0u8), break_state_table: unsafe { zerovec::ZeroVec::from_bytes_unchecked(b"\xFD\xFD\xFD\xFD\0\x19\xFD\0\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x04\x04\xFD\x04\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x1B\x05\xFD\x1C\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x06\x06'\x06\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x07\x07\xFD\x07\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x08\x08\xFD\x08\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\t\t\xFD\t\xFD\xFF\xFF\x9A#! \xFD\xFF\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\n\x15\xFD\n\xFD\xFF\xFF\x1E\xFD\x1F\x1D\xFD\xFF\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x0B\x0B\xFD\x0B\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x0C\x0C\xFD\x0C\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\r\r\xFD\r\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x0E\x0E\xFD\x0E\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x0F\x0F\xFD\x0F\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x10\x10\xFD\x10\xFD\xFF\xFF$\xFD&\xFD%\xFF\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x11\x11\xFD\x11\xFF\xFF\xFF\xFD\xFD\xFD\xFD\xFD\xFF\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x16\x18\xFD\x17\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x13\x1A\xFD\x13\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFE\xFE\xFE\xFE\n\x15\xFE\n\xFE\xFF\xFF\x1E\xFE\x1F\x1D\xFE\xFF\xFF\xFD\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFD\xFD\xFD\xFD\xFD\x16\x18\xFD\x17\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x16\x18\xFD\x17\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x16\x18\xFD\x17\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFD\xFE\xFE\xFE\xFE\x13\xFE\xFE\x13\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFD\xFD\xFD\xFD\xFD\x1B\x05\xFD\x1C\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x1B\x05\xFD\x1C\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFE\xFE\xFE\xFE\x1D\x1D\xFE\x1D\xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\x1E\x1E\xFE\x1E\xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\x1F\x1F\xFE\x1F\xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE \xFE \xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE!!\xFE!\xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\"\"\xFE\"\xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFD\xFE\xFE\xFE\xFE##\xFE#\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE$\xFE\xFE$\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE%\xFE\xFE%\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE&\xFE\xFE&\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFD\xFD\xFD\xFD\xFD(\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD") }, word_type_table: unsafe { zerovec::ZeroVec::from_bytes_unchecked(b"\0\0\0\0\0\0\0\x02\x02\x02\0\0\0\0\0\x01\x02\0\0\x02\x02\x02\x02\x02\0\0\x01\x01\x01\x02\x02\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x02\x02\x02\0\0\0\x02\x02\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0") }, property_count: 43u8, last_codepoint_property: 20u8, sot_property: 41u8, eot_property: 42u8, complex_property: 20u8 }; + pub const SINGLETON_WORD_BREAK_DATA_V2_MARKER: &'static ::DataStruct = &icu::segmenter::provider::RuleBreakDataV2 { property_table: icu::collections::codepointtrie::CodePointTrie::from_parts(icu::collections::codepointtrie::CodePointTrieHeader { high_start: 918016u32, shifted12_high_start: 225u16, index3_null_offset: 1130u16, data_null_offset: 14u32, null_value: 0u32, trie_type: icu::collections::codepointtrie::TrieType::Small }, unsafe { zerovec::ZeroVec::from_bytes_unchecked(b"\0\0@\0{\0\xBB\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\x1B\x01[\x01k\x01\xAB\x01\xCE\x01\xF3\0\xF3\0\x0C\x02\xF3\0\x1C\x02M\x02\x84\x02\xC2\x02\x02\x037\x03\xF3\0h\x03\xA8\x03\xDD\x03\xF7\x037\x04w\x04\xB7\x04\xEF\x04%\x05a\x05\x9F\x05\xDE\x05\x1C\x06[\x06\x99\x06\xD8\x06\x16\x07V\x07\x94\x07\xD2\x07\x10\x08P\x08\x8E\x08\xCE\x08\x0C\tL\t\x8A\t\xCA\t\n\nI\n\x89\n\xC8\n\x08\x0BH\x0B\x88\x0B\xC3\x0B\0\x0C\x10\x0B*\x0B:\x0BP\x0Bp\x0B\x8E\x0B\xA6\x0B\xC5\x0B\xE5\x0B\xE5\x0B\xF2\x0B\x0F\x0C/\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0CA\x0Ca\x0C\0\0\x10\0 \x000\0@\0P\0`\0p\0{\0\x8B\0\x9B\0\xAB\0\xBB\0\xCB\0\xDB\0\xEB\0\xF3\0\x03\x01\x13\x01#\x01\xF3\0\x03\x01\x13\x01#\x01\xF3\0\x03\x01\x13\x01#\x01\xF3\0\x03\x01\x13\x01#\x01\x1B\x01+\x01;\x01K\x01[\x01k\x01{\x01\x8B\x01k\x01{\x01\x8B\x01\x9B\x01\xAB\x01\xBB\x01\xCB\x01\xDB\x01\xCE\x01\xDE\x01\xEE\x01\xFE\x01\xF3\0\x03\x01\x13\x01#\x01\xF3\0\x03\x01\x13\x01#\x01\x0C\x02\x1C\x02,\x02<\x02\xF3\0\x03\x01\x13\x01#\x01\x1C\x02,\x02<\x02L\x02M\x02]\x02m\x02}\x02\x84\x02\x94\x02\xA4\x02\xB4\x02\xC2\x02\xD2\x02\xE2\x02\xF2\x02\x02\x03\x12\x03\"\x032\x037\x03G\x03W\x03g\x03\xF3\0\x03\x01\x13\x01#\x01h\x03x\x03\x88\x03\x98\x03\xA8\x03\xB8\x03\xC8\x03\xD8\x03\xDD\x03\xED\x03\xFD\x03\r\x04\xF7\x03\x07\x04\x17\x04'\x047\x04G\x04W\x04g\x04w\x04\x87\x04\x97\x04\xA7\x04\xB7\x04\xC7\x04\xD7\x04\xE7\x04\xEF\x04\xFF\x04\x0F\x05\x1F\x05%\x055\x05E\x05U\x05a\x05q\x05\x81\x05\x91\x05\x9F\x05\xAF\x05\xBF\x05\xCF\x05\xDE\x05\xEE\x05\xFE\x05\x0E\x06\x1C\x06,\x06<\x06L\x06[\x06k\x06{\x06\x8B\x06\x99\x06\xA9\x06\xB9\x06\xC9\x06\xD8\x06\xE8\x06\xF8\x06\x08\x07\x16\x07&\x076\x07F\x07V\x07f\x07v\x07\x86\x07\x94\x07\xA4\x07\xB4\x07\xC4\x07\xD2\x07\xE2\x07\xF2\x07\x02\x08\x10\x08 \x080\x08@\x08P\x08`\x08p\x08\x80\x08\x8E\x08\x9E\x08\xAE\x08\xBE\x08\xCE\x08\xDE\x08\xEE\x08\xFE\x08\x0C\t\x1C\t,\t<\tL\t\\\tl\t|\t\x8A\t\x9A\t\xAA\t\xBA\t\xCA\t\xDA\t\xEA\t\xFA\t\n\n\x1A\n*\n:\nI\nY\ni\ny\n\x89\n\x99\n\xA9\n\xB9\n\xC8\n\xD8\n\xE8\n\xF8\n\x08\x0B\x18\x0B(\x0B8\x0BH\x0BX\x0Bh\x0Bx\x0B\x88\x0B\x98\x0B\xA8\x0B\xB8\x0B\xC3\x0B\xD3\x0B\xE3\x0B\xF3\x0B\0\x0C\x10\x0C \x0C0\x0CJ\nJ\nJ\nJ\n<\x07J\nJ\nJ\nJ\n@\x0C\xF3\0\xF3\0P\x0C\xF3\0\xF3\0\xC7\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0`\x0Cp\x0C\xF3\0\xF3\0`\x0C\xF3\0\xF3\0h\x0Cx\x0C\xCB\0\xF3\0\xF3\0\xF3\0x\x0C\xF3\0\xF3\0\xF3\0\x80\x0C\x0E\0\x0E\0\xF3\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\x90\x0C@\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0W\x02\xF3\0\xA0\x0Cp\0\xF3\0\xF3\0\xF3\0\xF3\0\xD6\t\xA7\x0C\xF3\0\xB7\x0C\xF3\0\xC6\x0C\xF3\0\xD6\x0C\xC5\0\xE6\x0CJ\nJ\nJ\nJ\nJ\n\xF6\x0C<\x07\x0E\0\x04\r<\x07\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xA7\x0C\x14\r\xF3\0\x1B\r\xF3\0\xF3\0\xF3\0\xF3\0+\r\xF3\0L\0\xF4\x0B\xF4\x0B1\x04J\nv\n;\rJ\nJ\nx\nJ\nK\r[\r\x0E\0\x0E\0\xF3\0k\rJ\nJ\nJ\nu\nJ\n{\r<\x07<\x07v\n[\x01\xB3\x02\x0E\0\x0E\0\x0E\0\x11\x02\xF3\0\xF3\0W\x01\x8A\r<\x07E\x08\xA1\x04\x13\x02\xF3\0\x9A\r7\x04\xF3\0\xF3\0U\x01\xA1\x04\xF3\0\xF3\0W\x01\xAA\r\xBA\r7\x04\xF3\0M\0\xA7\x0C\xF3\0\xF3\0Y\x02\x0E\0\xD8\x0B\xCA\r\xD3\r\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0[\x01[\x01[\x01[\x01\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\x90\x0C\xF3\0\xF3\0\x90\x0C\xE3\r\xF3\0M\0\xF3\0\xF3\0\xF3\0\x02\x06\xF3\r\x03\x0EN\0\xF3\r\x13\x0E#\x0E/\x0E?\x0EN\x0EZ\x0Ej\x0Ez\x0E\x0E\0N\0\x0E\0\x0E\0\x0E\0[\x01[\x01\xA4\x04\x87\x0E\x93\x0E\xA1\x0E\xB0\x0E\xC0\x0E\x0E\0\xF3\0\xF3\0\xA7\x0C\xCF\x0E\xD9\x0E\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xE4\x0E\xF0\x0E\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF0\x0E\x0E\0\x0E\0\x0E\0\x95\0\x0E\0\xF9\x0E\x05\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\x003\x01\x15\x0F\xF3\0)\x01\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xE4\x0E\xF2\x0E%\x0F\x0E\0\x0E\0*\x0F:\x0F=\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FK\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0F[\x0Fh\x0Fm\x0Fz\x0F\x86\x0F\x95\x0F\xA2\x0F\x0E\0\x0E\0\xAD\x0F\xBC\x0F\xBD\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xDE\x0E\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xAD\x0F\xC1\x0F\x0E\0\x0E\0\x0E\0\xCD\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xDD\x0F\xEC\x0F\xF3\0\xF3\0P\x0C\xF3\0\xF3\0\xF3\0\xA8\x0CA\x08\xF3\0\xFC\x0F\0\x06\0\x06\0\x06\0\x06[\x01[\x01\x0E\0\x0E\0\xA8\x03\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0J\n\x0C\x10J\nJ\nJ\nJ\nJ\n$\x0BJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n\x17\x10\x0E\0\x0E\0'\x10\x0E\x006\x10F\x10I\nJ\nJ\nJ\nJ\nV\x10f\x10f\x10f\x10f\x10f\x10k\x10<\0\xF3\0\xF3\0@\0\xF3\0\xF3\0\xF3\0\xF3\0L\0\x0E\0\xF3\0\xF3\0\x0E\0\x0E\0\x0E\0f\x10\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0{\x10\x0E\0\x0E\0\x0E\0f\x10f\x10g\x10f\x10f\x10f\x10f\x10f\x10\x8B\x10\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0J\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0N\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0M\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0N\0\xF3\0B\x06\x0E\0\xF3\0\xF3\0L\x01\x9B\x10\xF3\0M\x01\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xA3\x04\xAF\x04\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0p\0\xAA\x10\x0E\0?\0\xBA\x10\xF3\0\xC7\x10\x0E\0\xF3\0\xF3\0\xF3\0\xD7\x10\x14\x02\xF3\0\xF3\0W\x01\xE7\x10<\x07[\x01\xF7\x107\x04\xF3\0\x07\x11\xF3\0T\x01\xA1\x04\xF3\0N\0\x12\x02\xF3\0\xF3\0X\x01\x14\x11<\x07J\n$\x11\xF3\0\xF3\0R\x01\x0E\x114\x11<\x07J\nJ\nJ\nJ\nJ\nJ\n%\x0B?\nP\x01B\x11Q\x11*\r\0\x06\xF3\0\xF3\0\xF3\0)\x01\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0a\x11<\x07\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xD7\x10\xF3\0q\x11\xF3\0\xF3\0O\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0J\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nv\nJ\nJ\nJ\nJ\nJ\nJ\nK\r\x0E\0\x0E\0\xFC\x0Fy\x11\x88\x11\x92\x11\xA2\x11\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xB2\x11\x0E\0>\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0M\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0?\0\xF3\0\xF3\0\xC2\x11\x0E\0\x0E\0O\0[\x01\xD2\x11[\x01\xDF\x11\xE4\x11\xF4\x11\x0E\0\xCD\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\x04\x12\x14\x120\0@\0P\0@\0p\0#\x12f\x10f\x10)\x12\xF3\0L\0P\x119\x12\x0E\0F\x12\xC6\0\xF3\0\xCB\0V\x12M\0M\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0p\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0e\x12\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0j\x12\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0N\0\xF3\0\xF3\0\xF3\0\xA7\x03\xA4\x04\x0E\0\xF3\0\xF3\0\xAA\x04\xF3\0p\0\xF3\0\xF3\0z\x12\xF3\0M\0\xF3\0\xF3\0\x8A\x12d\x12\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0M\0<\x07\xF3\0\xF3\0\x8A\x12\xF3\0O\0\xF3\0\xF3\0\xC2\x11\xF3\0\xF3\0\xF3\0\xD7\x10\xC7\0\xC7\0\x97\x12\xD0\0\xA5\x12\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xFC\x0F\xF3\0+\r\xC2\x11\x0E\0\xCC\0\xF3\0\xF3\0\xB5\x12\x0E\0\x0E\0\x0E\0\x0E\0\xC5\x12\xF3\0\xF3\0\xCF\x12\xF3\0+\r\xF3\0\xFC\x0F\xF3\0L\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xDE\x12\xF3\0+\r\xF3\0)\x01\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0+\x01\x0E\0\x0E\0\x0E\0\x0E\0\xEE\x12\xE2\x06\xF3\0\xFE\x12\x0E\0\x0E\0\xF3\0N\0\xF3\0N\0\x0E\0\x0E\0\xCA\0\xF3\0\x0E\x13\x0E\0\xF3\0\xF3\0\xF3\0+\r\xF3\0+\r\xF3\0g\x12\xF3\0\xB2\x11\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xA7\x0C\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0g\x12\xF3\0\xF3\0\xF3\0g\x12\xF3\0\xF3\0\x1E\x13<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0.\x13\xB2\x11\x0E\0\x0E\0\x0E\0C\x08\xF3\0N\0A\x0B\xF3\0U\x01\xA4\x04\x0E\0\xF3\0>\x13\x0E\0\x0E\0\xF3\0e\x12\x0E\0\xF3\0\xFC\x0F\x13\x02\xF3\0\xF3\0S\x01\x0E\x11\x0E\x001\x04N\x13\x13\x02\xF3\0\xF3\0]\x13k\x13\xF3\0\xA7\x0C<\x07\x13\x02\xF3\0T\x01{\x13\x8B\x13\xF3\0\xF3\0\x9B\x13\x13\x02\xF3\0\xF3\0X\x01\xAB\x13\xBB\x13\x0E\0\x0E\0\xF3\0\xD0\0O\x01\xCB\x13\xDA\x13\x0E\0\x0E\0\x0E\0\xEA\x13\xC4\0\xA7\x0C\xF3\0\xF3\0L\x01\xF5\x0B<\x07\xFA\x13\xEE\x05\xC9\0\t\x14\x94\x07\x19\x14'\x14\xA0\x04\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0V\x017\x14G\x14\xB2\x11\x0E\0\xF3\0\xF3\0\xF3\0[\x01W\x14<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0L\x01g\x14\xA4\x04w\x14\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0[\x01\x84\x14<\x07\x0E\0\x0E\0\xF3\0\xF3\0P\x01 \x04<\x07\x0E\0\x0E\0\x0E\0J\n\xFB\nx\n\x94\x14\xA3\x14\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0O\x01\xF5\x0B\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0<\x07\xA8\x03\xB3\x14\x96\x12\xF3\0\xC3\x14\xD1\x14<\x07\x0E\0\x0E\0\x0E\0\x0E\0\xE1\x14\xF3\0\xF3\0\xF0\x14\xFF\x14\x0E\0\x0F\x15\xF3\0\xF3\0\x1C\x15+\x15;\x15\xF3\0\xF3\0Q\x01K\x15\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xA7\x0C\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xC9\0\xF3\0L\x01\xD4\x0B\xA7\x03<\x07\x0E\0?\0\xF3\0\x93\x02\xD3\x0B\x0E\x11\x0E\0\x0E\0\x0E\0\x0E\0\x02\x07\xF3\0\xF3\0[\x15j\x15<\x07\x94\x12\xF3\0z\x15\x87\x15<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\x97\x15\xA7\x15\xD1\0\xF3\0\xB3\x15\xA2\x04<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xA7\x03\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0)\x01\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0L\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xD7\x10\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xA7\x03\xF3\0\xF3\0\xF3\0\xC3\x15\xD3\x15\xE7\x10\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xFC\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xA7\x0C\xF3\0L\0<\x07\xF3\0\xF3\0\xF3\0\xF3\0L\0<\x07\xF3\0M\0\xA0\x04\xF3\0\xF3\0\xF3\0\x0E\x11\xD7\x10<\x07>\0\xDA\x04\xF3\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\x01\x08Z\x01[\x01[\x01\xDB\x15\x13\x02\x0E\0\x0E\0\x0E\0\x0E\0\xEB\x15&\x0B\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xFB\x15\x0B\x16J\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n\x1B\x16)\x16\x0E\09\x16E\x16\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0p\0N\0\xA7\x0CU\x16e\x16\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0[\x01[\x01\xDA\x03[\x01\x0E\x11\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0p\x16}\x16\x8A\x16\x0E\0\x96\x16\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xA4\x16\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xCD\0\xF3\0\xF3\0\xF3\0\xC5\0\xB2\x16\xC0\x16\xCE\0\xF3\0\xF3\0\xF3\0c\x0C\x7F\x06\xF3\0\xCD\x16\xDD\x16\xD1\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xE7\x16\xF3\0\xD1\0\xC7\0\xF3\0\xC7\0\xF3\0\xCD\0\xF3\0\xCD\0L\0\xF3\0L\0\xF3\0\xC9\0\xF3\0\xC9\0\xF3\0\xF4\x16\x02\x17\x02\x17\x02\x17[\x01[\x01[\x01\x12\x17[\x01[\x01\xF3\x0B\"\x08#\x08E\x08\x94\x02\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0L\0&\r\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xD4\x0B\x1D\x17+\x17\xF3\0\xF3\0\xF3\0M\0\x0E\0A\x08\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0\xF3\0N\0;\x17K\x17\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0[\x17\x0E\0\xF3\0\xF3\0O\x01<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xF3\0O\x01<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0k\x17L\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0\xF3\0e\x12\x0E\x11\x0E\0\x0E\0\xF3\0\xF3\0\xF3\0\xF3\0{\x17<\x07\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\xCE\0\xF3\0\x8A\x17\x97\x17\xA5\x17\xB5\x17\xC3\x17\xCB\x17\xC8\0O\0\xDA\x17O\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0A\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0F(\x0F\x0E\0\x95\0\xF3\0)\x01\xF3\0\xE5\x17\xF3\x17\x03\x18\x12\x18(\x0FA\x0FA\x0FA\x0F\"\x18(\x188\x18H\x18\x95\0V\x18\xF9\x0EA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0Fb\x18A\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FC\x0Fr\x18A\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0F\x0E\0\x0E\0\x0E\0A\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0t\x18\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0s\x18A\x0FA\x0F)\x0F\x0E\0\x0E\0\x0E\0\x84\x18Q\x0F\x0E\0\x0E\0\x84\x18\x0E\0'\x0FA\x0FA\x0FA\x0FA\x0FA\x0F)\x0FA\x0FA\x0F\x8C\x18:\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0F\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0<\x07A\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FA\x0FC\x0FJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n\x0E\0\x0E\0J\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nK\rJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nv\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n&\x0BJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n'\x0BJ\nJ\nJ\nJ\nJ\nv\n\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0J\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\ny\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\nJ\n\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x9C\x18\x0E\0[\x01[\x01[\x01[\x01[\x01[\x01\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0\x0E\0[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01[\x01\x0E\0y\0\x8D\0\xAD\0\xCD\0\xED\0\r\x01-\x01M\x01m\x01\x89\x01\xA9\x01\xC3\x01\xE3\x01\x03\x02#\x02C\x02c\x02~\x02\x9E\x02\xBE\x02\xDA\x02\xEE\x02\x0E\x03.\x03N\x03n\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x92\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\xB2\x03\xB2\x03\xCA\x03\xEA\x03\n\x04*\x04\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03\xB2\x03J\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04z\x04\x94\x04\xB2\x04\xD2\x04\xF2\x04\x12\x052\x05R\x05r\x05\x92\x05\xB2\x05\xCA\x05\xEA\x05\n\x06*\x06J\x06j\x06\x8A\x06\xAA\x06\xC5\x06\xB2\x03\xE5\x06\x05\x07j\x04j\x04j\x04j\x04\x1A\x07\xB2\x03\xB2\x03:\x07j\x04j\x04j\x04j\x04j\x04\xB2\x03Z\x07j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04\xB2\x03z\x07j\x04\x96\x07j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04\xB6\x07\xD6\x07j\x04j\x04j\x04j\x04j\x04\xF6\x07j\x04j\x04j\x04j\x04j\x04j\x04j\x04\x06\x08\x1B\x087\x08W\x08m\x08j\x04\x8D\x08j\x04\x9D\x08\xBD\x08\xD4\x08\xE7\x08\xF7\x08\x17\tj\x04j\x047\tW\tw\t\x97\t\xB2\t\xD2\t\xE7\t\x07\n\x08\n\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03(\n\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x038\nW\n\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03m\n\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03x\n\x8E\x03\x97\nj\x04j\x04j\x04j\x04\x8E\x03\x9B\nj\x04j\x04\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\xBB\n\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\x8E\x03\xD0\nj\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04j\x04\xF0\n") }, unsafe { zerovec::ZeroVec::from_bytes_unchecked(b"\0\0\0\0\0\0\0\0\0\0\x02\x03\x03\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x12\0\x0C\0\0\0\0\x0B\0\0\0\0\x0F\0\r\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\x0F\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\x11\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x13\n\0\0\x07\x13\0\0\0\0\0\0\n\0\x0E\0\0\n\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\0\n\n\0\0\n\n\n\n\x0F\n\0\0\0\0\0\0\n\x0E\n\n\n\0\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\0\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\n\n\n\n\0\n\x0E\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x0F\n\0\0\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\x04\x04\0\x04\x04\0\x04\0\0\0\0\0\0\0\0\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\0\0\0\0\t\t\t\t\n\x0E\0\0\0\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\x0F\x0F\0\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\x07\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\x10\x0F\0\n\n\x04\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\x04\x04\x04\x04\x04\x04\x04\x10\0\x04\x04\x04\x04\x04\x04\n\n\x04\x04\0\x04\x04\x04\x04\n\n\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\n\n\n\0\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\n\x04\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\0\0\x0F\0\n\0\0\x04\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\x04\x04\x04\n\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\0\x10\x10\0\0\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x10\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\0\n\n\n\n\n\n\n\n\0\0\n\n\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\0\n\0\0\0\n\n\n\n\0\0\x04\n\x04\x04\x04\x04\x04\0\0\x04\x04\0\0\x04\x04\x04\n\0\0\0\0\0\0\0\0\x04\0\0\0\0\n\n\0\n\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\n\n\0\0\0\0\0\0\0\0\0\0\n\0\x04\0\x04\x04\x04\0\n\n\n\n\n\n\0\0\0\0\n\n\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\0\n\n\0\n\n\0\n\n\0\0\x04\0\x04\x04\x04\0\0\0\0\x04\x04\0\0\x04\x04\x04\0\0\0\x04\0\0\0\0\0\0\0\n\n\n\n\0\n\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x04\x04\n\n\n\x04\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\0\n\n\n\n\n\n\n\n\n\0\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\0\n\n\0\n\n\n\n\n\0\0\x04\n\x04\x04\x04\x04\x04\x04\0\x04\x04\x04\0\x04\x04\x04\0\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\n\x04\x04\x04\x04\x04\x04\0\x04\x04\x04\0\n\n\n\n\n\n\n\n\0\0\n\n\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\0\n\n\0\n\n\n\n\n\0\0\x04\n\x04\x04\x04\x04\x04\0\0\x04\x04\0\0\x04\x04\x04\0\0\0\0\0\0\0\x04\x04\x04\0\0\0\0\n\n\0\n\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\n\0\n\n\n\n\n\n\0\0\0\n\n\n\0\n\n\n\n\0\0\0\n\n\0\n\0\n\n\0\0\0\n\n\0\0\0\n\n\n\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\x04\x04\x04\0\0\0\x04\x04\x04\0\x04\x04\x04\x04\0\0\n\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\0\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\x04\n\x04\x04\x04\x04\x04\0\x04\x04\x04\0\x04\x04\x04\x04\0\0\0\0\0\0\0\x04\x04\0\n\n\n\0\0\n\0\0\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\x04\x04\x04\0\n\n\n\n\n\n\n\n\0\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\0\0\x04\n\x04\x04\x04\x04\x04\0\x04\x04\x04\0\x04\x04\x04\x04\0\0\0\0\0\0\0\x04\x04\0\0\0\0\0\0\n\n\0\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\n\n\x04\0\0\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\n\n\n\n\n\n\n\n\n\0\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\n\x04\x04\x04\x04\x04\0\x04\x04\x04\0\x04\x04\x04\x04\n\0\0\0\0\0\n\n\n\x04\0\0\0\0\0\0\0\n\n\n\x04\x04\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\0\x04\x04\x04\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\0\n\0\0\n\n\n\n\n\n\n\0\0\0\x04\0\0\0\0\x04\x04\x04\x04\x04\x04\0\x04\0\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x14\x14\0\x14\0\x14\x14\x14\x14\x14\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\x14\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\0\x14\x14\x14\x14\x14\0\x14\0\x14\x14\x14\x14\x14\x14\x14\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\x14\x14\x14\x14\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\x04\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\0\0\0\0\0\0\0\x04\0\x04\0\x04\0\0\0\0\x04\x04\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\x04\x04\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x14\x14\x14\x14\x14\x14\n\n\n\n\n\n\0\n\0\0\0\0\0\n\0\0\n\n\n\n\n\n\n\n\n\0\n\n\n\n\0\0\n\n\n\n\n\n\n\0\n\0\n\n\n\n\0\0\n\n\n\n\n\n\n\n\n\n\n\0\0\x04\x04\x04\n\n\n\n\n\n\0\0\n\n\n\n\n\n\0\0\x12\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\0\0\0\0\0\n\n\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\n\n\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\0\n\n\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\n\0\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\x14\x14\x14\x14\0\0\0\x14\0\0\0\0\x14\x14\0\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x07\x04\n\n\n\n\n\x04\x04\n\n\n\n\n\n\n\n\n\x04\n\0\0\0\0\0\n\n\n\n\n\n\0\0\0\0\0\0\0\0\0\0\x14\x14\x14\x14\x14\0\0\0\0\0\0\0\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x14\0\0\0\x14\x14\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\0\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\n\0\0\0\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\x04\n\n\x04\x04\x04\n\0\0\0\0\0\n\n\n\n\n\n\n\n\0\n\0\n\0\n\0\n\0\0\n\n\n\0\n\n\n\n\n\n\n\0\0\0\n\n\n\n\0\0\n\n\n\n\n\n\0\0\0\0\x12\x12\x12\x12\x12\x12\x12\0\x12\x12\x12\0\x04\x05\x07\x07\0\0\0\0\0\0\0\0\r\r\0\0\0\0\0\0\r\0\0\x0E\x03\x03\x07\x07\x07\x07\x07\x11\0\0\0\0\0\0\0\0\0\0\0\0\x13\0\0\x11\0\0\0\x0F\0\0\0\0\x13\0\0\0\0\0\0\x11\0\0\0\0\0\0\0\0\0\0\x12\x07\x07\x07\x07\x07\0\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\0\n\0\0\0\0\0\0\0\0\0\0\0\0\0\n\0\0\0\0\n\0\0\n\n\n\n\n\n\0\n\0\0\0\n\n\n\n\n\0\0\x13\0\n\0\n\0\n\0\n\n\n\n\0\n\n\n\n\n\n\n\n\n\x13\0\0\n\n\n\n\0\0\0\0\0\n\n\n\n\n\0\0\0\0\n\0\0\0\0\x13\x13\x13\x13\x13\x13\0\0\0\0\0\0\0\0\0\x13\x13\0\0\0\0\0\0\0\0\0\0\x13\x13\0\0\0\0\0\0\0\0\x13\0\0\0\0\0\0\0\0\0\x13\x13\x13\x13\x13\x13\x13\0\0\0\0\x13\x13\x13\0\0\0\0\0\n\n\x13\n\n\n\n\n\n\n\n\n\n\n\n\n\x13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x13\x13\x13\x13\0\x13\x13\x13\x13\x13\x13\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\0\0\0\0\0\0\0\0\0\x13\x13\x13\x13\x13\x13\0\0\x13\x13\x13\x13\x13\x13\x13\x13\0\x13\0\x13\0\0\0\0\0\0\x13\0\0\0\0\0\0\0\x13\x13\0\0\0\0\0\0\0\0\0\0\0\x13\0\0\x13\0\0\0\0\x13\0\x13\0\0\0\x13\x13\x13\0\x13\0\0\0\0\0\0\0\0\x13\x13\x13\x13\x13\0\0\0\0\0\0\0\0\x13\x13\x13\0\0\0\0\0\0\0\0\x13\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x13\x13\0\0\0\0\x13\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\0\0\0\0\0\0\n\n\n\n\x04\x04\n\n\0\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\0\0\0\0\0\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\0\x14\x14\x14\x14\x14\x14\0\0\0\0\0\0\0\0\0\0\x12\0\0\0\0\x14\0\x14\0\0\0\0\0\0\0\0\x14\x14\x14\x14\x14\x14\x14\x14\x14\x04\x04\x04\x04\x04\x04\x13\x08\x08\x08\x08\x08\0\0\x14\x14\x14\x14\n\x13\0\0\x14\x14\x14\x14\x14\x14\x14\0\0\x04\x04\x08\x08\x14\x14\x14\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\0\x08\x08\x08\x08\0\0\0\0\0\0\0\x13\0\x13\0\0\0\0\0\0\x08\x08\x08\x08\x08\x08\x08\x08\0\0\0\0\0\0\0\0\x04\x04\x04\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\n\n\0\n\0\n\n\n\n\n\0\0\0\0\0\0\n\n\x04\n\n\n\x04\n\n\n\n\x04\n\n\n\n\x04\x04\x04\x04\x04\0\0\0\0\x04\0\0\0\n\n\n\n\0\0\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\x04\x04\n\n\n\n\n\n\0\0\0\n\0\n\n\x04\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x14\x14\x14\x14\x14\0\n\n\n\x04\n\n\n\n\n\n\n\n\x04\x04\0\0\n\n\n\x04\x04\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\0\0\n\n\n\n\n\n\0\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\0\x04\x04\0\0\n\n\n\n\n\n\n\0\0\0\0\n\n\n\n\n\0\0\0\0\0\t\x04\t\t\t\t\t\t\t\t\t\0\t\t\t\t\t\t\t\0\t\t\t\t\t\0\t\0\t\t\0\t\t\0\t\t\t\t\t\t\t\t\t\t\n\n\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\0\0\0\0\0\0\0\0\x0F\0\0\x0E\x0F\0\0\0\0\0\0\0\0\0\0\0\x11\x11\0\0\0\0\0\0\0\0\0\0\0\0\0\x11\x11\x11\x0F\0\r\0\x0F\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\n\n\0\0\x07\0\0\0\0\0\0\0\r\0\0\0\0\x0F\0\r\0\0\0\0\0\0\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x08\x04\x04\0\0\n\n\n\n\n\n\0\0\n\n\n\0\0\0\0\0\0\0\0\0\x07\x07\x07\0\0\0\0\n\n\n\n\n\n\n\n\n\n\n\0\n\n\0\n\n\n\n\n\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\n\n\n\n\n\n\x04\x04\x04\x04\x04\0\0\0\0\0\n\n\n\n\0\0\0\0\n\n\n\n\n\n\n\n\0\n\n\0\n\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\0\n\n\0\0\0\n\0\n\n\n\n\n\n\n\n\n\0\0\0\0\0\n\n\n\n\n\n\0\0\n\0\n\n\n\n\n\n\0\n\n\0\0\0\n\0\0\n\n\n\0\n\n\0\0\0\0\0\0\0\0\0\0\n\x04\x04\x04\0\x04\x04\0\0\0\0\0\x04\x04\x04\x04\n\n\n\n\n\n\0\0\x04\x04\x04\0\0\0\0\x04\n\n\n\n\n\x04\x04\0\0\0\0\0\0\0\0\0\n\n\n\n\x04\x04\x04\x04\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\0\x04\x04\0\0\0\n\n\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\x04\n\n\x04\x04\n\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\x10\0\0\x04\0\0\0\0\0\0\0\0\0\0\x10\0\0\x04\x04\x04\x04\x04\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\n\x04\x04\n\0\0\0\0\0\0\0\0\n\n\n\x04\0\0\n\0\0\0\0\0\0\0\0\0\x04\n\n\n\n\0\0\0\0\x04\x04\x04\x04\0\x04\x04\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\n\0\n\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\x04\n\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\0\n\0\n\n\n\n\0\n\x04\x04\x04\x04\0\n\n\n\n\n\n\n\n\0\0\n\0\n\n\0\n\n\n\n\n\0\x04\x04\n\x04\x04\n\0\0\0\0\0\0\x04\0\0\0\0\0\n\n\n\x04\x04\0\0\x04\x04\x04\x04\x04\x04\x04\0\0\0\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\x04\n\x04\x04\x04\x04\n\n\0\n\0\0\0\0\0\0\0\0\x04\x04\x04\x04\x04\x04\0\0\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\n\n\n\n\x04\x04\0\0\0\n\0\0\0\0\0\0\0\0\0\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x14\x14\0\0\0\x14\x14\x14\x14\x14\x14\x14\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\0\0\n\0\0\n\n\n\n\x04\x04\x04\x04\x04\x04\0\x04\x04\0\0\x04\x04\x04\x04\n\x04\x04\0\0\0\0\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\0\0\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\0\0\x04\x04\x04\x04\x04\x04\n\0\n\x04\0\0\0\0\0\0\0\0\0\0\0\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\n\x04\x04\x04\x04\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\n\0\0\n\x04\x04\x04\x04\x04\x04\0\0\0\x04\0\x04\x04\0\x04\x04\x04\x04\x04\x04\n\x04\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\0\x04\x04\x04\x04\x04\n\0\0\0\0\0\0\0\n\n\n\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\x04\x04\n\x04\n\n\n\n\n\n\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\0\0\0\x04\x04\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x07\x04\n\n\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\x04\n\n\x14\x14\x04\0\0\0\0\0\0\0\0\0\0\0\x08\x08\x08\x08\0\x08\x08\x08\x08\x08\x08\x08\0\x08\x08\0\x08\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x14\x08\x08\x08\0\0\0\0\0\0\0\0\0\0\0\0\0\x14\0\0\0\0\0\0\0\0\0\0\0\0\0\x14\x14\x14\0\0\x08\0\0\0\0\0\0\0\0\0\0\x08\x08\x08\x08\0\0\0\0\0\0\0\0\n\n\n\n\n\n\n\n\n\n\0\0\0\x04\x04\0\x07\x07\x07\x07\0\0\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\x04\0\0\0\x04\x04\x04\x07\x07\x07\x07\x07\x07\x07\x07\x04\x04\x04\x04\x04\0\0\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\x04\x04\x04\x04\0\0\x04\x04\x04\0\0\0\0\0\0\0\0\0\0\0\n\0\0\n\n\0\0\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\0\n\0\n\n\n\n\n\n\n\n\n\n\0\n\n\n\n\0\n\n\n\n\n\0\n\0\0\0\n\n\n\n\n\n\0\0\n\n\n\n\n\n\n\n\0\n\n\n\n\n\n\n\n\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\x04\x04\x04\x04\x04\x04\x04\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\x04\x04\0\0\x04\x04\x04\x04\x04\0\x04\x04\0\x04\x04\x04\x04\x04\0\0\0\0\0\x04\x04\x04\x04\x04\x04\x04\n\n\n\n\n\n\n\0\0\x10\x10\x10\x10\x10\x10\x10\x10\x10\x10\0\0\0\0\n\0\n\n\n\n\n\n\n\n\n\n\n\n\n\n\x04\0\n\n\n\n\n\n\n\0\n\n\n\n\0\n\n\0\n\n\n\n\x04\x04\x04\x04\x04\x04\x04\n\0\0\0\0\n\n\0\n\0\0\n\0\n\n\n\n\n\n\n\0\n\n\n\n\0\n\0\n\0\0\0\0\n\0\0\0\0\n\0\n\0\n\0\n\n\n\0\n\n\0\n\0\0\n\0\n\0\n\0\n\0\n\n\0\n\0\0\n\n\n\n\0\n\n\n\n\0\n\n\n\n\0\n\0\n\n\n\0\n\n\n\n\n\0\n\n\n\n\n\n\n\n\n\n\0\0\x13\x13\x13\x13\n\n\n\n\n\n\n\n\n\n\n\n\x13\x13\n\n\n\n\n\n\n\n\n\n\0\0\0\0\x13\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\0\0\0\0\x13\x13\x13\x13\x13\x13\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x06\x14\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\0\0\0\0\0\0\0\0\0\x13\0\0\0\0\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x04\x04\x04\x04\x04\0\0\0\0\0\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\0\0\0\0\0\0\0\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\x13\0\x13\x13\x13\x13\0\x07\0\0\0\0\0\0\0\0\0\0\0\0\0\0") }, 0u8), break_state_table: unsafe { zerovec::ZeroVec::from_bytes_unchecked(b"\xFD\xFD\xFD\xFD\0\x19\xFD\0\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x04\x04\xFD\x04\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x1B\x05\xFD\x1C\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x06\x06'\x06\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x07\x07\xFD\x07\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x08\x08\xFD\x08\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\t\t\xFD\t\xFD\xFF\xFF\x9A#! \xFD\xFF\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\n\x15\xFD\n\xFD\xFF\xFF\x1E\xFD\x1F\x1D\xFD\xFF\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x0B\x0B\xFD\x0B\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x0C\x0C\xFD\x0C\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\r\r\xFD\r\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x0E\x0E\xFD\x0E\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x0F\x0F\xFD\x0F\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x10\x10\xFD\x10\xFD\xFF\xFF$\xFD&\xFD%\xFF\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x11\x11\xFD\x11\xFF\xFF\xFF\xFD\xFD\xFD\xFD\xFD\xFF\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x16\x18\xFD\x17\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFF\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x13\x1A\xFD\x13\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFE\xFE\xFE\xFE\n\x15\xFE\n\xFE\xFF\xFF\x1E\xFE\x1F\x1D\xFE\xFF\xFF\xFD\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFD\xFD\xFD\xFD\xFD\x16\x18\xFD\x17\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x16\x18\xFD\x17\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x16\x18\xFD\x17\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFD\xFE\xFE\xFE\xFE\x13\xFE\xFE\x13\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFD\xFD\xFD\xFD\xFD\x1B\x05\xFD\x1C\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\x1B\x05\xFD\x1C\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFE\xFE\xFE\xFE\x1D\x1D\xFE\x1D\xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\x1E\x1E\xFE\x1E\xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\x1F\x1F\xFE\x1F\xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE \xFE \xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE!!\xFE!\xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\"\"\xFE\"\xFE\xFF\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFD\xFE\xFE\xFE\xFE##\xFE#\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE$\xFE\xFE$\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE%\xFE\xFE%\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE&\xFE\xFE&\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFF\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFE\xFD\xFD\xFD\xFD\xFD(\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD\xFD") }, word_type_table: unsafe { zerovec::ZeroVec::from_bytes_unchecked(b"\0\0\0\0\0\0\0\x02\x02\x02\0\0\0\0\0\x01\x02\0\0\x02\x02\x02\x02\x02\0\0\x01\x01\x01\x02\x02\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x02\x02\x02\0\0\0\x02\x02\x02\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0") }, property_count: 43u8, last_codepoint_property: 20u8, sot_property: 41u8, eot_property: 42u8, complex_property: 20u8 }; } #[clippy::msrv = "1.71.1"] impl icu_provider::DataProvider for $provider { diff --git a/provider/registry/src/lib.rs b/provider/registry/src/lib.rs index 8c00381fd09..487e45568a4 100644 --- a/provider/registry/src/lib.rs +++ b/provider/registry/src/lib.rs @@ -217,7 +217,9 @@ macro_rules! registry( icu::segmenter::provider::GraphemeClusterBreakDataV2Marker = "segmenter/grapheme@2", icu::segmenter::provider::LineBreakDataV2Marker = "segmenter/line@2", icu::segmenter::provider::LstmForWordLineAutoV1Marker = "segmenter/lstm/wl_auto@1", + icu::segmenter::provider::SentenceBreakDataOverrideV1Marker = "segmenter/sentence/override@1", icu::segmenter::provider::SentenceBreakDataV2Marker = "segmenter/sentence@2", + icu::segmenter::provider::WordBreakDataOverrideV1Marker = "segmenter/word/override@1", icu::segmenter::provider::WordBreakDataV2Marker = "segmenter/word@2", icu::timezone::provider::MetazonePeriodV1Marker = "time_zone/metazone_period@1", icu::timezone::provider::names::Bcp47ToIanaMapV1Marker = "time_zone/bcp47_to_iana@1", diff --git a/provider/source/data/debug/segmenter/sentence/override@1/.empty b/provider/source/data/debug/segmenter/sentence/override@1/.empty new file mode 100644 index 00000000000..e69de29bb2d diff --git a/provider/source/data/debug/segmenter/word/override@1/.empty b/provider/source/data/debug/segmenter/word/override@1/.empty new file mode 100644 index 00000000000..e69de29bb2d diff --git a/provider/source/data/debug/segmenter/word@2.json b/provider/source/data/debug/segmenter/word@2.json index e1d1166ddfc..81316c2ab7b 100644 --- a/provider/source/data/debug/segmenter/word@2.json +++ b/provider/source/data/debug/segmenter/word@2.json @@ -3239,7 +3239,7 @@ 16, 16, 16, - 14, + 0, 15, 0, 0, @@ -7782,7 +7782,7 @@ 13, 0, 15, - 14, + 0, 0, 0, 0, diff --git a/provider/source/src/segmenter/mod.rs b/provider/source/src/segmenter/mod.rs index 2012d197efe..dac0df8ba82 100644 --- a/provider/source/src/segmenter/mod.rs +++ b/provider/source/src/segmenter/mod.rs @@ -243,6 +243,17 @@ fn generate_rule_break_data( .expect("property name should be valid!"); for c in 0..(CODEPOINT_TABLE_LEN as u32) { if wb.get32(c) == prop { + // UAX29 defines the colon as MidLetter, but ICU4C's + // English data doesn't. + // See https://unicode-org.atlassian.net/browse/ICU-22112 + // + // TODO: We have to consider this definition from CLDR instead. + if (c == 0x003a || c == 0xfe55 || c == 0xff1a) && p.name == "MidLetter" + { + // Default (en etc) is undefined class. + continue; + } + properties_map[c as usize] = property_index; } } @@ -576,6 +587,76 @@ fn generate_rule_break_data( } } +#[cfg(any(feature = "use_wasm", feature = "use_icu4c"))] +fn generate_rule_break_data_override( + provider: &SourceDataProvider, + rules_file: &str, + trie_type: crate::TrieType, +) -> RuleBreakDataOverrideV1<'static> { + let segmenter = provider + .icuexport() + .unwrap() + .read_and_parse_toml::(rules_file) + .expect("The data should be valid!"); + + const CODEPOINT_TABLE_LEN: usize = 0xE1000; + let mut properties_map = vec![0; CODEPOINT_TABLE_LEN]; + let mut properties_names = Vec::::new(); + + properties_names.push("Unknown".to_string()); + + for p in &segmenter.tables { + let property_index = if !properties_names.contains(&p.name) { + properties_names.push(p.name.clone()); + (properties_names.len() - 1).try_into().unwrap() + } else { + continue; + }; + + if p.left.is_none() && p.right.is_none() && p.codepoint.is_none() { + // If any values aren't set, this is builtin type. + match &*segmenter.segmenter_type { + "word" => { + // UAX29 defines the colon as MidLetter, but ICU4C's + // English data doesn't. + // See https://unicode-org.atlassian.net/browse/ICU-22112 + // + // TODO: We have to consider this definition from CLDR instead. + if p.name == "MidLetter" { + properties_map[0x003a] = property_index; + properties_map[0xfe55] = property_index; + properties_map[0xff1a] = property_index; + } + } + "sentence" => { + // UAX#29 doesn't define the 2 characters as STerm, but ICU4C's + // Greek data does. + // + // TODO: We have to consider this definition from CLDR instead. + if p.name == "STerm" { + properties_map[0x003b] = property_index; + properties_map[0x037e] = property_index; + } + } + _ => {} + } + } + } + + RuleBreakDataOverrideV1 { + property_table_override: CodePointTrieBuilder { + data: CodePointTrieBuilderData::ValuesByCodePoint(&properties_map), + default_value: 0, + error_value: 0, + trie_type: match trie_type { + crate::TrieType::Fast => codepointtrie::TrieType::Fast, + crate::TrieType::Small => codepointtrie::TrieType::Small, + }, + } + .build(), + } +} + macro_rules! implement { ($marker:ident, $rules:literal) => { impl DataProvider<$marker> for SourceDataProvider { @@ -610,6 +691,44 @@ macro_rules! implement { } } +macro_rules! implement_override { + ($marker:ident, $rules:literal, [$($supported:expr),*]) => { + impl DataProvider<$marker> for SourceDataProvider { + fn load(&self, req: DataRequest) -> Result, DataError> { + #[cfg(not(any(feature = "use_wasm", feature = "use_icu4c")))] + return Err(DataError::custom( + "icu_provider_source must be built with use_icu4c or use_wasm to build segmentation rules", + ) + .with_req($marker::INFO, req)); + #[cfg(any(feature = "use_wasm", feature = "use_icu4c"))] + return { + self.check_req::<$marker>(req)?; + let data = generate_rule_break_data_override( + &hardcoded_segmenter_provider(), + $rules, + self.trie_type(), + ); + + Ok(DataResponse { + metadata: Default::default(), + payload: DataPayload::from_owned(data), + }) + }; + } + } + + impl crate::IterableDataProviderCached<$marker> for SourceDataProvider { + fn iter_ids_cached(&self) -> Result>, DataError> { + const SUPPORTED: &[&str] = &[$($supported),*]; + Ok(SUPPORTED + .iter() + .map(|l|DataIdentifierCow::from_locale(DataLocale::try_from_str(l).unwrap())) + .collect()) + } + } + } +} + fn hardcoded_segmenter_provider() -> SourceDataProvider { use crate::{ source::{AbstractFs, SerdeCache}, @@ -694,6 +813,16 @@ implement!(LineBreakDataV2Marker, "segmenter/line.toml"); implement!(GraphemeClusterBreakDataV2Marker, "segmenter/grapheme.toml"); implement!(WordBreakDataV2Marker, "segmenter/word.toml"); implement!(SentenceBreakDataV2Marker, "segmenter/sentence.toml"); +implement_override!( + WordBreakDataOverrideV1Marker, + "segmenter/word.toml", + ["fi", "sv"] +); +implement_override!( + SentenceBreakDataOverrideV1Marker, + "segmenter/sentence.toml", + ["el"] +); #[cfg(test)] mod tests { @@ -740,4 +869,16 @@ mod tests { assert_eq!(data.property_table.get32(0xe0001), CM); assert_eq!(data.property_table.get32(0xe0020), CM); } + + #[test] + #[should_panic] + fn missing_locale_data() { + let provider = SourceDataProvider::new_testing(); + let response: DataResponse = provider + .load(Default::default()) + .expect("Loading should succeed!"); + response.payload.get(); + } + + // TODO: Add loading override table data. But no locales in testdata. } diff --git a/tutorials/cpp/segmenter.cpp b/tutorials/cpp/segmenter.cpp index e5edb51c0a2..55cc2826fae 100644 --- a/tutorials/cpp/segmenter.cpp +++ b/tutorials/cpp/segmenter.cpp @@ -126,6 +126,28 @@ void test_word(const std::string_view& str) { } } +void test_word_with_options(const std::string_view& str) { + const auto provider = DataProvider::compiled(); + std::unique_ptr locale = Locale::from_string("sv").ok().value(); + const auto segmenter_auto = + WordSegmenter::create_auto_with_content_locale(*provider.get(), *locale.get()).ok().value(); + const auto segmenter_lstm = + WordSegmenter::create_lstm_with_content_locale(*provider.get(), *locale.get()).ok().value(); + const auto segmenter_dictionary = + WordSegmenter::create_dictionary_with_content_locale(*provider.get(), *locale.get()).ok().value(); + + const WordSegmenter* segmenters[] = {segmenter_auto.get(), segmenter_lstm.get(), + segmenter_dictionary.get()}; + for (const auto* segmenter : segmenters) { + cout << "Finding word breakpoints for sv in string:" << endl << str << endl; + print_ruler(str.size()); + + cout << "Word breakpoints:"; + auto iterator = segmenter->segment(str); + iterate_word_breakpoints(*iterator.get()); + } +} + void test_sentence(const std::string_view& str) { const auto provider = DataProvider::compiled(); const auto segmenter = SentenceSegmenter::create(*provider.get()).ok().value(); @@ -138,6 +160,20 @@ void test_sentence(const std::string_view& str) { iterate_breakpoints(*iterator.get()); } +void test_sentence_with_options(const std::string_view& str) { + const auto provider = DataProvider::compiled(); + std::unique_ptr locale = Locale::from_string("el").ok().value(); + const auto segmenter = + SentenceSegmenter::create_with_content_locale(*provider.get(), *locale.get()).ok().value(); + cout << "Finding sentence breakpoints for el in string:" << endl + << str << endl; + print_ruler(str.size()); + + cout << "Sentence breakpoints:"; + auto iterator = segmenter->segment(str); + iterate_breakpoints(*iterator.get()); +} + int main(int argc, char* argv[]) { Logger::init_simple_logger(); std::string_view str; @@ -156,7 +192,13 @@ int main(int argc, char* argv[]) { test_word(str); cout << endl; + test_word_with_options(str); + cout << endl; + test_sentence(str); cout << endl; + + test_sentence_with_options(str); + cout << endl; return 0; }